Transforme sua Raspberry Pi em um SysLog Server Deixe um comentário

Arquivos de log registram eventos que ocorrem no sistema operacional. Seu principal objetivo é permitir a identificação de eventuais problemas. Ocorre que, consultar um único repositório de dados (Syslog Server) é muito mais eficiente do que consultar cada dispositivo individualmente para obter os mesmos dados. Ao final desse post, teremos desenvolvido um SysLog Server com Raspberry Pi. Uma solução eficiente e economicamente viável para você e também para pequenas e médias empresas.

Material necessário para o Syslog Server com Raspberry Pi

Para realizar este projeto, vamos precisar de:

O que é Syslog?

Syslog (System Logging Protocol) é um protocolo usado para coletar mensagens de log do sistema, gravá-las em arquivos (/var/log), ou ainda, encaminhá-las para um repositório de dados, também conhecido como Syslog Server.

Existem várias implementações do Syslog, nesse post usaremos o Rsyslog. Além da pilha TIG (Telegraf / InfluxDB / Grafana) para visualizar as mensagens de log em gráficos e tabelas.

O que é Rsyslog?

Rsyslog é um sistema “rápido como um foguete” para processamento de log. Ele oferece alto desempenho, excelentes recursos de segurança e um design modular.

Rsyslog pode ser configurado em um modelo cliente/servidor. Como cliente, ele encaminha as mensagens de log para um servidor (Syslog Server). Como servidor, ele recebe as mensagens de log dos clientes.

O que é a pilha TIG (Telegraf / InfluxDB / Grafana)?
A Pilha TIG é um acrônimo para Telegraf, InfluxDB e Grafana.

Telegraf é usado para enviar as mensagens de log coletadas pelo Rsyslog para o InfluxDB.

InfluxDB é um banco de dados de série temporal (dados com registro de data e hora), otimizado para armazenamento rápido e de alta disponibilidade. Usado para armazenar as mensagens de log enviadas pelo Telegraf.

Grafana é um pacote de visualização e monitoramento de dados. A ferramenta fornece um belo painel de controle e análises de métricas. Usado para visualizar as mensagens de log em gráficos e tabelas, tendo como fonte de dados o InfluxDB.

Instalação e configuração do Rsyslog

Instale o Rsyslog:

apt update && apt install rsyslog -y

Edite o arquivo de configuração (fazendo uma cópia de segurança antes):

cp -p /etc/rsyslog.conf /etc/rsyslog.conf.default && vim /etc/rsyslog.conf

Descomente as linhas abaixo para usar TCP como protocolo de transporte:

module(load="imtcp")
input(type="imtcp" port="514")

Em seguida, adicione as linhas abaixo para criar um modelo para os logs de entrada. Se você não configurar um modelo, todas as mensagens de log enviadas pelos clientes serão misturadas com os logs do servidor:

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?Incoming-logs

Finalmente, adicione a linha abaixo, substituindo 192.168.0 de acordo com sua configuração de rede, especificando quem têm permissão de enviar mensagens de log para Rsyslog:

$AllowedSender TCP, 127.0.0.1, 192.168.0.0/24

IMPORTANTE: pelo design do UDP, não é possível identificar um endereço de remetente falsificado. Dessa forma, uma pessoa mal-intencionada pode falsificar o endereço de um cliente e enviar mensagens de log em seu lugar. Para evitar isso, use o Rsyslog via TCP exclusivamente.

Até aqui, configuramos o Rsyslog para receber mensagens de log na porta 514 TCP, apenas de dispositivos da rede 192.168.0.0/24 e armazená-las no diretório /var/log.

Agora precisamos configurar o Rsyslog para encaminhar as mensagens de log para o Telegraf.

Para isso, edite o arquivo de configuração:

vim /etc/rsyslog.d/50-telegraf.conf

Adicione as linhas abaixo:

$ActionQueueType LinkedList # Usa processamento assíncrono
$ActionQueueFileName srvrfwd # Define o nome do arquivo e ativa modo de disco
$ActionResumeRetryCount -1 # Tentativas infinitas em caso de falha de inserção
$ActionQueueSaveOnShutdown on # Salva dados em memória se Rsyslog desligar
# Encaminha mensagens de log para Telegraf na porta 6514 UDP (RFC 5425)
*.* @127.0.0.1:6514;RSYSLOG_SyslogProtocol23Format

E reinicie o serviço:

systemctl restart rsyslog

Instalação e configuração do Telegraf

Instale o Telegraf:

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - && source /etc/os-release && echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list && apt update && apt install telegraf -y

Edite o arquivo de configuração (fazendo uma cópia de segurança antes):

cp -p /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.default && vim /etc/telegraf/telegraf.conf

Para enviar as mensagens de log ao InfluxDB, adicione as linhas abaixo logo após a seção [[outputs.influxdb]:

urls = ["http://127.0.0.1:8086"]
database = "telegraf"
username = "telegraf"
password = "Te1egr@f"

Para receber as mensagens de log encaminhadas pelo Rsyslog, adicione as linhas abaixo no final do arquivo:

[[inputs.syslog]]
server = "udp://localhost:6514"

E reinicie o serviço:

systemctl restart telegraf

Instalação e configuração do InfluxDB

Instale o InfluxDB:

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - && source /etc/os-release && echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list && apt update && apt install influxdb -y && systemctl unmask influxdb.service && systemctl start influxdb

IMPORTANTE: Se o InfluxDB estiver sendo implantado em um endereço publicamente acessível, recomenda-se fortemente que a autenticação seja habilitada. Caso contrário, os dados estarão disponíveis publicamente para qualquer usuário não autenticado. Além disso, restrinja o acesso criando usuários individuais e atribuindo a eles permissões relevantes de leitura e/ou gravação.

Acesse a ferramenta:

influx

Crie o usuário (admin) e senha (P@55word) com privilégios de administrador (WITH ALL PRIVILEGES), exigência para habilitar a autenticação:

CREATE USER admin WITH PASSWORD 'P@55word' WITH ALL PRIVILEGES

Crie o usuário (telegraf) e senha (Te1egr@f) com privilégios de administrador apenas para o banco de dados telegraf (GRANT ALL ON telegraf):

CREATE USER telegraf WITH PASSWORD 'Te1egr@f'
GRANT ALL ON telegraf TO telegraf

Feche a ferramenta CLI:

quit

Edite o arquivo de configuração (fazendo uma cópia de segurança antes):

cp -p /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default && vim /etc/influxdb/influxdb.conf

Adicione a linha abaixo logo após a seção [http]:

auth-enabled = true

E reinicie o serviço:

systemctl restart influxdb

Instalação e configuração do Grafana

Instale o Grafana:

apt install software-properties-common wget apt-transport-https -y && wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - &&
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list && apt update && apt install grafana -y && systemctl daemon-reload && systemctl enable grafana-server && systemctl start grafana-server

Acesse o Grafana usando seu navegador preferido, substituindo 192.168.0.16 pelo endereço IP da sua Raspberry Pi :

http://192.168.0.16:3000

Digite o usuário (admin) e senha (admin) padrão

Por segurança será solicitado a troca da senha padrão.

No menu esquerdo, clique na seção Configuration > Data sources

Na janela seguinte, clique em Add data source

No painel de seleção, escolha InfluxDB e clique em Select

No campo URL digite: http://localhost:8086

No campo Database digite: telegraf
No campo User digite: telegraf
No campo Password digite: Te1egr@f
No campo HTTP Method selecione: POST

Clique em Save & test, se tudo estiver certo você verá Data source is working

No menu esquerdo, clique na seção Create > Import

No campo Import via grafana.com digite 12433 e clique em Load

No campo InfluxDB selecione InfluxDB e clique em Import

Pronto!! Já é possível visualizar as mensagens de log em gráficos e tabelas.

Agora que concluímos a instalação e configuração do Syslog Server, precisamos configurar os clientes.

Instalação e configuração do Rsyslog no Cliente

Instale o Rsyslog:

apt update && apt install rsyslog -y

Edite o arquivo de configuração (fazendo uma cópia de segurança antes):

cp -p /etc/rsyslog.conf /etc/rsyslog.conf.default && vim /etc/rsyslog.conf

Adicione as linhas abaixo no final do arquivo, substituindo 192.168.0.16 pelo endereço IP da sua Raspberry Pi:

## Envia mensagens de log para a porta 514 TCP
*.* @@192.168.0.16:514

## Definir fila de disco
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

E reinicie o serviço:

systemctl restart rsyslog

Conclusão

Você configurou com sucesso um Syslog Server usando Rsyslog, InfluxDB, Telegraf e Grafana. Com certeza a tarefa de analisar mensagens de log será muito mais eficiente. O Grafana mostra um painel de gráfico de estatísticas (syslog count) na parte superior, com base no período de tempo escolhido. Além de uma visão de tabela (Syslog Messages) de todas as mensagens dentro deste período de tempo, incluindo as colunas usuais como hora da mensagem, appname, host, gravidade e texto da mensagem. Também fornece alguns filtros extras com base no nome do aplicativo, nome do host, gravidade e texto da mensagem. Uma solução completa, usando somente software open source e a pequena grande Raspberry Pi.

Faça seu comentário

Acesse sua conta e participe