3 SNMP trap

Vista general

Rebre traps SNMP és el contrari de sondejar dispositius habilitats per SNMP.

En aquest cas, la informació s'envia des d'un dispositiu compatible amb SNMP i Zabbix recull les "traps".

Normalment, les traps s'envien en un canvi de condició i l'agent es connecta al servidor per el port 162 (a diferència del port 161, que l'agent empra per fer consultes). L'ús de traps pot detectar alguns petits problemes que es produeixen durant l'interval de consulta i que la consulta de dades pot ometre.

La recepció de traps SNMP a Zabbix és dissenyada per funcionar amb snmptrapd i un dels mecanismes per passar traps a Zabbix, ja sigui un script Bash o Perl o SNMPTT.

La manera més senzilla de configurar la supervisió de traps després de configurar Zabbix és emprar la solució de scripting de Bash, ja que Perl i SNMPTT no solen vindre pas amb les distribucions modernes i requereixen una configuració més complexa. Tanmateix, aquesta solució empra un script configurat com a "traphandle". Per obtindre el millor rendiment als sistemes de producció, empreu la solució Perl incrustada (un script amb l'opció do perl o SNMPTT).

Flux de treball per rebre un trap:

  1. snmptrapd rep un trap
  2. snmptrapd reenvia el trap a l'script receptor (Bash, Perl) o SNMPTT
  3. El receptor analitza, formata i escriu el trap a un fitxer
  4. Zabbix SNMP Trapper llegeix i analitza el fitxer trap
  5. Per a cada trap, Zabbix troba tots els elements "SNMP trap" amb les interfícies d'equip corresponents a l'adreça del trap rebut. Tingueu en compte que només s'empren per fer coincidir les interfícies per a les quals s'ha seleccionat "IP" o "DNS".
  6. Per a cada element trobat, el trap es compara amb una expressió regular a snmptrap[expressió regular]. El trap s'estableix amb el valor de tots els elements coincidents. Si no es troba cap element coincident i hi ha un element snmptrap.fallback, el trap s'estableix amb el seu valor.
  7. Si el trap no s'ha establert amb el valor de cap element, Zabbix registra per defecte el trap no coincident. (Això es configura a "Registrar traps SNMP no coincidents" a Administració → General → Altres.)

Configuració de traps SNMP

La configuració dels camps següents a la interfície web és específica d'aquest tipus d'elements:

  • El vostre equip ha de tindre una interfície SNMP

A Configuració → Equips, al camp Interfície d'equip, definiu una interfície SNMP amb l'adreça IP correcta o el DNS correcte. L'adreça de cada trap rebuda es compara amb les adreces IP i DNS de totes les interfícies SNMP per trobar els equips corresponents.

  • Configurar l'element

Al camp Clau, empreu una de les claus de captura SNMP:

Clau
Descripció Valor de retorn Comentaris
snmptrap[regexp]
Atrapa tots els traps SNMP que coincideixin amb l'expressió regular especificada a regexp. Si no s'especifica l'expressió regular, captura qualsevol trap. Trap SNMP Aquest element només es pot configurar per a interfícies SNMP.
Les macros d'usuari i les expressions regulars globals són compatibles amb el paràmetre d'aquesta clau d'element.
snmptrap.fallback
Captura tots els traps SNMP que no han estat capturats per cap dels elements snmptrap[] d'aquesta interfície. Trap SNMP Aquest element només es pot configurar per a interfícies SNMP.

La concordança d'expressions regulars de diverses línies no s'admet en aquest moment.

Estableix el Tipus d'informació a "Registre" perquè les marques de temps s'analitzin. Tingueu en compte que altres formats com ara "Numèric" també són acceptables, però poden requerir un gestor d'interrupcions personalitzat.

Perquè el monitoratge de traps SNMP funcioni, primer s'ha de configurar correctament (vegeu més avall).

1 Configuració del monitoratge de traps SNMP

Configurant el servidor/proxy Zabbix

Per llegir els traps, s'ha de configurar el servidor o el proxy Zabbix per iniciar el procés de traps SNMP i apuntar al fitxer de traps que és escrivint SNMPTT o un receptor de traps Bash/Perl. Per fer-ho, editeu el fitxer de configuració (zabbix_server.conf o zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[TRAP FILE]

Si s'empra el paràmetre systemd PrivateTmp, és poc probable que aquest fitxer funcioni a /tmp.

Configurant el receptor de traps Bash

Requisits: només snmptrapd.

Es pot emprar un receptor de traps d'script de bash per passar traps al servidor Zabbix directament des d'snmptrapd. Per configurar-lo, afegiu l'opció traphandle al fitxer de configuració snmptrapd (snmptrapd.conf), veieu l'exemple.

Configurant el receptor de traps amb Perl

Requisits: Perl, Net-SNMP compilat amb --enable-embedded-perl (fet per defecte des de Net-SNMP 5.4)

Es pot emprar un receptor de traps Perl (cerqueu misc/snmptrap/zabbix_trap_receiver.pl) per passar traps al servidor Zabbix directament des d'snmptrapd. Per configurar-lo:

  • afegiu l'script Perl al fitxer de configuració snmptrapd (snmptrapd.conf), per exemple:
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
  • configureu el receptor, per exemple:
$SNMPTrapperFile = '[TRAP FILE]';
       $DateTimeFormat = '[DATE TIME FORMAT]';

Si no s'anomena l'script, snmptrapd es negarà a començar amb missatges, semblants a aquests:

Els modificadors d'expressió regular "/l" i "/a" s'exclouen mútuament a (eval 2) la línia 1, al final de la línia
       El modificador d'expressió regular "/l" pot no aparèixer dues vegades a (eval 2) la línia 1, al final de la línia
Configurant SNMPTT

Al principi, snmptrapd s'hauria de configurar per emprar SNMPTT.

Per obtindre un millor rendiment, SNMPTT s'ha de configurar com a dimoni que empra snmptthandler-embedded per passar-hi els traps. Veieu les instruccions per configurar SNMPTT.

Quan SNMPTT sigui configurat per rebre els traps, configureu snmptt.ini:

  1. habiliteu l'ús del mòdul Perl del paquet NET-SNMP:
net_snmp_perl_enable = 1
  1. registreu els traps al fitxer trap que llegirà Zabbix:
log_enable = 1
       log_file = [TRAP FILE]
  1. establiu el format de data i hora:
date_time_format = %H:%M:%S %Y/%m/%d

El paquet "net-snmp-perl" s'ha esborrat a RHEL 8.0-8.2; i afegit de nou a RHEL 8.3. Per obtindre més informació, veieu els problemes coneguts.

Ara formateu els traps perquè Zabbix els reconegui (editeu snmptt.conf):

  1. Cada instrucció FORMAT hauria de començar amb "ZBXTRAP [adreça]", on [adreça] es compararà amb les adreces IP i DNS de SNMP interfícies a Zabbix. Per exemple:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
       FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Veieu tot seguit més informació sobre el format de traps SNMP.

No empreu traps desconeguts: Zabbix no els podrà pas reconèixer. Els traps desconeguts es poden gestionar definint un esdeveniment general a snmptt.conf:

EVENT general .* "General event" Normal
Format de traps SNMP

Tots els receptors de traps Perl personalitzats i la configuració de traps SNMPTT han de formatar la trampa de la manera següent:

[timestamp] [trap, part 1] ZBXTRAP [address] [trap, part 2]

on

  • [timestamp] - la marca de temps emprada per als elements de registre
  • ZBXTRAP - capçalera que indica que comença un nou trap en aquesta línia
  • [address]: adreça IP emprada per trobar l'equip d'aquest trap

Tingueu en compte que "ZBXTRAP" i "[address]" es retallaran del missatge durant el processament. Si el trap té un altre format, Zabbix podria analitzar els traps de manera inesperada.

Exemple de trap:

11:30:15 27/07/2011 .1.3.6.1.6.3.1.1.5.3 Equip local "Esdeveniments d'estat" normal - ZBXTRAP 192.168.1.1 Enllaç desactivat a la interfície 2. Estat d'administració: 1. Estat operatiu: 2

Això donarà lloc al següent trap per a la interfície SNMP amb IP=192.168.1.1:

11:30:15 27/07/2011 .1.3.6.1.6.3.1.1.5.3 "Esdeveniments d'estat" normals
       equip local - Enllaç a la interfície 2. Estat de l'administració: 1. Estat operatiu: 2

Pre-requisits del sistema

Suport d'arxius grossos

Zabbix admet fitxers grossos per a fitxers trapper SNMP. El límit de mida màxim que pot llegir Zabbix és 2^63 (8 EiB). Tingueu en compte que el sistema de fitxers pot imposar un límit inferior a la mida del fitxer.

Rotació dels registres

Zabbix no proporciona cap sistema de rotació de registres: ha d'ésser gestionat per l'usuari. En rotar el registre, primer hauria de canviar el nom del fitxer antic i només esborrar-lo més tard perquè no es perdi cap informació:

  1. Obriu el fitxer Zabbix a la darrera ubicació coneguda i aneu a la passa 3
  2. Zabbix comprova si el fitxer obert actualment s'ha rotat comparant el nombre d'inode amb el nombre d'inode del fitxer trap definit. Si no hi ha cap fitxer obert, Zabbix restableix la darrera ubicació i passa a la passa 1.
  3. Zabbix llegeix les dades del fitxer actualment obert i estableix la nova ubicació.
  4. S'analitzen les noves dades. Si aquest era el fitxer rotat, el fitxer es tanca i torna a la passa 2.
  5. Si no hi ha dades noves, Zabbix s'atura durant 1 segon i torna a la passa 2.
Sistema d'arxius

A causa de la implementació del fitxer trap, Zabbix necessita que el sistema de fitxers admeti inodes per diferenciar diferents fitxers (la informació s'adquireix mitjançant una crida a stat()).

Exemples de configuració emprant diferents versions del protocol SNMP

Aquest exemple empra snmptrapd i un script de receptor Bash per reenviar traps al servidor Zabbix.

Instal·lació:

  1. Configureu Zabbix per iniciar el trapper SNMP i definir el fitxer trap. Afegiu a zabbix_server.conf:
    StartSNMPTrapper=1
           SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
  1. Descarregueu l'script bash a /usr/sbin/zabbix_trap_handler.sh:
    curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/6.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

Si cal, ajusteu la variable ZABBIX_TRAPS_FILE a l'script. Per emprar el valor predeterminat, primer creeu el directori principal:

    mkdir -p /var/lib/zabbix/snmptraps
  1. Afegiu el següent a snmtrapd.conf (consulteu l'exemple)
    traphandle per defecte: /bin/bash /usr/sbin/zabbix_trap_handler.sh
  1. Creeu un element SNMP TEST :

    Host SNMP interface IP: 127.0.0.1 Key: snmptrap["linkup"] Log time format: yyyyMMdd.hhmmss

  2. Tot seguit, configureu snmptrapd per a la versió del protocol SNMP triada i envieu traps de prova mitjançant la utilitat snmptrap.

SNMPv1, SNMPv2

Els protocols SNMPv1 i SNMPv2 es basen en l'autenticació de "cadenes de comunitat". A l'exemple següent, emprarem "secret" com a cadena de comunitat. S'hauria d'establir amb el mateix valor als remitents de traps SNMP.

Tingueu en compte que, tot i que encara s'empra sovint a entorns de producció, SNMPv2 no ofereix cap xifrat ni autenticació de remitent real. Les dades s'envien com a text sense format i, per tant, aquestes versions de protocol només s'han d'emprar en entorns segurs com ara una xarxa privada i mai s'han d'emprar en una xarxa pública o de tercers.

La versió 1 d'SNMP no s'empra avui en dia perquè no admet comptadors de 64 bits i es considera un protocol heretat.

Per habilitar l'acceptació de traps SNMPv1 o SNMPv2, heu d'afegir la línia següent a snmptrapd.conf (substituïu "secret" per la cadena de comunitat SNMP configurada als remitents de traps SNMP):

    authCommunity log,execute,net secret

Ara sí que podem enviar un trap de prova amb snmptrap. En aquest exemple farem servir l'OID comú "enllaçar":

    snmptrap -v 2c -c secret localhost 0 linkUp.0
SNMPv3

SNMPv3 resol els problemes de seguretat SNMPv1/v2 i proporciona autenticació i xifrat. Podeu emprar SHA o MD5 com a mètode d'autenticació i AES o DES com a xifrat.

Per habilitar l'acceptació SNMPv3, afegiu la línia següent a snmptrapd.conf:

    createUser -e 0x8000000001020304 traptest SHA mypassword AES
           authuser log,execute traptest

Tingueu en compte la paraula clau "execute" que permet executar scripts per a aquest model de seguretat d'usuari.

    # snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0

Si voleu emprar mètodes de xifrat forts com AES192 o AES256, empreu net-snmp de la versió 5.8. És possible que hagueu de recompilar-lo amb l'opció configure: --enable-blumenthal-aes. Les versions anteriors de net-snmp no admeten AES192/AES256. Veieu també: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption

Verificació

En ambdós exemples veureu línies similars al vostre /var/lib/zabbix/snmptraps/snmptraps.log:

    20220805.102235 ZBXTRAP 127.0.0.1
           UDP: [127.0.0.1]:35736->[127.0.0.1]:162
           DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
           SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

El valor de l'element a Zabbix serà:

    2022-08-05 10:54:43 2022-08-05 10:54:41 
       
           20220805.105441 UDP: [127.0.0.1]:44262->[127.0.0.1]:162
           DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
           SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

Veieu també