Gerenciando a Configuração do Filebeat: Erros Comuns e Soluções

A configuração inadequada do Filebeat pode levar a problemas de duplicação de logs e falhas na saída de dados. Este artigo aborda dois cenários comuns e suas respectivas correções.

Cenário 1: Procsesos Filebeat Múltiplos Devido à Configuração do Supervisor

Sintoma: Monitoramento de Elasticsearch indicando um aumento incomum no volume de requisições. Ao investigar os logs, uma única requisição aparece múltiplas vezes.

Causa Raiz: Vários processos Filebeat rodando na mesma máquina, cada um enviando o mesmo log. Isso ocorreu devido a uma configuração do Supervisor que, ao atualizar sua própria configuração, não encerrava processos Filebeat existentes, permitindo que novos processos fossem iniciados repetidamente.

Configuração Problemática (Supervisor):

[program:filebeat_process]
command=sh /etc/supervisord.d/start_filebeat.sh
process_name=filebeat_process
redirect_stderr=true
stdout_logfile=/tmp/filebeat_process.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
autorestart=true
startsecs=3
startretries=3

start_filebeat.sh
#!/bin/bash
/opt/soft/filebeat-7.5.1-linux-x86_64/filebeat -c /opt/soft/filebeat-7.5.1-linux-x86_64/filebeat.yml

Configuração Correta (Supervisor): A linha command deve apontar diretamente para o executável do Filebeat, sem um script intermediário que possa ser chamado múltiplas vezes.

[program:filebeat_process]
command=/opt/soft/filebeat-7.5.1-linux-x86_64/filebeat -c /opt/soft/filebeat-7.5.1-linux-x86_64/filebeat.yml
process_name=filebeat_process
redirect_stderr=true
stdout_logfile=/tmp/filebeat_process.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
autorestart=true
startsecs=3
startretries=3

Procedimento de Correção:

  1. Parar o serviço do Supervisor para evitar que processos antigos sejam reiniciados automaticamente.
  2. Identificar e encerrar todos os processos Filebeat redundantes.
  3. Atualizar a configuração do Supervisor.
  4. Iniciar o serviço do Filebeat através do Supervisor.
# Parar o Filebeat gerenciado pelo Supervisor
ansible all_servers -m shell -a "supervisorctl stop filebeat_process"

# Encerrar processos Filebeat órfãos
ansible all_servers -m shell -a "ps -ef | grep filebeat | grep -v grep | awk '{print \$2}' | xargs -I {} kill -9 {}"

# Atualizar a configuração do Supervisor
ansible all_servers -m shell -a "supervisorctl update"

# Iniciar o Filebeat
ansible all_servers -m shell -a "supervisorctl start filebeat_process"

Cenário 2: Múltiplos Destions de Saída na Configuração do Filebeat

Sintoma: Erro ao iniciar o Filebeat com a mensagem: Exiting: error unpacking config data: more than one namespace configured accessing 'output' (source:'/opt/soft/filebeat-7.5.1-linux-x86_64/filebeat.yml').

Causa Raiz: A configuração do Filebeat permite apenas um destino de saída principal (seja Logstash ou Elasticsearch). Tentar configurar ambos diretamente na seção output gera um conflito.

Configuração Problemática (Filebeat):

output:
 logstash:
   hosts: ["1.1.1.1:10515"]
   when.not.contains:
     tags: "sys-log"
 elasticsearch:
   hosts: ["2.2.2.2:9200"]
   username: "xxx"
   password: "xxx"
   indices:
     - index: "sys-log-%{[agent.version]}-%{+yyyy.MM}"
       when.contains:
         tags: "sys-log"

Solução: Para enviar dados para destinos diferentes com base em condições, é necessário rodar instâncias separadas do Filebeat. Cada instância será configurada com um único destino de saída.

Exemplo de Configuração para duas instâncias:

  • Instância 1 (Saída para Logstash): Arquivo filebeat_logstash.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/app.log
  fields:
    source: "app"
  fields_under_root: true
  tags: "app-log"

output:
 logstash:
   hosts: ["1.1.1.1:10515"]
   loadbalance: true

  • Instância 2 (Saída para Elasticsearch): Arquivo filebeat_elasticsearch.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
  fields:
    source: "system"
  fields_under_root: true
  tags: "sys-log"

output:
 elasticsearch:
   hosts: ["2.2.2.2:9200"]
   username: "xxx"
   password: "xxx"
   indices:
     - index: "sys-log-%{[agent.version]}-%{+yyyy.MM}"

Cada uma dessas configurações seria gerenciada por um processo separado do Filebeat, possivelmente via Supervisor, garantindo que cada um tenha seu próprio destino de saída definido.

Tags: filebeat supervisor Logstash elasticsearch configuracao

Publicado em 7-15 01:13