fbpx

10 dicas para envio de logs usando o Fluentd

Daniella Costa

10 dicas para envio de logs usando o Fluentd

Fluentd é um coletor de dados de código aberto que unifica a coleta e o consumo de dados.
Possui diferentes tipos de plugins que recuperam logs de fontes externas, analisam-nos e os enviam para ferramentas de gerenciamento de logs como Site24x7 AppLogs. tail, forward, udp, tcp, http, syslog, exec e windows_eventlog são plugins de entrada comuns.

Lendo logs com base no tipo

A maneira como as ferramentas de gerenciamento de logs leem os logs varia de acordo com o tipo de log e como ele é enviado. Neste blog, abordaremos diferentes casos de uso com sua sintaxe.

1.     Syslogs

O plugin de entrada in_syslog permite que o Fluentd recupere registros através do protocolo syslog em UDP ou TCP. Basta configurar seu daemon syslog para enviar mensagens para o soquete.
<source>
@type syslog
port 5140
bind 0.0.0.0
tag system
</source>

2.     Logs de eventos do Windows

Para coletar eventos de aplicativo, sistema e canal de segurança dos logs de eventos do Windows usando o Fluentd, use o plug-in abaixo:
<source>
@type windows_eventlog
@id windows_eventlog
channels application,system,security
tag winevt.raw
<storage>
@type local
persistent true
path C:\opt\td-agent\winevt.pos
</storage>
</source>

3.     HTTP

Para enviar eventos por meio de solicitações HTTP, você pode usar o plug-in in_http do Fluentd e iniciar um endpoint REST para coletar dados.
<source>
@type http
port 9880
bind 0.0.0.0
body_size_limit 32m
keepalive_timeout 10s
</source>

4.     Executivo

Você pode usar o plug-in de entrada in_exec para coletar logs usando a execução de comandos. Ele executa programas externos para receber ou puxar logs de eventos. O plug-in lê valores separados por tabulação, JSON ou MessagePack da saída padrão do programa.
<source>
@type exec
tag system.loadavg
command cat /proc/loadavg | cut -d ' ' -f 1,2,3
run_interval 1m
<parse>
@type tsv
keys avg1,avg5,avg15
delimiter " "
</parse>
</source>

5.     Análise de log baseada em arquivo

Usando o plug-in de entrada in_tail , você pode ler eventos da cauda dos arquivos de texto. Se necessário, você pode analisar o conteúdo do log, como as informações de um campo específico. A definição da análise varia de acordo com o tipo de arquivo de log que deve ser enviado usando o Fluentd.

§  arquivo CSV

<source>
@type tail
path /var/log/sample-log.csv
pos_file /var/log/td-agent/csv.log.pos
tag dummy.access
<parse>
@type csv
keys time,host,req_id,user
time_key time
</parse>
</source>
<match dummy.*>
@type stdout
</match>

§  Linha única: logs de acesso do Apache

<source>
@type tail
path /var/log/httpd-access.log
exclude_path ["/path/to/*.gz", "/path/to/*.zip"]
pos_file /var/log/td-agent/httpd-access.log.pos
tag dummy.apache
<parse>
@type apache2
</parse>
</source>

§  Várias linhas: rastreamento de pilha Java

<parse>
@type multiline
format_firstline /\d{4}-\d{1,2}-\d{1,2}/
format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/
</parse>

Adicionando filtros à análise de log

Muitas vezes, quando você ingere logs em um sistema, deseja remover determinados campos ou adicionar alguns. Abordaremos esses casos de uso especiais abaixo.

1.     Aplicando filtros

Se você deseja excluir as linhas de log com as INFO de nível de log ao analisar os logs, use a seguinte sintaxe:
<filter foo.bar>
@type grep
<exclude>
key log_level
pattern /INFO/
</exclude>
</filter>
Se você deseja excluir as linhas de log com os campos de nome de host contendo web1.example.com e web5.example.com durante a análise os logs, você pode usar a sintaxe fornecida abaixo:
<filter foo.bar>
@type grep
<regexp>
key hostname
pattern /^web\d+\.example\.com$/
</regexp>
</filter>

2.     Mascarando campos seguros

Se suas linhas de log contiverem dados seguros, como um endereço IP ou uma credencial, você poderá mascarar essa entrada específica antes de enviá-los.
Input = 172.21.163.159 - - [07/Jun/2017:19:53:11 +0530] \"GET /tets?private_token=0101032030301&user=as7&cid=12e09qweqweqq HTTP/1.1\" 200 12 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"
<source>
@type tail
path /var/log/httpd-access.log
pos_file /var/log/td-agent/httpd-access.log.pos
tag apache.access
<parse>
@type apache2
</parse>
</source>
<filter apache.access>
@type record_transformer
enable_ruby
<record>
path ${record["path"].gsub(/(private_token=)(\d+)/,'\1****'}
</record>
</filter>

3.     Removendo campos indesejados

As linhas de log são sempre enormes porque cada evento é registrado. No entanto, durante o monitoramento, pode-se não precisar de todos os campos na linha de log. Aqui, você pode optar por remover os campos indesejados e exportar apenas o necessário. No exemplo abaixo, consideramos o caso de uso dos logs de pod do Kubernetes, onde você pode remover o valor key_name_field antes de analisar os logs.
<filter foo.bar>
@type parser
key_name log
reserve_data true
remove_key_name_field true
<parse>
@type json
</parse>
</filter>

Entrada: 
{“key”:”value”,”log”:”{\”user\”:1,\”num\”:2}”}
Saída: {“key”:”value”,”user”: 1,”num”:2}

Aqui está outro exemplo:
<filter foo.bar>
@type record_transformer
remove_keys hostname,$.kubernetes.pod_id
</filter>
Input:
{ “hostname”:”db001.internal.example.com”, “kubernetes”:{ “pod_name”:”mypod-8f6bb798b-xxddw”, “pod_id” :

4.     Adicionando um novo campo

Para adicionar um novo campo ao log, você pode considerar o exemplo abaixo. Aqui, estamos adicionando o nome do host da máquina ao log no campo hostname .
<filter foo.bar>
@type record_transformer
<record>
hostname "#{Socket.gethostname}"
</record>
</filter>

5.     Campos de transformação

Aqui está um exemplo em que o total do campo é dividido pela contagem do campo para criar uma nova média do campo.
Se você deseja transformar campos de log, pode usar a sintaxe abaixo:
Input = {"total":100, "count":10}
Output = {"total":100, "count":10, "avg":"10"}
<filter foo.bar>
@type record_transformer
enable_ruby
auto_typecast true
<record>
avg ${record["total"] / record["count"]}
</record>
</filter>

Conclusão

O Fluentd oferece diferentes opções para personalizar a maneira como você analisa os logs. O Logstash é um remetente de log semelhante que é igualmente popular como o Fluentd. Ele segue etapas semelhantes para usar a sintaxe e os plug-ins apropriados para definir como seus logs devem ser analisados. Compreender o básico pode ajudá-lo a analisar os logs com base em seus casos de uso.O Site24x7 suporta exportações de log por meio do Fluentd e do Logstash.

Você pode experimentar o Site24x7 dentro da sua empresa sem custo algum. Que tal realizar esse teste agora?

Conheça na prática como o Site24x7 pode ajudar você e o seu negócio. Nossos técnicos estão disponíveis para te apresentar a melhor solução de monitoramento em nuvem para sua infraestrutura, conte sempre com o apoio da equipe ACSoftware.

ACSoftware / Figo Software seu Distribuidor e Revenda ManageEngine no Brasil

Fone (11) 4063 1007 – Vendas (11) 4063 9639