Para obtener una visión detallada de los objetivos, el diseño y la implementación de este proyecto, consulte estas publicaciones de blog.
Ekanite es un servidor syslog de alto rendimiento con búsqueda de texto incorporada. Su objetivo es hacer un par de cosas, y hacerlo bien: aceptar mensajes de registro a través de la red y facilitar la búsqueda de mensajes. Lo que le falta en funciones, lo compensa en enfoque. Integrado en Go, no tiene dependencias externas, lo que facilita la implementación.
Las características incluyen:
La búsqueda se implementa utilizando la biblioteca de búsqueda bleve. Para obtener algunos análisis de rendimiento de bleve y de las técnicas de fragmentación utilizadas por Ekanite, consulte esta publicación.
La forma más rápida de comenzar a ejecutar OSX y Linux es descargar un binario de versión prediseñado. Puede encontrar estos binarios en la página de lanzamientos de Github. Una vez instalado, puedes iniciar Ekanite así:
ekanited -datadir ~ /ekanite_data # Or any directory of your choice.
Para ver todas las opciones de Ekanite, pase -h
en la línea de comando.
Si desea compilar Ekanite , ya sea porque desea el código más reciente o porque no hay disponible un binario prediseñado para la plataforma, eche un vistazo a CONTRIBUTING.md.
Por ahora, para que Ekanite acepte registros, su cliente syslog debe estar configurado de manera que las líneas de registro cumplan con RFC5424 y en el siguiente formato:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
Consulta el RFC para conocer qué es cada uno de estos campos. El campo TIMESTAMP debe estar en formato RFC3339. Tanto rsyslog como syslog-ng admiten plantillas, lo que hace que sea muy fácil para esos programas formatear los registros correctamente y transmitirlos a Ekanite. A continuación se muestran plantillas e instrucciones de instalación para ambos sistemas.
rsyslog
# Send messages to Ekanite over TCP using the template. Assumes Ekanite is listening on 127.0.0.1:5514
$template Ekanite,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% - %msg%n"
*.* @@127.0.0.1:5514;Ekanite
Agregue esta plantilla a /etc/rsyslog.d/23-ekanite.conf
y luego reinicie rsyslog usando el comando sudo service rsyslog restart
.
syslog-ng
source s_ekanite {
system(); # Check which OS & collect system logs
internal(); # Collect syslog-ng logs
};
template Ekanite { template("<${PRI}>1 ${ISODATE} ${HOST} ${PROGRAM} ${PID} - $MSGn"); template_escape(no) };
destination d_ekanite {
tcp("127.0.0.1" port(5514) template(Ekanite));
};
log {
source(s_ekanite);
destination(d_ekanite);
};
Agregue esta plantilla a /etc/syslog-ng/syslog-ng.conf
y luego reinicie syslog-ng usando el comando /etc/init.d/syslog-ng restart
.
Con estos cambios implementados, rsyslog o syslog-ng continuarán enviando registros a cualquier destino existente y también reenviarán los registros a Ekanite.
El soporte de búsqueda es bastante simple en este momento. Tiene dos opciones: una interfaz simple tipo telnet y una interfaz de consulta basada en navegador.
Telnet al servidor de consultas (consulte las opciones de la línea de comando) e ingrese un término de búsqueda. El lenguaje de consulta admitido es el lenguaje simple admitido por bleve, pero pronto se admitirá una sintaxis de consulta más sofisticada, incluida la búsqueda de valores de campo específicos.
Por ejemplo, a continuación se muestra una sesión de búsqueda de ejemplo, que muestra los accesos a la URL de inicio de sesión de un sitio de Wordpress. Los clientes telnet se conectan al servidor de consultas e ingresan la cadena login
$ telnet 127.0.0.1 9950
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
login
<134>0 2015-05-05T23:50:17.025568+00:00 fisher apache-access - - 65.98.59.154 - - [05/May/2015:23:50:12 +0000] "GET /wp-login.php HTTP/1.0" 200 206 "-" "-"
<134>0 2015-05-06T01:24:41.232890+00:00 fisher apache-access - - 104.140.83.221 - - [06/May/2015:01:24:40 +0000] "GET /wp-login.php?action=register HTTP/1.0" 200 206 "http://www.philipotoole.com/" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17"
<134>0 2015-05-06T01:24:41.232895+00:00 fisher apache-access - - 104.140.83.221 - - [06/May/2015:01:24:40 +0000] "GET /wp-login.php?action=register HTTP/1.1" 200 243 "http://www.philipotoole.com/wp-login.php?action=register" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17"
<134>0 2015-05-06T02:47:54.612953+00:00 fisher apache-access - - 184.68.20.22 - - [06/May/2015:02:47:51 +0000] "GET /wp-login.php HTTP/1.1" 200 243 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17"
<134>0 2015-05-06T04:20:49.008609+00:00 fisher apache-access - - 193.104.41.186 - - [06/May/2015:04:20:46 +0000] "POST /wp-login.php HTTP/1.1" 200 206 "-" "Opera 10.00"
Quizás sólo quieras buscar accesos POST
a esa URL:
login -GET
<134>0 2015-05-06T04:20:49.008609+00:00 fisher apache-access - - 193.104.41.186 - - [06/May/2015:04:20:46 +0000] "POST /wp-login.php HTTP/1.1" 200 206 "-" "Opera 10.00"
Está previsto un programa de clientes más sofisticado.
La interfaz basada en navegador también acepta consultas estilo Bleve, idénticas a las descritas en la sección Telnet . De forma predeterminada, la interfaz del navegador está disponible en http://localhost:8080. A continuación se muestra una sesión de ejemplo.
Se encuentran disponibles estadísticas y diagnósticos básicos. Visite http://localhost:9951/debug/vars
para recuperar esta información. El host y el puerto se pueden cambiar mediante la opción de línea de comando -diag
.
La arquitectura ahora admite la fácil implementación de nuevos analizadores más allá del syslog estándar en 3 sencillos pasos:
input/parser.go
expanda supportFormats() para capturar el estándar y el nombre adicionales.parser/
, cree el nuevo analizador de formato de entrada utilizando declaraciones de expresiones regulares apropiadas.timestamp
compatible con RFC3339, por ejemplo 2006-01-02T15:04:05Z07:00
input/parser.go
, actualice NewParser() para crear una instancia adecuada del nuevo analizador de formato de entrada. El proyecto no se mantiene activamente, aunque es posible que el desarrollo se repita en el futuro.