terça-feira, 4 de novembro de 2014

LLD no Zabbix com Shell Script - Entendendo e utilizando esse recurso

Introdução

O recurso de LLD (Low Level Discovery) tem ganhado cada vez mais importância, uma vez que teoricamente é possível monitorar qualquer coisa utilizando esse recurso, apesar da documentação oficial, de artigos nacionais e internacionais, mensagens no fórum oficial, etc. O recurso continua desconhecido por muitos, eu queria compilar um pouco de tudo que encontrei, e da minha própria experiência e criar um artigo onde as pessoas entendessem a lógica do LLD e pudessem se basear para criar seus próprios LLDs.

Termos Técnicos

Antes de entrarmos na solução propriamente dita, precisamos entender alguns termos e soluções envolvidas nesse recurso.

LLD - Low Level Discovery: Função do Zabbix responsável por detectar determinadas características de um objeto, de forma dinâmica. Por exemplo, o Zabbix vai achar sozinho (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: É 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 ;-)

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. O software jq, no nosso caso, vai receber um arquivo texto com marcações específicas que ele sabe interpretar e extrair os dados.

Como funciona o LLD no Zabbix

O LLD no Zabbix de maneira muito resumida funciona da seguinte forma:
Você gera um arquivo no formato JSON com a entrada de dados utilizando o padrão de macros do Zabbix "{#VAR}", essas macros serã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 antenas sem fio, etc. Isso é a Regra de Descoberta.
Em seguida você tem que dizer ao Zabbix o que coletar de cada um desses objetos da lista, isso é o Protótipo de itens. Por exemplo, para cada partição do sistema colete 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.
Isso pode ser feito utilizando as Chaves suportadas pelo Zabbix, OIDs SNMP ou Scripts Personalizados.

Pré-requisitos

O único pré-requisito no Servidor Zabbix é a instalação do jq, que é um parser de JSON. No CentOS:
# yum -y install jq

Objetivo

Eu procurei criar a solução da maneira mais simples possível, para isso eu usei apenas Shell Script, nada de Perl, Python, Ruby, Awk, Expressões Regulares, apesar de tudo isso ser muito importante, eu queria que um administrador de redes iniciante tivesse condições de entender a solução, queria que pessoas que possuem ambientes críticos pudessem utilizar a solução tendo que realizar o mínimo possível de alterações no ambiente, apenas instalar o jq.

Arquivos envolvidos na solução

lld_passwd.sh: Script responsável por coletar os dados, neste exemplo, esses dados serão coletados do /etc/passwd, gerar o arquivo JSON com as macros que o Zabbix precisa e gerar um arquivo JSON comum de onde extrairemos os dados com o jq.
/tmp/lld_passwd.txt: Arquivo no formato JSON com as macros que o Zabbix necessita para interpretá-lo.
/tmp/lld_passwd_2.txt: Arquivo no formato JSON de onde extrairemos os dados para alimentar o Zabbix.

Estrutura da solução

O script coleta os dados do arquivo /etc/passwd e gera um aquivo JSON com as entradas "{#USER}", "{#NOME}", "{#HOME}" e "{#SHELL}" para cada um dos registros encontrados. No nosso exemplo, para o Zabbix só interessa a entrada "{#USER}", pois em cima da lista de usuários, solicitaremos os outros dados, o Nome do usuário "{#USER}", o Home do usuário "{#USER}", o Shell do usuário "{#USER}".

Você deve estar se perguntando: Se para o Zabbix só interessa a entrada "{#USER}" por que eu criei as outras entradas, certo? E também porque eu gerei o arquivo lld_passwd_2.txt se os dados já estão no /etc/passwd? Calma jovem gafanhoto...

O objetivo do artigo é ensinar a criar uma solução para qualquer tipo de dados, certo? Imagine que para coletar os dados que você precisa seja necessário executar um comando qualquer, nesse caso você precisaria executar o comando uma vez para montar o JSON, e depois executar o mesmo comando (ou outro) para coletar cada um dos dados referentes aos objetos do JSON, isso vai onerar o Servidor Zabbix e também o equipamento de onde os dados estão sendo coletados. Na solução aqui proposta nós vamos coletar todos os dados de uma única vez (podem ser necessários vários comandos para gerar o arquivo inteiro), e depois coletar os dados referentes aos objetos de um arquivo texto que está no próprio Servidor Zabbix, o que é muito menos custoso.

Variáveis do Script

O script foi projetado para receber as variáveis via passagem de parâmetros, porque o Zabbix vai passar esses parâmetros para ele.

Alguns detalhes devem ser observados nas variáveis do script:
Não podemos acrescentar " (aspas) ao arquivo JSON, a não ser as que ele espera encontrar e onde ele espera encontrar, então na variável $NOME, utilizei o comando tr -d \"`, para remover qualquer " (aspas) do arquivo /etc/passwd. Elas existem no user saslauth, como pode ser conferido abaixo:

# cat /etc/passwd | grep saslauth
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin


Outro detalhe importante é referente às "/", elas precisam ser escapadas assim "\/", para isso usei o sed (eu sei que falei que não ia usar Expressões Regulares, mas é só um sed de nada..) nas variáveis $HOME e $SHELL.

A variável $LINHAS é utilizada para sabermos o número de entradas que serão geradas no arquivo JSON, isso porque todas as entradas acabam com uma ",", com exceção da última entrada. Por esse mesmo motivo o "for" foi configurado para ser executado até o "i<$LINHAS" e não "i<=$LINHAS".

Opções do Script

O script possui 4 opções, mas você pode adaptá-lo para ter quantas opções forem necessárias ao seu cenário. São elas:
discovery: Gera o arquivo lld_passwd.txt que será utilizado pela regra de descoberta do Zabbix.
Você pode (e deve) validar seus arquivos JSON no JSONLint.

user: Dado determinado usuário retorna o seu usuário, sim ela é inútil, foi apenas uma piadinha nerd para relaxar, qual será o user do user root?

nome: Dado determinado usuário retorna o nome do usuário.

home: Dado determinado usuário retorna o diretório home do usuário.

shell: Dado determinado usuário retorna o shell do usuário.

Arquivo lld_passwd_2.txt

Depois de montar o arquivo lld_passwd.txt, eu utilizo o sed para trocar todas as ocorrências de macros para itens normais de um arquivo JSON:
{#USER} -> user, {#NOME} -> nome, {#HOME} -> home e {#SHELL} -> shell.
E armazeno tudo nesse arquivo, quando eu realizo as operações user, nome, home e shell, o comando jq é invocado, entende o conteúdo do arquivo JSON e faz a extração dos dados que nos interessa.

Configuração no Zabbix Server

O script deve estar no seu diretório "ExternalScripts", se você estiver na dúvida, veja no arquivo /usr/local/etc/zabbix_server.conf  a localização do mesmo. Ele também deve possuir permissão para ser executado pelo usuário zabbix, que também deve ser capaz de criar os arquivos no /tmp.

Configuração na Interface Gráfica do Zabbix Server

 Crie um novo template com o nome LLD Passwd, depois na linha do nome do template clique em Autobusca // Criar regra de descoberta, preencha os dados da regra.
Regra de Descoberta

Na linha da regra clique em Protótipos de itens // Criar protótipo de item, preencha os dados dos protótipos.

Protótipo de Item Home

Protótipo de Item Nome

Protótipo de Item Shell

Protótipo de Item Usuário
 Clone o seu host Zabbix server com o nome de Zabbix server LLD.
Zabbix server LLD
 Vincule o template LLD Passwd no host.
Template LLD Passwd
Espere 5 minutos e acesse Configuração // Hosts, observe os itens criados automaticamente. Na figura abaixo eu usei um filtro para mostrar apenas os itens do usuário root.
Itens criados dinamicamente pelo LLD
Acesse Monitoramento // Dados recentes e visualize a leitura dos dados, neste exemplo eu filtrei apenas os itens do root.

Dados recentes

 

Conclusão

Com as explicações acima e os código disponíveis acredito que você seja capaz de entender o funcionamento do LLD no Zabbix, gerar seus próprios scripts e tirar o máximo proveito desse recurso fantástico.


Anexos

lld_passwd.sh
Template LLD_Passwd

 

Agradecimentos

Queria deixar aqui meus agradecimentos ao Ronei Xavier da Silva e Ederson Frasnelli Ribeiro que me deram uma força para entender o funcionamento do JSON!

Referências

Zabbix Manual
json.org
JSON Wikipedia
Análise Sintática Wikipedia
jsonlint.com
XModulo
JQ Manual
JQ FAQ

quarta-feira, 11 de junho de 2014

Como exibir o número de linhas no VI e algumas dicas mais

Para exibir o número de linhas basta usar o comando:

: set number
Ou
: set nu

Para desabilitar basta acrescentar uma "!" ao comando:

: set nu!

Para abrir o texto em uma linha específica (10):
vi +10 /etc/passwd

Para abrir o vi na linha da primeira ocorrência de um termo (nologin):
vi +/nologin /etc/passwd

Para abrir o vi na linha da primeira ocorrência de um termo (0.0.0.0), usando caracteres de escape (\):
vi +/\(0.0.0.0\) /etc/httpd/conf/httpd.conf

Fonte:
FAQ Cyberciti


O que acontece quando você vive no exterior

O texto a seguir é uma tradução de “What happens when you live abroad“, da Chelsea Fagan.


Uma característica muito comum de pessoas que vivem no exterior é encontrá-los amontoados em bares e restaurantes, falando não apenas sobre a sua terra natal, mas sobre a experiência de sair. E por incrível que pareça, esses grupos de expatriados não são necessariamente todos dos mesmos países de origem, muitas vezes, a mera experiência de mudança de local e cultura é suficiente para conectá-los e construir as bases de uma amizade. Eu conhecia uma quantidade razoável de expatriados – de diferentes períodos de estadia – nos Estados Unidos, e é reconfortante ver que aqui na Europa, os bares de “estrangeiros” são tão predominantes e preenchidos com a mesma vibração quente e nostálgica.

Mas uma coisa que, sem dúvida, existe entre todos nós, algo que permanece não-dito em todos os nossos encontros, é o medo. Há um medo palpável em viver em um novo país, e embora seja mais agudo nos primeiros meses, até mesmo anos, da sua estadia, nunca evapora completamente ao longo do tempo. Ele simplesmente muda. A ansiedade que já foi concentrada em como você vai fazer novos amigos, se ajustar e dominar as nuances da linguagem tornou-se a questão repetida “O que eu estou perdendo?”. Conforme você se estabelece em sua nova vida e novo país, conforme o tempo passa e se torna menos uma questão de há quanto tempo você está aqui e mais uma de há quanto tempo você se foi, você percebe que a vida em casa seguiu sem você. As pessoas cresceram, mudaram, se casaram, se tornaram pessoas completamente diferentes – e você também.

É difícil negar que o ato de viver em outro país, em outro idioma, muda você fundamentalmente. Diferentes partes da sua personalidade se destacam, e você assume qualidades, maneirismos e opiniões que definem as novas pessoas ao seu redor. E não há nada de errado nisso, muitas vezes é parte da razão pela qual você partiu, em primeiro lugar. Você queria evoluir, mudar alguma coisa, para colocar-se em uma desconfortável situação nova que iria forçá-lo a entrar numa nova fase de sua vida.

Então, muitos de nós, quando deixamos nossos países de origem, queremos escapar de nós mesmos. Construímos enormes redes de pessoas, bares e cafés, de argumentos e exes e os mesmos cinco lugares de novo e de novo, dos quais sentimos que não podemos nos libertar. Há muitas pontes que foram destruídas, ou amor que se tornou azedo e feio, ou restaurantes em que você comeu tudo no menu pelo menos dez vezes – a única maneira de escapar e tornar a sua ficha limpa é a ir a algum lugar onde ninguém saiba quem você foi, e nem vá perguntar. E, embora seja extremamente refrescante e estimulante sentir que você pode ser quem você quiser ser e vir sem a bagagem do seu passado, você percebe o quanto de “você ” foi mais baseado em localização geográfica do que qualquer outra coisa.

Andar pelas ruas sozinho e jantar em mesas para um – talvez com um livro, talvez não – em que você fica sozinho por horas, dias a fio com nada além de seus próprios pensamentos. Você começa a falar sozinho, perguntando coisas a si mesmo e respondendo-as, e fazendo as atividades do dia com uma lentidão e uma apreciação que você nunca antes sequer tentou. Até ir apenas ao supermercado – estando em um empolgante lugar novo, sozinho, em um novo idioma – é uma atividade emocionante. E ter que começar do zero e reconstruir tudo, ter que reaprender a viver e realizar atividades diárias como uma criança, fundamentalmente lhe altera. Sim, o país e seu povo terão o seu próprio efeito sobre quem você é e o que você pensa, mas poucas coisas são mais profundas do que simplesmente começar de novo com o básico e confiar em si mesmo para construir uma vida de novo. Eu ainda tenho que encontrar uma pessoa que eu não ache que se acalmou com a experiência. Há uma certa quantidade de conforto e confiança que você ganha consigo mesmo quando você vai para este lugar novo e começa tudo de novo, e uma noção de que – aconteça o que acontecer no resto da sua vida - você foi capaz de dar esse passo e pousar suavemente pelo menos uma vez.

Mas existem os medos. E sim, a vida continuou sem você. E quanto mais tempo você ficar em seu novo lar, mais profundas essas mudanças se tornarão. Feriados, aniversários, casamentos – cada evento que você perde de repente se torna uma marcação em uma resma de papel sem fim. Um dia, você simplesmente olha para trás e percebe que tanta coisa aconteceu na sua ausência, que tanta coisa mudou. Você acha cada vez mais difícil iniciar conversas com as pessoas que costumavam ser alguns dos seus melhores amigos, e piadas internas se tornam cada vez mais estranhas – você se tornou um estranho. Há aqueles que ficam tanto tempo fora que nunca podem voltar. Todos nós conhecemos o expatriado que está em seu novo lar há 30 anos e que parece ter quase substituído os anos perdidos longe de sua terra natal com total imersão apaixonada em seu novo país. Sim, tecnicamente eles são imigrantes. Tecnicamente a sua certidão de nascimento iria colocá-los em uma parte diferente do mundo. Mas é inegável que qualquer que seja vida que eles deixaram em casa, eles nunca poderiam juntar todos os pedaços. Essa pessoa antiga se foi, e você percebe que a cada dia você se aproxima um pouquinho mais de você mesmo se tornar essa pessoa – mesmo se você não quiser.

Então você olha para sua vida, e os dois países que a seguram, e percebe que agora você é duas pessoas distintas. Por mais que seus países representem e preencham diferentes partes de você e o que você gosta na vida, por mais que você tenha formado laços inquebráveis com pessoas que você ama em ambos os lugares, por mais que você se sinta verdadeiramente em casa em qualquer um, você está dividido em dois. Para o resto de sua vida, ou pelo menos você se sente assim, você vai passar seu tempo em um incômodo anseio pelo outro, e esperar até que você possa voltar por pelo menos algumas semanas e mergulhar de volta à pessoa que você era lá. Leva-se muito tempo para conquistar uma nova vida para si mesmo em algum lugar novo, e isso não pode morrer, simplesmente porque você se moveu ao longo de alguns fusos horários. As pessoas que lhe acolheram no país delas e tornaram-se sua nova família, eles não vão significar menos para você quando você está longe.

Quando você vive no exterior, você percebe que, não importa onde você esteja, você sempre será um expatriado. Sempre haverá uma parte de você que está longe de sua casa e jaz adormecida até que possa respirar e viver com todas as cores de volta ao país onde ela pertence. Viver em um lugar novo é algo belo e emocionante, e pode lhe mostrar que você pode ser quem você quiser – em seus próprios termos. Pode dar-lhe o dom da liberdade, de novos começos, de curiosidade e empolgação. Mas começar de novo, entrar naquele avião, não vem sem um preço. Você não pode estar em dois lugares ao mesmo tempo e, a partir de agora, você sempre ficará acordado em certas noites e pensará em todas as coisas que você está perdendo em casa.

Referência:
Original em backing me up.

terça-feira, 10 de junho de 2014

Conhecendo um pouco mais sobre o comando man

Muitas pessoas desconhecem o uso do comando man. Por mais simples que parece, o seu uso pode salvar o usuário em uma situação que não existe uma conexão ativa com a internet.
Trata-se do manual do sistema operacional, e com ele pode-se encontrar todos ou quase todos os comandos existes no sistema. Por padrão as páginas do manual Linux encontram-se no diretório /usr/share/man. Para facilitar seu uso e entendimento, o manual é dividido em seções que vão de 1 a 9. São elas:
  1. Programas executáveis ou comandos do Shell.
  2. Chamadas do sistema – rotinas do kernel (mais utilizado por SysAdmin’s).
  3. Funções de bibliotecas – documentação de bibliotecas do sistema (bastante utilizado por desenvolvedores).
  4. Arquivos especiais – arquivos usados dentro do diretório /dev.
  5. Formato e convenções de arquivos – contém o formato de alguns arquivos como o /etc/passwd.
  6. Jogos – dicas e comandos de jogos existentes no sistema.
  7. Miscelânea de pacotes – documentação relacionada a pacotes, protocolos etc.
  8. Comandos administrativos – comandos utilizados pelo root.
  9. Rotinas do Kernel.

Alguns parâmetros do comando man.
Uso man [opção] comando/arquivo/expressão
  • sem parâmetros – abre a página do manual relacionada ao comando indicado.
Exemplo: Abre a página do manual relacionada ao comando ls.
$ man ls

-k – mostra referências no manual de acordo com a expressão usada no argumento. Obtém-se um resultado semelhante utilizandoo comando whatis.
$ man -k ip
ip (7) - Implementação do protocolo IPv4 em Linux
ip (8) - show / manipulate routing, devices, policy routing and tunnels

-f – mostra descrições do comando em suas respectivas seções do manual. Obtém-se um resultado semelhante utilizando o comando apropos.
$ man -f hostname
freehostent (3) - get network hostnames and addresses
gethostname (2) - get/set hostname
getipnodebyaddr (3) - get network hostnames and addresses
getipnodebyname (3) - get network hostnames and addresses
hostname (1) - show or set the systems host name
hostname (7) - hostname resolution description
hosts (5) - static table lookup for hostnames
logresolve (1) - Resolve IP-addresses to hostnames in Apache log files
sethostname (2) - get/set hostname
ssh-argv0 (1) - replaces the old ssh command-name as hostname handling
Sys::Hostname::Long (3pm) - Try every conceivable way to get full hostname

É possível deixar as páginas do manual Linux em português usando o comando:
# apt-get install manpages-pt
*Comando válido apenas para distribuições derivadas do Debian.
As vezes é necessário atualizar as páginas do manual, para esse fim, usa-se o comando catman. Seu tempo de execução pode demorar alguns minutos dependendo do hardware utilizado.

Caso ainda haja dúvidas quanto ao uso do man, existe também o manual do próprio manual. Estranho não é mesmo? Mas no GNU/Linux existe um manual de como usar o manual, nele você encontrará todas essas informações de forma detalhada.
$ man man

Além do man, existem outras formas de obter-se ajuda dentro do próprio Linux. O diretório /usr/share/doc, contém grande parte da documentação dos principais pacotes instalados no sistema. Pode-se acessá-los a partir do comando info.

$ info mkdir
File: coreutils.info, Node: mkdir invocation, Next: mkfifo invocation, Prev: ln invocation, Up: Special file types
12.3 `mkdir': Make directories
==============================
`mkdir' creates directories with the specified names. Synopsis:
mkdir [OPTION]... NAME...
.
.
.

E por último mas não menos importante o parâmetro –help. É usado como consulta rápida à um determinado comando em que há dúvidas a respeito de sua sintaxe.

$ locate --help
Uso: locate [OPÇÃO]... [PADRÃO]...
Busca por entradas na base de dados do mlocate.
-b, --basename corresponde somente ao nome base no caminho
-c, --count somente mostra o número de correspondências localizadas
-d, --database DBPATH usar DBPATH ao invés da base de dados padrão (que é /var/lib/mlocate/mlocate.db)
-e, --existing mostrar somente as entradas de arquivos existentes
-L, --follow seguir ligação simbólica quando verificar a existência arquivos (padrão)
-h, --help mostra essa ajuda
-i, --ignore-case ignora maiúsculas e minúsculas na pesquisa
-l, --limit, -n LIMIT limita a saída (ou contagem) ao número indicado
-m, --mmap ignorado, para compatibilidade regressiva
-P, --nofollow, -H não seguir ligações simbólicas quando verificar a existência de arquivos
-0, --null separar as entradas com NUL na saída
-S, --statistics não pesquisar pelas entradas, mostrar as estatísticas sobre as base de dados utilizada
-q, --quiet reportar mensagens de erro sobre leitura nas base de dados
-r, --regexp REGEXP pesquisar por regex básica ao invés de padrões
--regex padrões são regexps estendidas
-s, --stdio ignorado, para compatibilidade regressiva
-V, --version mostra informações da versão
-w, --wholename procura por todo o caminho do nome (padrão)

Isso não é tudo, mas acredito que pode salvar alguns aprendizes como eu.

Referência:
Todo o crédito ao Tales A. Mendonça, artigo original aqui.

Vim: Comentando várias linhas

Existem algumas formas de comentar múltiplas linhas no Vim, seguem 2 delas:

1) Selecionando as linhas:
- CTRL+V para ir para o VISUAL MODE e selecione as linhas que você quer comentar;
- Digite : (dois pontos)
- Digite s/^/#/
- ENTER


2) Informando as linhas:
- No console do Vim digite :X, Y s/^/#/
Onde X é a primeira e Y é a última linha que você quer comentar.



Referencia:
Todo o crédito à Thais Camilo, post original aqui.

Crontab: rodando um script a cada 15 segundos

Introdução:
A granularidade do crontab é de 1 minuto, mas usando a criatividade e um pouco de conhecimento em Linux é possível contornar isso.

Solução:
*  *  *  *  *  script/comando
*  *  *  *  *  sleep 15 && script/comando
*  *  *  *  *  sleep 30 && script/comando
*  *  *  *  *  sleep 45 && script/comando

Referência:
Todo o crédito da solução ao Rafael Biriba, clique para ir para o post original!

quinta-feira, 5 de junho de 2014

Monitoramento de OIDs Dinamicas com LLD


Introdução:
Ao monitorarmos equipamentos por SNMP, encontramos muitos dispositivos que possuem OIDs dinâmicas, ou seja, a informação está em um endereço que não é previsível, a mesma informação referente a dois itens do mesmo tipo, do mesmo equipamento, estão em endereços completamente diferentes, e você se pergunta: Mas é a mesma informação como isso pode acontecer? Vou dar alguns exemplos e você vai entender melhor. Nesse exemplo estou usando antenas wireless conectadas a um controlador.

O Problema:
Vamos analisar primeiro uma OID Simples, os SSIDs que divulgo nas antenas:
# snmpwalk -Oqn credenciais IP .1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108

.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.1 "SSID01"
.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.2 "SSID02"
.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.3 "SSID03"

Agora vamos analisar uma OID Dinâmica, o nome de cada antena:
# snmpwalk -Oqn credenciais IP .1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44

.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.93.147.0.46.0 Antena01
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.93.147.0.205.240 Antena02
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.230.204.42.248.32 Antena03
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.230.204.43.25.0 Antena04

Observando as partes em vermelho, fica fácil entender o problema, é a mesma informação do mesmo equipamento, as antenas são equipamentos individuais, mas como estou lendo o dado do controlador, são o mesmo tipo de objeto, o objeto que representa o nome da antena que está sendo gerenciada, mas em endereços completamente diferentes.

O recurso de LLD
Todos nós estamos acostumados a usar o LLD para automatizar a descoberta de itens do primeiro caso, OID Simples, mas e as OIDs dinâmicas?

Depois de muito procurar no fórum, pesquisar na web, achei alguns scripts para resolver o problema, mas não estava contente, eu queria resolver o problema com os recursos nativos do Zabbix, o que parecia impossível. Então eu tive uma idéia louca: E se eu passar a parte igual da OID para o Zabbix e deixar ele achar o resto será que funciona? SIM FUNCIONA!!!

Criando as regras
Regra de Descoberta
Protótipo de Item
Resultado do LLD



Conclusão
O LLD se mostrou muito mais poderoso do que pensávamos e, inclusive muito mais poderoso do que está documentado.

Informação Adicional
Pelo que apurei esse recurso está usando índice composto, isto não funciona em versões anteriores do Zabbix, mas foi adicionado no 2.2. Deveria ter sido documento na parte índice dinâmico, mas provavelmente eles não tinham exemplos específicos de LLD.

Dica
Se você tiver uma ideia maluca teste, teste de novo e de novo!

Monitoring dynamic OIDs with LLD


Introduction:
When we are monitoring equipment’s via SNMP, we find many devices that have dynamics OIDs, ie, the information is in an address that is not predictable, the same information concerning two items of the same type, at the same equipment, are in completely different addresses, and you ask: But is the same information as why this can happen? I'll give you some examples and you will understand better. In this example I'm using wireless access point’s connected to a controller.

The Problem:
Let us first analyze a single OID, the SSIDs that I’ll divulge in the AP’s:
# snmpwalk -Oqn credentials IP .1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108

.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.1 "SSID01"
.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.2 "SSID02"
.1.3.6.1.4.1.25053.1.2.2.1.1.1.1.1.108.3 "SSID03"

Now we will analyze a Dynamic OID, the name of AP:
# snmpwalk -Oqn credentials IP .1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44

.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.93.147.0.46.0 AP01
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.93.147.0.205.240 AP02
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.230.204.42.248.32 AP03
.1.3.6.1.4.1.25053.1.2.2.1.1.2.1.1.2.6.44.230.204.43.25.0 AP04

Note the red part, it is easy to understand the problem is the same information for the same equipment, the AP’s are individual equipment, but as I'm reading the data from the controller are the same type of object, the object that represents the name of the AP being managed, but in completely different addresses.

The LLD resource
We are all accustomed to using the LLD to automate the discovery of the first case of items, OID Simple, but and dynamic OIDs?
After much searching on the forum, search the web, I found some scripts to solve this problem, but was not happy, I wanted to solve the problem with the native capabilities of Zabbix, which seemed impossible. So I had a crazy idea: What if I inform the equal portion of the OID for Zabbix and let him find the rest will it work? YES IT WORKS!

Creating rules





Item Prototype
 





LLD Result





Conclusion

The LLD proved much more powerful than we thought and even more powerful than is documented.


Tip
If you have a crazy idea,  test it, test again and again!