Desenvolvendo plugins para coletar dados via SNMP

Este é o terceiro post sobre plugins na Unit Platform. Recomendamos a leitura dos posts anteriores sobre desenvolvimento e cadastro de plugins.

O protocolo SNMP é um dos métodos mais usados para obter informações de monitoramento dos mais variados dispositivos, desde servidores, switches, roteadores, até impressoras e sensores de temperatura ambiental. Neste post veremos como criar um plugin que conectará em um dispositivo usando uma credencial SNMP.

Criação de uma credencial

A Unit Platform disponibiliza por padrão uma credencial de SNMP v2c pré-cadastrada para a comunidade “public”. Caso a comunidade que esteja em uso no seu ambiente seja diferente, você deverá criar um novo cadastro de credencial. Para isso, acesse o menu de configurações e em seguida acesse Credenciais:

Menu Credenciais

Clique em “Adicionar credencial”. Caso a instalação da Unit Platform esteja em um ambiente multiempresa, selecione a empresa a qual a credencial pertence. Em seguida selecione o tipo de credencial SNMP que você deseja utilizar. A Unit Platform suporta três tipos de credencial SNMP: SNMPv1, SNMPv2c e SNMPv3.

Conforme cada tipo de credencial, será solicitado um conjunto diferente de dados. Como o plugin que criaremos nesse tutorial é simples, usaremos uma credencial SNMPv2c. Crie uma credencial conforme a imagem abaixo e salve:

Adicionando uma credencial

Usando credenciais SNMP

Para usar a credencial, deve-se criar um plugin que receba um argumento do tipo string. Essa string conterá todas as variáveis da credencial separadas por “;”. Abaixo está listado o formato das credenciais SNMP usadas na ferramenta:

  • SNMP v1: snmpv1;[community]
  • SNMP v2c: snmpv2c;[community]
  • SNMP v3: snmpv3;[username];[security level];[authentication method];[authentication password];[cryptography method];[cryptography password]
    • security level: authpriv, authnopriv ou noauthnopriv
    • authentication method: sha ou md5
    • cryptography method: 3desede, aes128, aes192, aes256, des ou idea

Programando o plugin

Abaixo está um exemplo de plugin que verifica o uptime do dispositivo através do SNMP. É pré-requisito que o dispositivo monitorado esteja com o serviço de SNMP rodando, e que o servidor Unit Platform tenha acesso à porta 161/UDP do mesmo.

O plugin está escrito em Bash e será executado localmente na Unit Platform. Este plugin funciona para todas as versões SNMP e está nomeado como my_first_plugin_snmp.sh.

#!/bin/bash

address=$1
credential=$2

snmpVersion=$(echo $credential | cut -d ";" -f 1)

if [ "$snmpVersion" == "snmpv1" ]; then
    snmpCommunity=$(echo "$credential" | cut -d ";" -f2)
    snmpArgs="-v1 -c $snmpCommunity"
fi

if [ "$snmpVersion" == "snmpv2c" ]; then
    snmpCommunity=$(echo "$credential" | cut -d ";" -f2)
    snmpArgs="-v2c -c $snmpCommunity"
fi

if [ "$snmpVersion" == "snmpv3" ]; then
    snmpUser=$(echo "$credential" | cut -d ";" -f2)
    snmpLevel=$(echo "$credential" | cut -d ";" -f3)
    snmpTypeAuth=$(echo "$credential" | cut -d ";" -f4)
    snmpPassAuth=$(echo "$credential" | cut -d ";" -f5)
    snmpTypeCrypt=$(echo "$credential" | cut -d ";" -f6)
    snmpPassCrypt=$(echo "$credential" | cut -d ";" -f7)

    [ "$snmpLevel" == "noauthnopriv" ] && snmpArgs="-v3 -u $snmpUser -l $snmpLevel"
    [ "$snmpLevel" == "authnopriv" ] &&   snmpArgs="-v3 -u $snmpUser -l $snmpLevel -a $snmpTypeAuth -A $snmpPassAuth"
    [ "$snmpLevel" == "authpriv" ] &&     snmpArgs="-v3 -u $snmpUser -l $snmpLevel -a $snmpTypeAuth -A $snmpPassAuth -x $snmpTypeCrypt -X $snmpPassCrypt"
fi

result=$(snmpget -OevQ $address $snmpArgs sysUpTimeInstance)

echo $result

Este plugin possui dois parâmetros de entrada, address e credential. Estes parâmetros deverão ser especificados nos argumentos da linha de comando do plugin durante o cadastro.

Mais detalhes sobre desenvolvimento de plugins podem ser vistos neste post.

Cadastrando o plugin

O processo de carregamento deste plugin é praticamente igual ao descrito neste post, com a diferença que no campo de seleção de credenciais especificaremos que este plugin irá usar uma credencial do tipo SNMPv2c:

Item 1 – Empresa: selecione a empresa que fará uso do plugin.

Item 2 – Nome do plugin: escolha um nome de exibição para o plugin.

Item 3 – Tipo da Credencial: selecionar o tipo de credencial que o dispositivo aceitar. Neste exemplo é utilizado o SNMP versão 2c.

Item 4 – Enviar Script: fazer upload do arquivo “my_first_plugin_snmp.sh”.

Item 5 – Argumentos da linha de comando: aqui deve ser utilizada a variável “$address$”, que se encarregará de passar ao plugin o endereço do dispositivo no qual o SNMP deve buscar os dados de uptime.. Além dessa variável, utilizaremos também a variável “$credential$”, para que o sistema passe ao plugin a credencial que será usada para autenticação.

Clicar em “Testar plugin”.

Testando o plugin

Na interface de execução do teste, serão exibidas todas as credenciais do tipo escolhido na tela anterior (SNMPv2c). Selecione a credencial criada anteriormente e um dispositivo para executar o teste. Clicar em “Executar teste”.

Finalizando com sucesso o teste, prossiga para os próximos passos do wizard de criação de plugins para especificar a saída do plugin e as regras de monitoramento. Caso ainda existam dúvidas, recomendamos a leitura do post sobre Cadastramento de plugins na Unit Platform.