6 Monitoramento de arquivos de Log

Visão geral

O Zabbix pode ser utilizado como para monitoração e análise centralizada de arquivos de log, com ou sem suporte a rotação.

As notificações podem ser utilizadas para avisar os usuários quando um arquivo de log contêm determinados textos ou padrões de texto.

Para monitorar um log você precisa:

  • de um Zabbix Agent em execução no host
  • configurar um item de monitoramento de log

O tamanho limite de um arquivo a ser monitorado depende do suporte a arquivos grandes.

Configuração

Verificação dos parâmetros do agente

Certifique-se que o arquivo de configuração do agente tenha, no mínimo, os parâmetros a seguir devidamente configurados:

  • O parâmetro 'Hostname' deverá estar igual ao campo Nome no host configurado na interface web do Zabbix
  • O parâmetro 'ServerActive' esteja definido apropriadamente para permitir o processamento de verificações ativas
Configuração do item

Para configurar um item de monitoração de log:

Você deverá preencher alguns campos específicos:

Tipo Selecione Agente Zabbix (ativo).
Chave Defina como:
log[/caminho/para/o/arquivo,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
ou
logrt[/caminho/para/o/arquivo/expressao_regular_do_padrao,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
O Zabbix Agent irá filtrar as entradas no arquivo de log pelo conteúdo da expressão regular, se informado.
Certifique-se que o usuário 'zabbix' tem permissões de acesso para ler o arquivo, a ausência destas fará com que o arquivo fique como 'não suportado'.
Para maiores detalhes veja as entradas log e logrt na seção de chaves da lista de itens do Zabbix Agent.
Tipo da informação Tipo do dado de Log.
Se o parâmetro opcional output for informado, você poderá selecionar um tipo apropriado de informação que não seja o "Log".
Observe que ao selecionar um tipo diferente de "Log" o dado salvo não terá a informação de data e hora.
Intervalo entre atualizações (em segundos) Este parâmetro define de quanto em quanto tempo o Zabbix irá verificar se existem alterações no arquivo de log. O menor valor é 1 segundo.
Formato de data no log Com este campo você pode, de forma opcional, definir o padrão para análise de data e hora no log.
Se for deixado em branco, os dados de data e hora não serão analisados.
Máscara suportada:
* y: Ano (0001-9999)
* M: Mês (01-12)
* d: Dia (01-31)
* h: Hora (00-23)
* m: Minuto (00-59)
* s: Segundo (00-59)
Por exemplo, considere a linha a seguir do log do Zabbix Agent:
" 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)."
Ela começa com seis caracteres para o PID, seguidos de uma data, hora e o resto da linha.
A máscara desta linha pode ser definida como "pppppp:yyyyMMdd:hhmmss".
Observe que os caracteres "p" e ":" são espaços reservados que podem conter qualquer coisa, ao contrário de "yMdhms".

Notas importantes

  • O Zabbix Server/Agent mantêm a informações sobre o tamanho e última modificação (para o logrt) dos logs monitorados em dois contadores. Adicionalmente:
   * O agente também utiliza internamente os números de inodes (em UNIX/GNU/Linux), índices de arquivos (no Microsoft Windows) e sumarização  MD5 dos primeiros 512 bytes do arquivo de log para acelerar a detecção de arquivos de log truncados ou rotacionados.
          * Em ambiente UNIX/GNU/Linux é assumido que os sistemas de arquivos onde os logs estão armazenados informem o número do inode, através do qual o arquivo será rastreado.
          * Em ambiente Windows o agente determina o tipo do sistema de arquivos onde o arquivo de log está e usa:
              * Em sistema de arquivo NTFS de 64-bit a indexação de arquivo.
              * Em sistema de arquivo ReFS (apenas no Windows Server 2012) usa a identificação de 128-bit do arquivo.
              * Em sistema de arquivo onde os índices mudam (Ex. FAT32, exFAT) um algorítimo de retorno é utilizado para melhorar a detecção quando vários arquivos de log possuem a mesma data de modificação.
          * Os números de inode, índices de arquivo e sumarização MD5 são coletados internamente pelo Zabbix Agent. Eles não são transmitidos para o Zabbix Server e tais informações são perdidas quando a execução do agente é finalizada.
          * Não altere a data de última modificação dos aquivos de log com utilitários de "toque", não copie um arquivo de log com data de restauração anterior do que o original (isso irá alterar o número do inode). Em ambos os casos o arquivo será considerado diferente e será analisado, possivelmente resultando em alertas duplicados.
       
          * Se existirem vários arquivos de log compatíveis com o item ''logrt[]'' e o Zabbix Agent estiver acompanhando o arquivo mais recente e este for excluído, será registrada uma mensagem de aviso ''"there are no files matching "<regexp mask>" in "<directory>"''. O Zabbix Agent irá ignorar os arquivos de log com data de última modificação menor do que o valor mais recente visto pelo item de ''logrt[]''.
       * O agente inicia lendo o arquivo de log a partir do local lido pela última vez.
       * A quantidade de bytes já analisada (tamanho do contador) e o momento da última modificação (o contador de hora) são armazenados no banco de dados do Zabbix  e enviados para o agente para garantir que a leitura dos logs comece a partir deste ponto quando o agente for iniciado, reabilitado ou o item deixar de ser 'não suportado'.
       * Sempre que o arquivo de log tornar-se menor do que o último valor conhecido pelo agente o contador no lado do agente é zerado e o arquivo é analisado desde o seu início.
       * Se existirem vários arquivos correspondentes e com o mesmo momento de alteração no diretório monitorado o agente tentará ler todos os aquivos e evitar duplicidades, embora não seja possível garantir isso. O agente não irá presumir nenhum método de rotação de arquivos, simplesmente os lerá em ordem decrescente. Assim, para alguns esquemas de rotação de arquivos de log, os dados serão analisados e relatados em sua ordem original. Para outros esquemas de rotação a ordem dos arquivos originais poderão não ser respeitada (o que não ocorrerá se os arquivos tiverem datas de modificação diferentes).
       * O Zabbix Agent processa os novos registros de um arquivo de log respeitando o //Intervalo de atualização// em segundos.
       * O Zabbix Agent, a cada segundo, não enviará mais linhas do que o definido pelo parâmetro **maxlines**. Esta característica visa evitar sobrecarga de CPU e rede e tem prioridade sobre o definido no parâmetro **MaxLinesPerSecond** do [[pt:manual:appendix:config:zabbix_agentd|arquivo de configuração do agente]].
       * Para localizar o texto desejado o Zabbix irá processar 4 vezes mais linhas do que o definido em MaxLinesPerSecond. Assim, por exemplo, se um item de ''log[]'' ou ''logrt[]'' possui um //Intervalo de Atualização// de 1 segundo, por padrão o Agente analisará não mais que 80 linhas no log e enviará não mais que 20 linhas compatíveis para o Zabbix Server por verificação. Ao incrementar o parâmetro **MaxLinesPerSecond** no lado do agente ou definindo o parâmetro **maxlines** na chave do agente, o limite poderá ser incrementado em até 4000 linhas analisadas e 1000 linhas enviadas para o Zabbix Server por verificação. 
       * Adicionalmente, os valores analisados sempre estarão limitados a 50% do tamanho do buffer do agente, mesmo se o espaço estiver ocupado por valores não relacionados a log. Então, para os valores definidos em **maxlines** serem enviados em apenas uma conexão (e não em várias), o parâmetro [[pt:manual:appendix:config:zabbix_agentd|BufferSize]] do agente deverá ser no mínimo duas vezes superior à quantidade de linhas. 
       * Na ausência de itens de log, todo o buffer do agente estará disponível para itens não relacionados à log. Quando vierem novos valores de log os mesmos substituirão os demais valores no buffer até o liite de 50%.
       * Para registros de log superiores a 256kB, apenas os primeiros 256kB serão analisados pela expressão regular e o restante será ignorado. Contudo, se o Zabbix Agent parar enquanto está tratando um registro muito grande o estado interno do agente será perdido e o registro terá que ser analisado novamente quando o agente for iniciado.
       * Observação especial os separadores de caminho "\": se o formato de arquivo for "arquivo\.log", então o "arquivo" não poderá ser um diretório, uma vez que não é possível distinguir quando o "." está escapado ou se é o primeiro caracter do arquivo.
       * As expressões regulares para a chave ''logrt'' são suportadas apenas no nome do arquivo, expressões regulares no nome de diretório não são suportadas.
       * Em plataformas UNIX um item com a chave ''logrt[]'' passa a ser 'não suportado' se diretório dos arquivos de log não existir.
       * Ao contrário do que ocorre no UNIX, nas plataformas Microsoft Windows, se o diretório não existir o item não irá passar para o estado de 'não suportado' (por exemplo, se o diretório for escrito errado na chave).
       * A ausência de arquivos de log para a análise não irá fazer que um item que utiliza a chave ''logrt[]'' passe para o estado 'não suportado'. Erros de leitura em arquivos de log serão registrados como alerta nos logs do Zabbix Agent apenas.
       * O arquivo de log do Zabbix Agent pode ser muito útil para descobrir o motivo pelo qual um item de ''log[]'' ou ''logrt[]'' passou para o estado 'não suportado'.O Zabbix Agent pode monitorar o seu próprio log, exceto se o nível de debug estiver como 'DebugLevel=4'.

Extraindo a parte compatível de uma expressão regular

Algumas vezes você precisa extrair apenas uma parte de uma linha do log, ao invés de obter a linha toda.

Desde o Zabbix 2.2.0, os itens de log tem a capacidade de extrair apenas a parte relevante das linhas compatíveis. Isso pode ser feito ao utilizar o parâmetro opcional output nos itens log e logrt.

output permite indicar um subgrupo da parte compatível que pode ser de interesse.

Então, por exemplo

log[/path/to/the/file,"large result buffer allocation.*Entries: ([0-9]+)",,,,\1]

irá retornar apenas o contador encontrado em:

Fr Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) large result
       buffer allocation - /Length: 437136/Entries: 5948/Client Ver: >=10/RPC
       ID: 41726453/User: AUser/Form: CFG:ServiceLevelAgreement

O motivo pelo qual o Zabbix retorna somente o número é por que o parâmetro output está definido como \1, se referenciando o primeiro e único grupo de interesse: ([0-9]+)

E, com a habilidade de extrair e retornar um número, o valor pode ser utilizado para definir triggers.