# - \#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

::: noteimportant
O tamanho limite de um arquivo a ser monitorado
depende do [suporte a arquivos
grandes](/pt/manual/appendix/items/large_file_support).
:::

#### Configuração

##### Verificação dos parâmetros do agente

Certifique-se que o [arquivo de configuração do
agente](/pt/manual/appendix/config/zabbix_agentd) 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](/pt/manual/config/items/item#overview) de
monitoração de log:

![](../../../../../assets/en/manual/config/items/itemtypes/logfile_item.png)

Você deverá preencher alguns campos específicos:

|   |   |
|---|---|
|*Tipo*|Selecione **Agente Zabbix (ativo)**.|
|*Chave*|Defina como:<br>**log**\[/caminho/para/o/arquivo,<regexp>,<encoding>,<maxlines>,<mode>,<output>\]<br>ou<br>**logrt**\[/caminho/para/o/arquivo/expressao\_regular\_do\_padrao,<regexp>,<encoding>,<maxlines>,<mode>,<output>\]<br>O Zabbix Agent irá filtrar as entradas no arquivo de log pelo conteúdo da expressão regular, se informado.<br>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'.<br>Para maiores detalhes veja as entradas **log** e **logrt** na seção de chaves da [lista de itens do Zabbix Agent](/pt/zabbix_agent#supported_item_keys).|
|*Tipo da informação*|Tipo do dado de **Log**.<br>Se o parâmetro opcional `output` for informado, você poderá selecionar um tipo apropriado de informação que não seja o "Log".<br>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.<br>Se for deixado em branco, os dados de data e hora não serão analisados.<br>Máscara suportada:<br>\* **y**: *Ano (0001-9999)*<br>\* **M**: *Mês (01-12)*<br>\* **d**: *Dia (01-31)*<br>\* **h**: *Hora (00-23)*<br>\* **m**: *Minuto (00-59)*<br>\* **s**: *Segundo (00-59)*<br>Por exemplo, considere a linha a seguir do log do Zabbix Agent:<br>" 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)."<br>Ela começa com seis caracteres para o PID, seguidos de uma data, hora e o resto da linha.<br>A máscara desta linha pode ser definida como "pppppp:yyyyMMdd:hhmmss".<br>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:

```{=html}
<!-- -->
```
       * 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.
