
Estou começando uma série de artigos nos quais desejo compartilhar minha experiência de conectar o Exchange e o ELK. Esta pilha o ajudará a processar grandes volumes de logs e não se perguntará com que tamanho as ferramentas de log usuais se recusarão a nos ajudar. Vamos conhecer o novo lutador com logs.
O Exchange tem um sistema de registro bastante extenso. Os registros mais populares são os registros de rastreamento, que rastreiam a passagem passo a passo de uma carta específica dentro da organização postal; logs do servidor da web, que rastreiam cada nova sessão do usuário no sistema, e logs de aplicativos da web específicos com vários graus de granularidade de sessão. O Exchange também pode armazenar logs de protocolo smtp, imap e pop3 brutos.
Quais ferramentas podemos usar para trabalhar com registros:
- Cmdlet Get-MessageTrackingLog padrão: conveniente para lidar com logs de rastreamento;
- O utilitário logparser: usa uma linguagem de pesquisa pseudo-SQL para registro e funciona com bastante rapidez;
- Servidor SQL externo: para casos especialmente específicos (por exemplo, análise de dados por longos períodos de tempo).
Tudo isso funciona bem quando temos alguns servidores e o volume de logs processados é medido em dezenas ou centenas de gigabytes. Mas e se houver dezenas de servidores e o tamanho dos logs exceder um terabyte? Este esquema provavelmente está começando a desmoronar.
E aqui está o que acontece: Get-MessageTrackingLog começa a cair devido ao tempo limite, o logparser atinge o teto da arquitetura de 32 bits e o upload para o servidor SQL é interrompido no momento mais inoportuno, sem digerir a exceção de várias linhas do serviço.
Aqui, um novo jogador entra em cena - a pilha ELK, que é especialmente adaptada para lidar com grandes volumes de logs em um tempo razoável e com consumo de recursos tolerável.
Na primeira parte, explicarei em detalhes como conectar filebeat, que faz parte da pilha ELK- é responsável por ler e enviar arquivos de texto simples nos quais diferentes aplicativos gravam seus logs. Nos artigos a seguir, nos deteremos nos componentes Logstash e Kibana com mais detalhes.
Instalação
Portanto, o arquivo-archive do agente filebeat pode ser baixado deste site .
Concluiremos a instalação simplesmente descompactando o conteúdo do arquivo zip. Por exemplo, em
c:\Program Files\filebeat
. Em seguida, você precisa executar o script PowerShell install-service-filebeat.ps1
que vem com o kit para instalar o serviço filebeat.
Agora estamos prontos para começar a personalizar o arquivo de configuração.
tolerância ao erro
O Filebeat garante a entrega de logs ao sistema de coleta de logs. Isso é feito mantendo um registro de entradas nos arquivos de log. O registro armazena informações sobre os registros lidos dos arquivos de log e marca os registros específicos que foram entregues ao destino.
Se algum registro não puder ser entregue, o filebeat tentará enviá-lo novamente até que receba uma confirmação de entrega do sistema de recebimento ou o arquivo de log original seja excluído durante a rotação.
Quando o serviço for reiniciado, o filebeat lerá as informações sobre os últimos registros lidos e entregues do registro e lerá os registros nos arquivos de log com base nas informações do registro.
Isso minimiza o risco de perda de informações sobre os logs que precisam ser enviados aos servidores elastic \ logstash durante falhas inesperadas e realização de operações de manutenção do servidor.
Você pode ler mais sobre isso na documentação nos parágrafos : Como o Filebeat mantém o estado dos arquivos e como o Filebeat garante a entrega pelo menos uma vez?
Configurando
Toda a configuração é feita no arquivo de configuração de formato
yml
, que é dividido em várias seções. Vejamos alguns deles envolvidos na coleta de logs de servidores Exchange.
Unidade de processamento de log
O bloco de processamento de log começa com o campo:
filebeat.inputs:
Usaremos uma ferramenta comum de coleta de registros:
- type: log
Em seguida, indicamos o status (habilitado) e os caminhos para a pasta com os logs. Por exemplo, no caso de logs do IIS, as configurações podem ser as seguintes:
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
Outro ajuste importante é como o filebeat deve ler registros de várias linhas. Por padrão, o filebeat considera uma linha do arquivo de log como um registro. Isso funciona bem, desde que não comecemos a receber exceções relacionadas à operação incorreta do serviço em nosso log. Nesse caso, as exceções podem abranger várias linhas. Portanto, o filebeat deve tratar um registro de várias linhas como um se a próxima linha começar com uma data. O formato para gravar logs no Exchange é o seguinte: cada novo registro no arquivo de log começa com uma data. Na configuração, esta condição se parece com isto:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
Faz sentido adicionar tags à postagem que você envia, por exemplo:
tags: ['IIS', 'ex-srv1']
E não se esqueça de excluir do processamento as linhas que começam com um caractere hash:
exclude_lines: ['^#']
Portanto, o bloco de leitura dos logs ficará assim:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
Bloco de envio de log
O Filebeat envia entradas individuais no arquivo de log como um objeto json, no qual uma entrada específica do log está contida em um único campo de mensagem. Se quisermos trabalhar de alguma forma com essas informações, precisamos primeiro analisar este campo em campos separados. Isso pode ser feito, por exemplo, no logstash. Será o destinatário dos registros do filebeat. Esta é a aparência do arquivo de configuração do filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Se houver vários servidores, o balanceamento pode ser habilitado para eles: o filebeat enviará os logs não para o primeiro servidor disponível da lista, mas distribuirá os logs enviados entre vários servidores:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
O Filebeat, ao processar logs no json enviado, além da entrada de log, que está contida no campo de mensagem, adiciona uma certa quantidade de metadados, que afeta o tamanho do documento que entra no elástico. Esses metadados podem ser removidos seletivamente do envio. Isso é feito no bloco do processador usando o processador
drop_fields
. Você pode excluir, por exemplo, os seguintes campos:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
A escolha dos campos excluídos deve ser abordada com cuidado, porque alguns deles podem ser usados no lado elástico para construir índices.
Portanto, o bloqueio para envio de logs será semelhante a este:
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
Configurações de registro do Filebeat
Faz sentido definir as seguintes configurações de registro:
- Informações do nível de registro;
- Gravamos logs em arquivos localizados por padrão (o diretório de logs, no diretório de instalação do filebeat);
- O nome do arquivo de log é filebeat;
- Mantenha os últimos 10 arquivos de log;
- Inicie a rotação quando o tamanho atingir 1 MB.
Finalmente, o bloco de configurações de registro ficará assim:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
Configuração final
Coletamos a configuração e agora ela se parece com isto:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
É importante entender que o formato do arquivo de configuração é yml. Portanto, é importante colocar espaços e sinais de menos corretamente.
O Filebeat pode verificar o arquivo de configuração e, se a sintaxe contiver erros, indicará em qual linha e onde na linha a sintaxe está incorreta. A verificação é feita da seguinte forma:
.\filebeat.exe test config
Além disso, o filebeat pode verificar a disponibilidade de rede do receptor de log. A verificação é iniciada assim:
.\filebeat.exe test output
Nas próximas partes, falarei sobre a conectividade do Exchange e a amizade com os componentes Logstash e Kibana.