Monitorando logs em tempo real com Log.io

28/06/2016

Fala, galera. Hoje vou mostrar como podemos monitorar os logs em tempo real, seja de nosso produto, servidor, site, enfim. Qualquer ferramenta que gere log em arquivo de texto.

Log.io

Log.io é uma plataforma que permite o monitoramento das atividades de log através do navegador, utilizando as tecnologias do node.js e socket.io. Basicamente trabalha com três componentes: harvesters, server e client web. O harvester é responsável por verificar as mudanças no log que devem ser monitoradas. Quando uma mudança é realizada, uma mensagem é enviada para o servidor. Uma vez chegada no servidor, a mensagem é distribuída para todos os clientes web. As mensagens que transitadas não são persistida em nenhum lugar. Log.io não é uma camada de persistência, ok? Então nada de apagar o arquivo físico do log (a não ser que você saiba exatamente o que está fazendo :] )

Instalação

Como dito anteriormente, o log.io trabalha com o node.js. Para isso, você precisa ter instalado em seu servidor (veja aqui como instalar o node). A instalação é feita via npm. Para isso, instale:

1
$ sudo npm install -g log.io --user "root"

Apesar da documentação oficial sugerir o user “ubuntu”, precisei alterar o user para root. Isso porque o usuário “ubuntu” não tinha permissão para ler o arquivo de log de meu sistema.

Pronto. Agora só precisa configurar e executar o processo em background.

Configuração

Antes de startar o log.io-server, precisamos configurar o harvester, para indicar quais os logs que serão monitorados. Utilize o editor de sua preferência (aqui utilizei o nano).

1
$ nano ~/.log.io/harvester.conf

Nele, indicaremos quais os arquivos que serão monitorados e para qual servidor será enviado as mensagens. No meu exemplo, estarei monitorando as mensagens de erro e acesso do servidor nginx.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
exports.config = { 
    nodeName: "webServer", 
    logStreams: { 
      access: [ 
        "/var/log/nginx/access.log"
      ],
      error: [
        "/var/log/nginx/error.log"
      ] 
    }, 
    server: { 
      host: '127.0.0.1', 
      port: 28777 
    } 
}

Na configuração acima, defini o nome do node e categorizei os canais dos arquivos monitorados em “error” e “access”. No cliente web, você pode agrupar a exibição por nodes ou streams. Logo em seguida, configurei para qual servidor seria enviado as mensagens. Nesse caso, mantive o ip local, já que o log.io está no mesmo servidor da aplicação. Mas você pode também configurar o monitoramento de logs em outros servidores e enviar para o “servidor central” de monitoramento.

Pronto! Agora você pode startar o log.io-server e log.io-harvester:

1
2
$ log.io-server &
$ log.io-harvester &

Obs: o & no final do comando permite que os processos sejam executados em background.

Voilà! Agora acesse: http://localhost:28778 para visualizar o painel de monitoramento.

Segurança

Precisamos evitar que o monitor de log fique disponível para qualquer pessoa. Assim, configure o arquivo web_server.conf para definir autenticação básica HTTP:

$ nano ~/.log.io/web_server.conf

Localize o atritbuto “auth” e remova o comentário (apague as linhas onde tem /* e */ que envolve o parâmetro). Defina um login e senha.

Outras configurações também são possíveis, como a restrição baseada pelo IP. Em meu caso, manterei apenas as credenciais de autenticação.

Monitorando logs de outros servidores

Como dito anteriormente, posso ter harvester remoto. Em meu exemplo, considere um servidor externo de banco de dados e preciso monitorar o log do mysql no mesmo painel. Para isso, precisaremos repetir no outro servidor, o processo de instalação e configuração do Log.io. A diferença está no parâmetro server do arquivo harvester.conf. Ao lugar do ip local, indicaremos o ip do servidor onde está o log.io-server:

1
2
3
4
    server: { 
      host: '123.123.123.123', 
      port: 28777 
    }

Outro detalhe é que não precisaremos startar o processo log.io-server no servidor do banco, já que as mensagens serão enviadas para nosso servidor central. Apenas o processo abaixo deve ser iniciado:

1
$ log.io-harvester &

Pronto. Temos agora dois observadores de log, em servidores distintos, enviando as mensagens para um único log.io-server que é responsável por encaminhar para o painel final.

Qualquer dúvida, deixa um comentário aí embaixo. Um abraço e até a próxima.