Para uma visão detalhada dos objetivos, design e implementação deste projeto, confira estas postagens do blog.
Ekanite é um servidor syslog de alto desempenho com pesquisa de texto integrada. Seu objetivo é fazer algumas coisas, e fazê-las bem: aceitar mensagens de log pela rede e facilitar a pesquisa das mensagens. O que falta em funcionalidade, compensa em foco. Construído em Go, não possui dependências externas, o que facilita a implantação.
Os recursos incluem:
A pesquisa é implementada usando a biblioteca de pesquisa bleve. Para algumas análises de desempenho do bleve e das técnicas de sharding usadas pelo Ekanite, confira este post.
A maneira mais rápida de começar a rodar no OSX e no Linux é baixar um binário de versão pré-construído. Você pode encontrar esses binários na página de lançamentos do Github. Uma vez instalado, você pode iniciar o Ekanite assim:
ekanited -datadir ~ /ekanite_data # Or any directory of your choice.
Para ver todas as opções do Ekanite, passe -h
na linha de comando.
Se você deseja construir o Ekanite , seja porque deseja o código mais recente ou porque um binário pré-construído para a plataforma não está disponível, dê uma olhada em CONTRIBUTING.md.
Por enquanto, para que o Ekanite aceite logs, seu cliente syslog deve ser configurado de forma que as linhas de log sejam compatíveis com RFC5424 e no seguinte formato:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
Consulte a RFC para saber o que é cada um desses campos. O campo TIMESTAMP deve estar no formato RFC3339. Tanto o rsyslog quanto o syslog-ng suportam modelos, o que torna muito fácil para esses programas formatar os logs corretamente e transmiti-los para o Ekanite. Modelos e instruções de instalação para ambos os sistemas estão abaixo.
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
Adicione este modelo a /etc/rsyslog.d/23-ekanite.conf
e reinicie o rsyslog usando o 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);
};
Adicione este modelo a /etc/syslog-ng/syslog-ng.conf
e reinicie o syslog-ng usando o comando /etc/init.d/syslog-ng restart
.
Com essas mudanças em vigor, rsyslog ou syslog-ng continuarão a enviar logs para qualquer destino existente e também encaminharão os logs para Ekanite.
O suporte à pesquisa é bastante simples no momento. Você tem duas opções: uma interface simples do tipo telnet e uma interface de consulta baseada em navegador.
Telnet para o servidor de consulta (consulte as opções de linha de comando) e insira um termo de pesquisa. A linguagem de consulta suportada é a linguagem simples suportada pelo bleve, mas uma sintaxe de consulta mais sofisticada, incluindo a busca por valores de campos específicos, poderá ser suportada em breve.
Por exemplo, abaixo está um exemplo de sessão de pesquisa, mostrando acessos à URL de login de um site Wordpress. Os clientes Telnet se conectam ao servidor de consulta e inserem a string 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"
Talvez você queira apenas pesquisar acessos POST
para esse 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"
Um programa cliente mais sofisticado está planejado.
A interface baseada em navegador também aceita consultas no estilo bleve, idênticas às descritas na seção Telnet . Por padrão, a interface do navegador está disponível em http://localhost:8080. Um exemplo de sessão é mostrado abaixo.
Estatísticas e diagnósticos básicos estão disponíveis. Visite http://localhost:9951/debug/vars
para recuperar essas informações. O host e a porta podem ser alterados por meio da opção de linha de comando -diag
.
A arquitetura agora suporta a fácil implementação de novos analisadores além do syslog de estoque em 3 etapas fáceis:
input/parser.go
expanda SupportedFormats() para capturar o padrão e o nome adicionais.parser/
, crie o novo analisador de formato de entrada usando instruções regex apropriadas.timestamp
compatível com RFC3339, por exemplo 2006-01-02T15:04:05Z07:00
input/parser.go
, atualize NewParser() para instanciar corretamente o novo analisador de formato de entrada. O projeto não é mantido ativamente, embora o desenvolvimento possa ocorrer novamente no futuro.