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.
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.
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://thobias.org/doc/sosed.html
http://sed.sourceforge.net/sed1line_pt-BR.html
Parabéns pela iniciativa meu velho.
Crie mais quanto possível, vai ajudar bastante a gente! 😀
Obrigado pelo incentivo, Raul!
Nós (eu, André e Adail) continuaremos investindo nisso.
Abraço e fica com Deus. o/
Pingback: [DICA AVANÇADA] Exercício com LLD personalizado e log no formato CSV | Aécio Pires
Pingback: [DICA AVANÇADA] Exercício com LLD personalizado e log no formato CSV - Peguei do
Iniciando no zabbix, aqui consigo ter as melhores informações sobre o assunto. Parabéns!