Aprendendo Zabbix – Templates – Parte 3

Nos artigos anteriores aprendemos a criar templates, itens, triggers e gráficos. Agora iremos nos aprofundar em alguns recursos interessantes que a versão 2 do Zabbix adicionou ao template. Temos a possibilidade de automação de inventário, telas definidas em nível do template (antes elas só existiam em nível de hosts) e o processo de descoberta de baixo nível (internas ao equipamento). Vamos então alterar aquele host criado no segundo tutorial sobre templates para que ele utilize não mais o template 102 e sim o template 105 que importará e aproveitará todos os dados até então coletados para o host adicionando ainda as novas características para monitorar o banco de dados MySQL existente no servidor do Zabbix. Para alterar o host e associa-lo ao template 105:

  • Acesse a tela de manutenção de hosts (Configuração -> Hosts);
  • Clique sobre o host Servidor_Teste_1;
  • Na sequência clique na aba Templates;
  • Clique no link Desassociar (atenção a este passo… se você clicar em “Desassociar e limpar” irá perder os dados já coletados);
  • Clique no link Adicionar;
  • Selecione o template 105_Apache_PHP_MySQL e clique em Selecionar;

host_servidor_teste_1_associar_template_105

Além da associação ao novo template (para que vocês consigam ver que é possível criar novos templates e substituir sem perda de dados) iremos habilitar o recurso de Inventário do Host. Para habilita-lo é bem simples:

  • Clique na aba Inventário do Host;
  • Clique no botão Automático;
  • Salve o registro;

Com esta nova configuração o seu host ganhará novos itens a monitorar além de estar com o suporte a inventário automatizado habilitado. Consulte, após alguns minutos por conta dos tempos de coleta, os dados recentes do host e veja a diferença. Para você não ficar contando os segundos, vamos fazer algo útil enquanto isso: vamos alterar o template 105 para que ele consiga buscar também o hostname configurado no servidor, este campo será automaticamente enviado para o inventário do host. Para alterar o template adicionando o novo item:

  • Acesse a tela de manutenção de templates (Configuração -> Templates);
  • Clique sobre o link Itens (5) da linha do template 105_Apache_PHP_MySQL;
  • Clique em Criar Item;
  • Preencha o formulário conforme definido na tabela 1 e salve;
Tabela 1 – Item para coletar o hostname
Nome Hostname
Tipo agente Zabbix
Chave system.hostname[]
Tipo de informação Carácter
Nova Aplicação Inventário
Descrição Recupera o hostname do servidor e o ativa no inventário.
Preenche o campo no inventário Nome

Observem como o conceito é simples: ao definir o campo “Preenche o campo no inventário” o Zabbix entende que toda vez que ele coletar um novo valor para o campo ele deverá atualizar o inventário do host com a mesma informação. Ao retornar a tela de hosts você poderá observar já o resultado da coleta (após 30 segundos…) e o seu inventário deverá estar similar à imagem abaixo (com a exceção dos dados é claro pois seu hostname pode ser diferente). host_servidor_teste_1_inventario_com_hostname

Temos aqui apenas uma limitação: o Zabbix não concatena dados no campo ele coloca apenas o dado de um item lá. Então campos como “Software” ou “Hardware” dificilmente serão preenchidos automaticamente sem a utilização de recursos de cálculo ou scripts. Iremos tratar estas possibilidades em artigos posteriores.

Telas de Templates

Este é um dos recursos adicionados pelo Zabbix 2.0 com este recurso é possível definir telas automáticas para os hosts de forma que se tenha uma padronização de visualização de informações. Este recurso tem uma limitação que é a fonte de acesso. Você pode definir as telas, entretanto, elas não ficam visíveis a partir do menu normal de acesso às telas (Monitoração -> Telas) sendo restrito o seu acesso apenas a partir de mapas onde o host esteja visível. Por conta desta limitação neste momento definiremos as telas mas só iremos visualiza-las em artigo que criarmos mapas. Para criar uma tela você deve:

  • Acessar a tela de templates;
  • Clicar no link Telas (0) da linha do template 105_Apache_PHP_MySQL;
  • Clicar no botão Criar Tela;
  • Definir o nome (Tela Padrão – APM) e as dimensões da tela (1 coluna e 2 linhas);
  • Salvar o registro;

Você será encaminhado de volta a listagem de telas do template e, a partir deste ponto, você deverá estar sempre atento com uma coisa:

  • A página de edição de telas salva automaticamente;

Ao contrário do padrão do resto do ambiente Zabbix esta tela salva sempre automaticamente, logo… alterou… salvou… não existe opção de retorno. Até este ponto você definiu a estrutura da tela, o seu esqueleto. Agora iremos definir o conteúdo da tela. Clique sobre o link com o nome da tela que você criou: Tela Padrão – APM; template_105_edicao_tela

Será carregado o editor de telas e neste editor haverão dois links com o texto Alterar. Clique no link Alterar superior para definirmos um gráfico a ser apresentado naquele local. Será apresentado um editor onde você pode selecionar elementos de vários tipos, configure-o da seguinte forma:

  • Selecione o Recurso do tipo Gráfico;
  • Clique no botão selecionar e clique em cima de Apache – Uso de memória;
  • Clique no botão Salvar;

template_105_edicao_tela_selecionar_grafico_memoria_apache

Não estranhe a mensagem dizendo que não existem dados no gráfico pois eles realmente não existem, pelo menos não no escopo atual que você está. Você está editando o template e, por definição, o template é apenas um modelo – ele nunca terá dados. Conforme alertei no início do artigo, esta tela só irá apresentar dados em artigo posterior que versar sobre mapas. A sua tela deverá estar similar à imagem abaixo neste momento: template_105_edicao_tela_selecionar_grafico_memoria_apache_resultado Vamos agora editar a segunda linha e adicionar o gráfico de uso de memória do processo MySQL.

  • Clique no link Alterar da segunda linha;
  • Selecione o Recurso do tipo Gráfico;
  • Clique no botão selecionar e clique em cima de MySQL – Uso de memória;
  • Clique no botão Salvar;

Pronto a tela que pretendíamos criar está concluída. Propositalmente não irei postar como ela ficou, aguardaremos para o prometido artigo sobre mapas.

Autobusca – LLD (Low Level Discovery)

Este é outro recurso advindo da versão 2 do Zabbix. Até então tínhamos apenas o processo de descoberta automática de rede. O que existia dentro de cada equipamento monitorado era tarefa do administrador de monitoração mapear e configurar… item a item… trigger a trigger… gráfico a gráfico. Agora, para os administradores organizados, o trabalho reduziu significativamente. É possível criar regras de descoberta interna do equipamento (LLD) que são executadas periodicamente e reconfiguram o host criando, modificando ou excluindo as configurações de monitoração em virtude das mudanças que perceberam no elemento monitorado. Por exemplo, digamos que você tenha um servidor windows que sempre teve dois discos: o drive C: e o drive D:. Os usuários foram inserindo os arquivos lá… foram adicionando… e foi necessário adicionar um novo drive o drive E:. Nas versões anteriores do Zabbix você teria que mudar manualmente o seu perfil de monitoração Com o LLD você não precisa mais fazer isso. Você configura uma periodicidade e define protótipos de itens, triggers e gráficos. Com estes protótipos o Zabbix reconfigura automaticamente o perfil de monitoração do servidor possibilitando que o ambiente se reconfigure continuamente de forma automática. Vamos alterar o template 105 para que ele possua agora um processo de autobusca. Para criar a regra de descoberta siga os passos abaixo:

  • Acesse a tela de templates (Configuração -> Templates);
  • Na linha do template 105_Apache_PHP_MySQL clique no link Regras de descoberta (0);
  • Clique no botão Criar Regra de Descoberta;
  • Preencha os dados conforme tabela 2 e salve o registro;
Tabela 2 – Criação do LLD
Nome Descoberta de sistemas de arquivos
Tipo agente Zabbix
Chave vfs.fs.discovery
Intervalo de Atualização (segundos) 300
Período de Retenção (dias) 30
Filtrar {#FSTYPE}
RegExp @File systems for discovery

Como o LLD é algo novo e por isso acho que vale a pena explicar um pouco mais alguns campos. O campo chave é relacionado à uma consulta ao agente do Zabbix que retornará um código no formato JSON. O retorno desta consulta nos traz duas informações para cada sistema de arquivos localizado:

  • {#FSNAME} – Nome do sistema de arquivos
  • {#FSTYPE} – Tipo do Sistema de arquivos

O campo Filtrar e o campo RegExp são usados para filtrar o resultado. Enquanto o primeiro indica qual é a “variável” do retorno da consulta cujo valor deverá ser validado o segundo informa qual é a regra de validação. O segundo suporta expressões regulares no padrão POSIX estendido para filtrar quais sistemas de arquivos você deseja realmente mapear. A expressão regular será executada contra o valor definido no campo Filter. É altamente provável que você precise utilizar-se destes filtros para remover sistemas de arquivo que simplesmente não faz sentido monitorar pois eles são totalmente dinâmicos (tal qual o /dev), ou para filtrar em um switch de 48 portas para que se monitore somente as portas de UpLink. Observe na imagem abaixo o resultado obtido por uma consulta contra a chave desejada em nossa máquina virtual com o servidor zabbix (eu estou utilizando o virtual appliance fornecido pela própria Zabbix para a confecção destes artigos). Template 105 - LLD - Retorno da consulta vfs.fs.discovery

Como você irá perceber ao final deste artigo a nossa regra de descoberta irá utilizar somente os sistemas de arquivo normais, ignorando os sistemas de arquivo especiais (tal qual o /dev, /proc, etc). Continuemos então com a criação do LLD. Temos agora um esqueleto dizendo o que pesquisar e o intervalo de pesquisa, precisamos agora definir o que fazer com as respostas recebidas.

Assim como fizemos no primeiro artigo sobre templates iremos começar construindo os itens, ops, protótipos de itens. Uma coisa que temos que ter em mente quando construímos as regras de descoberta: tudo o que achar criado N vezes, então se você definir um LLD com 5 protótipos de item, 2 protótipos de trigger e 1 protótipo de gráfico e configurar um host com 3 sistemas de arquivos detectados você terá:

  • 3 sistemas de arquivo X 5 protótipos de item = 15 itens criados;
  • 3 sistemas de arquivo X 2 protótipos de trigger = 6 triggers criados;
  • 3 sistemas de arquivo X 1 protótipo de gráfico = 3 gráficos criados;

O que nos leva a ter algumas preocupações adicionais. As chaves dos itens e os nomes das triggers e gráficos devem ser únicos em seu escopo (template ou host) então você deverá garantir que seja possível diferencia-los ou então sua regra de descoberta não irá conseguir criar os elementos.

Para criar o nosso primeiro protótipo de item siga os passos abaixo:

  • Acesse o link Protótipos de Item (0);
  • Clique no botão Criar protótipo de Item;
  • Preencha o formulário conforme tabela 3 e salve o registro;
Tabela 3 – Item para descoberta do tamanho do disco
Nome $1 – Espaço total da partição
Tipo agente Zabbix
Chave vfs.fs.size[{#FSNAME},total]
Unidade B
Intervalo de Atualização (segundos) 300
Manter Histórico 365
Manter Estatísticas 0
Aplicações Inventário

Ao final do preenchimento seu formulário deverá estar similar à imagem abaixo.

Template 105 - LLD - Primeiro Item

Temos aqui algumas novidades. A primeira delas é o identificador $1 no nome do protótipo de item. Esta notação é adotada nos itens do Zabbix e pode ser útil em várias situações, ela representa o primeiro parâmetro definido no campo Chave.

Em nosso caso o valor do campo Chave é “vfs.fs.size[{#FSNAME},total]” então o nome do item irá ser modificado automaticamente para o valor que for recebido, durante o processo do LLD para a variável {#FSNAME}. Observem como ficou o nome do protótipo de item após salvarmos o registro.

Template 105 - Protótipo de Item 1 Salvo

Então já vimos que temos como automatizar a formação do nome do item de forma a ficar fácil a identificação dele em dados recentes e em outras telas. Como provavelmente já deve ter dado tempo para o LLD ser executado em seu ambiente, vamos verificar o que ele criou ?

Template 105 - Item criado a partir de protótipo

Observem que o nome do item foi modificado para representar o nome da partição descoberta. Como este meu ambiente só possui um disco e tudo está montado “abaixo” do “/” só foi criado um item.

Como este não é um servidor de produção posso brincar a vontade com ele. Este é inclusive um ponto muito importante que devo ressaltar: por mais que eu esteja tentando já colocar itens “tunados” aqui os tempos de coletas de muitos deles não estão adequados para a produção… não faz sentido, por exemplo, rodar o LLD a cada 5 minutos em um ambiente de produção, uma vez por dia já seria suficiente.

Vamos forçar então o Zabbix a detectar um novo sistema de arquivos ? Executem os comandos abaixo para forçar a “criação de um novo sistema de arquivos” (na verdade um novo mountpoint). Executem estes comandos com o usuário root.

mkdir /rede
mount /dev/sda1 /rede

Após cerca de cinco minutos a lista de itens do Servidor_Teste_1 deverá estar como a imagem abaixo:

Template 105 - Novo sistema de arquivos detectado
Novo sistema de arquivos detectado

Como os comandos que executamos não irão persistir após o boot do servidor quando ele for reiniciado e o processo do LLD for executado novamente o item será “removido” sendo que os dados coletados, conforme configuração do processo de descoberta no início deste artigo, serão mantidos por 30 dias.

template_105_lld_item_1_criado_Servidor_Teste_1_detecta_filesystem_a_menos
Mensagem exibida na lista de itens quando o LLD percebe que um sistema de arquivos não mais existe

Neste momento a coleta já deve ter ocorrido algumas vezes, retorne ao protótipo de item 1 e mude o tempo de atualização para 86400 para que o item seja coletado apenas uma vez por dia.

Para exercitar um pouco mais (e obter algum dado realmente útil afinal o Zabbix não tem por objetivo ser uma ferramenta de inventário e sim ser uma ferramenta de monitoração… por mais que ele consiga fazer um inventário…) criando protótipo de item para coletar o percentual de espaço livre nas partições. Utilize os dados da tabela 4 para construir o protótipo de item (se tiver dúvidas volte um pouco no texto e veja como foi feito o primeiro 😉 ).

Tabela 4 – Item para monitorar o espaço disponível
Nome $1 – Espaço disponível na partição
Tipo agente Zabbix
Chave vfs.fs.size[{#FSNAME},pfree]
Unidade B
Tipo da Informação Numérico (Fracionário)
Intervalo de Atualização (segundos) 300
Manter Histórico 30
Manter Estatísticas 365
Nova Aplicação Capacidade

 

Não irei dar muitos detalhes sobre como cria-lo pois entendo que o passo a passo do primeiro protótipo de item somado aos dados da tabela 4 são suficientes. Siga agora os passos abaixo para criar um protótipo de trigger:

  • Retorne à tela de manutenção do LLD (Regras de Descoberta);
  • Clique no link Protótipos de Trigger (0);
  • Clique no botão Criar protótipo de trigger;
  • Preencha o formulário conforme a tabela 5 e salve o registro;
Tabela 5 – Criação de protótipo de trigger
Nome {#FSNAME} – Espaço livre inferior a 20%
Expressão {105_Apache_PHP_MySQL:vfs.fs.size[{#FSNAME},pfree].last(0)}<0

 

Assim como foi quando treinamos a criação de trigger podemos aqui digitar diretamente a expressão ou usar o assistente de criação. Se optar por utilizar por utilizar o assistente lembre-se de clicar no botão “selecionar protótipo” e não no botão selecionar pois os protótipos não irão estar disponíveis na janela que aparecerá.

template_105_lld_criando_trigger
Sequencia de passos para selecionar protótipo de item na definição do protótipo de trigger

No mesmo ritmo que foi para a detecção do novo sistema de arquivos precisamos aguardar por até 5 minutos para que o LLD faça o seu trabalho. Enquanto esperamos vamos criar um protótipo de gráfico para representar a utilização de espaço em disco. Este gráfico não ficará muito “bonito” neste momento a não ser que você force o seu sistema de arquivos adicionando ou removendo um volume considerável de dados pois ele precisará de mudanças em sua capacidade para que o gráfico não seja uma “linha reta”.

Passos para criar protótipo de gráfico:

  • Clique no link Protótipos de Gráfico (0);
  • Clique no botão Criar protótipo de gráfico;
  • Preencha o formulário conforme a tabela 4 e salve o registro;
Tabela 6 – Criação de protótipo de gráfico
Nome {#FSNAME} – Consumo de disco
Item 1
Item 105_Apache_PHP_MySQL: $1 – Espaço total da partição
Estilo Linha Grossa
Cor C80000
Item 2
Item 105_Apache_PHP_MySQL: $1 – Percentual livre da partição
Estilo Área Gradiente
Cor 00C800

Assim como no assistente de criação da expressão do protótipo de trigger aqui você deve tomar o cuidado de clicar no botão para selecionar protótipos e não o botão que seleciona itens normais.

template_105_lld_criando_grafico

Após cerca de cinco minutos deveremos ter também o gráfico criado no host Servidor_Teste_1. Vamos até a tela de cadastramento de hosts (Configuração -> Hosts) verificar se a trigger e o gráfico foram criados (lembrem que o gráfico pode ainda não ter sido criado dependendo de quão rápido você tiver sido na execução destes passos… nestas horas um café é sempre uma boa pedida…).

Observando a tela de gráficos do laboratório que estou utilizando para criar este tutorial consegui perceber a trigger criada e uma situação para a qual vocês tem que estar habituados pois ela é normal de acontecer quando uma trigger é adicionada. Observem a imagem abaixo:

template_105_lld_trigger_criada

Existe um status de erro na trigger… mas por qual motivo ?

Conforme a mensagem diz: “A trigger foi adicionada mas ainda não ocorreram coletas suficientes para que o Zabbix possa tomar uma decisão relativa ao estado da mesma”. É neste momento que percebemos que as triggers podem ter quatro estados:

  • Ativo – Trigger apta a identificar incidentes;
  • Inativo – A trigger foi propositalmente desabilitada;
  • Não Suportado – A trigger possui um erro que impossibilita o seu cálculo;
  • Desconhecido – Ainda não existe dado suficiente para determinar seu estado;

Espero que após você constatar a existência da nova trigger e ler estes textos já tenha dado tempo suficiente para que o gráfico tenha sido criado então, cruze os dedos e vá verificar se o gráfico foi adicionado no host.

template_105_lld_grafico_criado

Consulte agora se o gráfico está disponível na monitoração, acesse o menu de consulta de gráficos (Monitoração -> Gráficos), selecione o host Servidor_Teste_1 e selecione o gráfico “/ – Consumo de Disco”. Ele não estará muito legal de se ver pois provavelmente não ocorreu mudança significativa no espaço de disco de seu servidor enquanto você estava configurando esta monitoração.

Espero que este terceiro artigo sobre templates tenha auxiliado no entendimento destes poderosos recursos da versão 2 do Zabbix. Pretendo, mais para frente, criar novos artigos explorando mais sobre eles mas acredito que para este momento as informações compartilhadas sejam suficientes para que você consiga começar a aproveitar os benefícios por eles gerados.

Agora vou dormir pois amanhã hoje tenho que ministrar palestra no FLISOL-DF/2013. Espero vocês lá !