Skip to content

Exercício com LLD personalizado e log no formato CSV

No livro De A a Zabbix, o assunto LLD é mostrado nas páginas 272 a 278.

Neste post vamos fazer um exercício adicional sobre este assunto.

Mas antes de começarmos o exercício, vamos entender alguns conceitos.

Conceitos:

LLD – Low Level Discovery => André Déo (um dos três autores do livro) publicou a seguinte definição em seu blog: “LLD é uma função do Zabbix responsável por detectar determinadas características de um objeto, de forma dinâmica. Por exemplo, o Zabbix vai achar dinamicamente todas as partições da sua máquina (o objeto são as partições), e coletar dados como tamanho da partição, espaço livre, espaço utilizado (essas são as características do objeto).”

JSON – JavaScript Object Notation => Segundo André: “é uma formatação para intercâmbio de dados computacionais, que para seres humanos é fácil de ler e escrever e, para as máquinas é fácil de interpretar e gerar. Se você entende como um XML funciona, entende como um JSON funciona ;-)”

CSV – Comma-separated values => é um formato que permite a separação de valores por vírgula, ponto e vírgula, enfim. Mais detalhes em: https://pt.wikipedia.org/wiki/Comma-separated_values

Parser => “Em Português conhecemos como Análise Sintática, mas a maioria das pessoas usa o termo em inglês, de maneira simples, significa ler uma entrada de dados, nesse caso um arquivo JSON, e interpretar a sua estrutura gramatical” (esta também é um definição que peguei do site do Déo).

Como funciona o LLD no Zabbix?

De forma resumida, o LLD no Zabbix funciona assim:

Você gera um arquivo ou executa um script que exiba os resultados no formato JSON utilizando o padrão de macros do Zabbix “{#OBJETO}”. Essas macros representarão os objetos, por exemplo: a lista de placas de rede, a lista de partições, a lista de base de dados, a lista de tabelas de uma base de dados, a lista de servidores, a lista de informações de um arquivo de log. Isso é a Regra de Descoberta de um LLD.
Em seguida você instrui o Zabbix a coletar características de um desses objetos da lista. Isso é o Protótipo de itens associado a uma regra de descoberta do LLD.

Por exemplo: para cada partição do sistema, o Zabbix coleta o tamanho da partição, o espaço livre e o espaço utilizado. Com esses itens gerados, podemos criar outros protótipos como triggers e gráficos, telas. Tudo automaticamente. Isso dentro de um template facilita o uso em vários hosts.

O LLD tem suporte as chaves suportadas pelo Zabbix, OIDs SNMP ou Scripts Personalizados, que é o alvo deste exercício.

Arquivos usados no exercício

Baixe o pacote Alarmes_via_LLD. Descompacte o pacote e veja os seguintes arquivos:

alarm_zabbix.log => Arquivo de log no padrão CSV.

get_alarm_ldd.sh => Script que lê um arquivo de log no padrão CSV e exibe os dados no padrão JSON.

UserParameter.conf => Contém o UserParameter.

zbx_Alarmes_via_LLD.xml => Template que obtém, automaticamente, alarmes registrados em um arquivo de log. Ele já contém uma regra de descoberta do LLD cadastrado, que por sua vez contém protótipos de itens e triggers.

Objetivo do exercício

Vamos imaginar que temos uma aplicação fictícia que alimente um arquivo de log no formato CSV. Neste exercício temos o arquivo alarm_zabbix.log com o conteúdo abaixo.

1
O significado de cada campo do arquivo separado por vírgula é:

  • O primeiro campo de cada linha do arquivo de log exibe um número de identificação, que no template é representado pela variável {#ID}.
  • O segundo campo de cada linha exibe a hora em que o evento foi registrado.
  • O terceiro campo de cada linha exibe o tipo de equipamentos em que houve um evento.
  • O quarto campo de cada linha exibe o nome dos equipamento em que houve um evento.
  • O quinto campo de cada linha exibe o nome do componente de software, hardware ou serviço que foi afetado pelo evento, que no template é representado pela variável {#COMPONENT}. Neste exercício ele é o objeto.
  • O sexto campo de cada linha exibe o nome do evento, que no template é representado pela variável {#EVENT}.
  • O sétimo campo de cada linha exibe a severidade ou gravidade do evento. Embora seja possível obter a severidade automaticamente, o Zabbix não dá suporte a alterar a severidade automaticamente. Foi aberto este ticket sugerido a modificação https://support.zabbix.com/browse/ZBXNEXT-2769
  • O oitavo e último campo de cada linha exibe uma descrição do evento e até informações de solução do mesmo.

Foi desenvolvido o script get_alarm_ldd.sh, que também está no pacote, para ler cada linha do arquivo de alarme e exibir os dados no padrão JSON. O resultado do script foi homologado no site http://jsonlint.com/

O objetivo do exercício é usar um template que contém uma regra de descoberta para que exibe todos os eventos registrados no formato CSV no arquivo de log.
Esta regra de descoberta é acionada se o script for executado assim:

/usr/local/share/zabbix/externalscripts/get_alarm_ldd.sh LLD /usr/local/share/zabbix/externalscripts/alarm_zabbix.log

Como o objeto LLD deste exercício é o nome do componente, o resultado do comando acima pode ser filtrado quando o comando for executado da seguinte forma:

/usr/local/share/zabbix/externalscripts/get_alarm_ldd.sh LLD /usr/local/share/zabbix/externalscripts/alarm_zabbix.log NOME_COMPONENTE NOME_EVENTO

O comando exibe todos os registros relacionados a determinado evento e componente.
Com este resultado ainda não é possível usá-lo num LLD, pois ele não suporta a exibição de várias linhas de resultado para uma mesma chave de pesquisa. Para resolver isso, pode ser executado o comando da forma abaixo:

/usr/local/share/zabbix/externalscripts/get_alarm_ldd.sh LLD /usr/local/share/zabbix/externalscripts/alarm_zabbix.log NOME_COMPONENTE NOME_EVENTO ID_DO_EVENTO

Claro que não é necessário você saber cada ID os valores possíveis de cada campo do arquivo. Este é um trabalho do LLD. Ele vai coletar todas as características dos eventos e componentes e na interface Web do Zabbix você poderá saber o que é que está sendo registrado no arquivo de log e vai receber os alarmes conforme a ocorrência dos eventos para depois decidir que ação tomar (se vai enviar alguma notificação ou executar algum comando ou ação).

Executando o exercício

1) Acesse um host GNU/Linux que está sendo monitorado pelo Zabbix, via agente Zabbix, e insira no final do arquivo /usr/local/etc/zabbix_agentd.conf a seguinte linha:

UserParameter=GET_ALARM_LLD[*], $1 $2 $3 $4 $5 $6

2) Copie os arquivos get_alarm_ldd.sh e alarm_zabbix.log para o diretório: /usr/local/share/zabbix/externalscripts/

3) Depois reinicie o Agente Zabbix.

Com isso, foi criada a chave GET_ALARM_LLD[*], que pode receber 6 parâmetros, onde cada um deles significa:

$1 => caminho do script que no template está em uma macro de template. Ex.: /usr/local/share/zabbix/externalscripts/get_alarm_ldd.sh
$2 => a nossa regra de descoberta. EX.: LLD.
$3 => caminho do arquivo de log no formato CSV. Ex.: /usr/local/share/zabbix/externalscripts/alarm_zabbix.log
$4 => NOME_COMPONENTE. Ex.: BACKUP
$5 => NOME_EVENTO. Ex.: NEW_FILE
$6 => ID. EX.: 14

4) Acesse a interface Web do Zabbix e clique em Configuração > Templates > Importar. Importe o template zbx_Alarmes_via_LLD.xml.

Este template possui duas macros:

{$SCRIPT_ALARM} => /usr/local/share/zabbix/externalscripts/get_alarm_ldd.sh
{$FILE_ALARM} => /usr/local/share/zabbix/externalscripts/alarm_zabbix.log

Localize o template Alarmes via LLD e clique em Regras de Descoberta. A regra geral de descoberta possui a seguinte sintaxe: GET_ALARM_LLD[{$SCRIPT_ALARM},LLD,{$FILE_ALARM}]

O protótipo de item cadastrado neste template possui a seguinte sintaxe: GET_ALARM_LLD[{$SCRIPT_ALARM},LLD,{$FILE_ALARM},{#COMPONENT},{#EVENT},{#ID}]

O protótipo de trigger cadastrada neste template possui a seguinte sintaxe: {Alarmes via LLD:GET_ALARM_LLD[{$SCRIPT_ALARM},LLD,{$FILE_ALARM},{#COMPONENT},{#EVENT},{#ID}].str({#EVENT})}=1

Isto permite que sempre que houver a ocorrência de um determinado evento para um determinado componente, vai ser acionada uma trigger.

Associe o template ao host que contém o arquivo de log e o script.

Os resultados serão exibidos na página Monitoramento > Dashboard e em Monitoramento > Triggers.

 

2

3

4Fonte:

http://andredeo.blogspot.com.br/2014/11/lld-no-zabbix-com-shell-script.html

https://enrise.com/2014/12/automated-ssl-monitoring-low-level-discovery-zabbix/

https://www.reconnix.com/blog/2015/03/19/chris-davidson-using-zabbix-to-make-magic/

http://spinola.net.br/blog/?p=402

https://www.zabbix.com/documentation/2.4/manual/discovery/low_level_discovery

http://jsonlint.com/

http://thobias.org/doc/sosed.html

http://sed.sourceforge.net/sed1line_pt-BR.html

 

5 thoughts on “Exercício com LLD personalizado e log no formato CSV

  1. Raul says:

    Parabéns pela iniciativa meu velho.

    Crie mais quanto possível, vai ajudar bastante a gente! 😀

    Responder
  2. Aecio Pires says:

    Obrigado pelo incentivo, Raul!

    Nós (eu, André e Adail) continuaremos investindo nisso.

    Abraço e fica com Deus. o/

    Responder
  3. Pingback: [DICA AVANÇADA] Exercício com LLD personalizado e log no formato CSV | Aécio Pires

  4. Pingback: [DICA AVANÇADA] Exercício com LLD personalizado e log no formato CSV - Peguei do

  5. ismar says:

    Iniciando no zabbix, aqui consigo ter as melhores informações sobre o assunto. Parabéns!

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *