Skip to content

exercício adicional

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

 

Resolução de questões sobre expressão regular

Recentemente (Julho/2015) a comunidade Brasileira de usuários do Zabbix publicou uma oportunidade com algumas questões que deveriam ser respondidas pelos usuários como condição necessária para participação no sorteio de 2 vagas em curso EAD e um e-book.

Dentre as sete questões haviam três relacionadas ao uso de expressões regulares no Zabbix. Vamos dar nossa contribuição explicando como elas teriam sido facilmente respondidas através do uso do próprio Zabbix. Vamos às questões:

Primeira questão:
O Zabbix possui suporte a expressões regulares. Caso seja adicionada a expressão: (^[0-9]$|^1[0-9]$|^2[0-9]$) em uma expressão regular com valor verdadeiro esperado qual das opções abaixo será válida?

a) 91
b) 11
c) 912
d) 81929
Na primeira questão é apresentada uma expressão regular e pergunta-se qual é o valor que teria resultado positivo ao ser validado pela mesma.
Então a forma mais fácil de responder você acredita que seja?

Continue reading