Contents Previous Next

Integração do SNMP com o MTMON

Para monitoração de Storages, Tape libraries e outros dispositivos, podemos usar o snmptrap.

Instalação do SNMP em servidor Centos, Fedora e Red-Hat

Instalar os pacotes net-snmp e net-snmp-utils usando o comando abaixo :

# yum install net-snmp net-snmp-utils

Após a instalação, configurar no arquivo /etc/snmp/snmptrapd.conf as linhas abaixo (se o arquivo não existir, pode criar) :

authCommunity log public
disableAuthorization yes
traphandle default /bin/bash /usr/local/Multitask/mtmon/bin/trapHandle.sh -debug

Reinicie o daemon do snmptrap :

# service snmptrapd restart

No Red Hat 7 comando é systemctl start snmptrapd

Não esqueça de alterar os script de inicialização do Linux, para que o start do SNMP seja executado no boot, usando o ntsysv ou o comando abaixo :

chkconfig --level 345 snmptrapd on

No Red Hat 7 comando é systemctl start snmptrapd

Instalação do SNMP em servidor SuSE Linux

Instalar o pacote net-snmp usando o comando abaixo :

# zypper install net-snmp

Após a instalação, configurar no arquivo /etc/snmp/snmptrapd.conf as linhas abaixo (se o arquivo não existir, pode criar) :

authCommunity log public
disableAuthorization yes
traphandle default /bin/bash /usr/local/Multitask/mtmon/bin/trapHandle.sh -debug

Incluir no arquivo /etc/init.d/boot.local para que o servidor de trap SNMP seja iniciado no boot :

/usr/sbin/snmptrapd -C -Lf /var/log/net-snmptrapd.conf -c /etc/snmp/snmptrapd.conf 

Execute o comando acima no prompt para iniciar o daemon do SNMP trap.

Instalação de MIBS

Você pode identificar o diretório das MIB's usando o comando snmpwalk -h. A opção -M apresenta os diretórios default usados pela versão instalada.

# snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]

  Version:  5.7.2
  Web:      http://www.net-snmp.org/
  Email:    net-snmp-coders@lists.sourceforge.net

OPTIONS:
  -h, --help		display this help message

   ...

General options
  -m MIB[:...]		load given list of MIBs (ALL loads everything)
  -M DIR[:...]		look in given list of directories for MIBs
    (default: $HOME/.snmp/mibs:/usr/share/snmp/mibs)

Link's úteis :

Verificação de funcionalidade

Execute o comando abaixo :

# snmptrap -v 1 -c public 127.0.0.1 '1.2.3.4.5.6' '192.193.194.195' 6 99 '55' 1.11.12.13.14.15  s "Teste de MTMON"

Consulte o arquivo /usr/local/Multitask/mtmon/log/trapHandle.AAAAMM.log e veja se foi incluida uma entrada semelhante :

23/05/2013 16:49:36 MTMON - snmptrap
localhost
UDP: [127.0.0.1]:55648->[127.0.0.1]
DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:00.55
SNMPv2-MIB::snmpTrapOID.0 iso.2.3.4.5.6.0.99
iso.11.12.13.14.15 "Teste MTMON"
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.193.194.195
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "public"
SNMPv2-MIB::snmpTrapEnterprise.0 iso.2.3.4.5.6

Se o teste acima não resultar no log esperado, verificar se o SELINUX ou IPTABLES não estão bloqueando o acesso às portas configuradas.

Para configurar o SELINUX para permitir o recebimento de traps do SNMP, execute o comando abaixo :

# setenforce 0
# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Depois altere o arquivo /etc/selinux/config com a linha abaixo :

SELINUX=permissive

Assim, após o reboot, o servidor já estará com o SELINUX desativado.

Processar trap de SNMP

Ao receber um trap de SNMP, podemos processar a mensagem de 2 formas :

A primeira forma serve para ignorar as mensagens quando o volume é muito significativo. Normalmente, com um simples grep é possível ignorar a mensagem, pois sabemos o que podemos descartar.

Estão disponíveis para o script as seguintes variáveis :

Exemplo de conteúdo no arquivo tmpFile :

30/09/2018 21:20:30 MTMON
<UNKNOWN>
UDP: [10.10.10.81]:7774->[10.1.1.100]
DISMAN-EVENT-MIB::sysUpTimeInstance 7:20:23:58.32
SNMPv2-MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.12740.66.0.1
SNMPv2-SMI::enterprises.12740.66.1.1.0 46716901
SNMPv2-SMI::enterprises.12740.66.1.2.0 "5.4"
SNMPv2-SMI::enterprises.12740.66.1.3.0 "Port at Reduced Speed Alert"
SNMPv2-SMI::enterprises.12740.66.1.4.0 "SWRJ"
SNMPv2-SMI::enterprises.12740.66.1.5.0 1
SNMPv2-SMI::enterprises.12740.66.1.6.0 "0A AD 65 6E "
SNMPv2-SMI::enterprises.12740.66.1.7.0 "Ethernet Port (PS6101 eth1) is not connected to a 10 Gigabit link."
SNMPv2-SMI::enterprises.12740.66.1.8.0 1538288430
SNMPv2-SMI::enterprises.12740.66.1.9.0 "SWRJ.dominio.com"

Trap SNMP recebido pelo script /usr/local/Multitask/mtmon/bin/trapHandle.sh no servidor snmp.multitask.com.br

No exemplo abaixo, identificamos nas últimas linhas que é definida a variável LOCAL_options, que permite ajustar os parametros --notifica e --finaliza para o plugin mtmon_snmplog.pl.

Exemplo de script :

#
# Id: trapHandle.local
#

# Esta mensagem vem à cada minuto e pode ser ignorada
$C_grep -e 'SNMPv2-SMI::experimental.9999.1.7.1.1.4.1.[0-9]* "iqn.*.riverbed:' \
        -q $tmpFile
if [ $? = 0 ]
then
  # Nao registra esta mensagem no log
  if [ ! -z "$ignFile" ]
  then
    $C_date +'%d/%m/%Y %H:%M:%S trap ignorado por trapHandle.local :' >> $ignFile
    cat $tmpFile >> $ignFile
    echo >> $ignFile
  fi
  $C_rm -f $tmpFile
  trap 0
  exit 0
fi

# Identifica nome do servidor pelo OID do trap
set -- $($C_grep -e SNMPv2-SMI::enterprises.12740.66.1.9.0 \
                 -e SNMPv2-SMI::enterprises.674.10892.2.1.1.10.0 \
                 -e SNMPv2-SMI::enterprises.674.10892.5.3.1.10.0 \
                 -e SNMPv2-SMI::enterprises.674.10892.5.3.1.11.0 \
                 -e SNMPv2-SMI::enterprises.6876.4.3.307.0 \
                 $tmpFile |
            while read chave valor
            do
              echo "$valor" | $C_grep -q -e ' ' && continue
              echo $valor | $C_sed -e 's/"//g' -e 's/\..*$//'
            done)
[ -z "$1" ] || Nome=$1

# Define o procedimento que aparecerá na console do MTMON
case "$Nome" in
ibm*) LOCAL_options='--notifica aix' ;;
jve2k*) LOCAL_options='--notifica windows' ;;
esac

# No horario comercial - finaliza evento
$MTMONbase/bin/ehHoraComercial.pl && LOCAL_options="$LOCAL_options --finaliza"

O script trapHandle.local poderá gerar os seus próprios eventos e finalizar o processamento ou devolver o controle para o script trapHandle.sh que chamará o plugin mtmon_snmp.pl que processará a mensagem.


Contents Previous Next