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:
snmptrapd
rep un trapsnmptrapd
reenvia el trap a l'script receptor (Bash, Perl) o SNMPTTsnmptrap[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.Durant el canvi de node d'alta disponibilitat (HA), Zabbix continuarà processant-se després del darrer registre dins de la darrera marca de temps ISO 8601; si no es troba el mateix registre, només s'emprarà la marca de temps per identificar la darrera posició.
La configuració dels camps següents a la interfície web és específica d'aquest tipus d'elements:
A Recull de dades → 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.
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 (veieu més avall).
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):
Si s'empra el paràmetre systemd PrivateTmp, és poc probable que aquest fitxer funcioni a /tmp.
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.
segurament calgui reiniciar l'snmptrapd per aplicar els canvis a la seva configuració.
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:
segurament calgui reiniciar l'snmptrapd per aplicar els canvis a la seva configuració.
Si no s'anomena l'script, snmptrapd es negarà a començar amb missatges, semblants a aquests:
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
:
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):
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
No empreu traps desconeguts: Zabbix no els podrà pas reconèixer. Els traps desconeguts es poden gestionar definint un esdeveniment general a snmptt.conf:
Tots els receptors de traps Perl personalitzats i la configuració de traps SNMPTT han de formatar la trampa de la manera següent:
on
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:
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2
Això donarà lloc al següent trap per a la interfície SNMP amb IP=192.168.1.1:
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events"
equip local - Enllaç a la interfície 2. Estat de l'administració: 1. Estat operatiu: 2
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.
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ó:
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()).
Aquest exemple empra snmptrapd i un script de receptor Bash per reenviar traps al servidor Zabbix.
Instal·lació:
zabbix_server.conf
:/usr/sbin/zabbix_trap_handler.sh
:curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/7.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
Nota: Abans en versions prèvies a la 7.0, empreu aquest enllaç per descarregar l'script.
Si cal, ajusteu la variable ZABBIX_TRAPS_FILE a l'script. Per emprar el valor predeterminat, primer creeu el directori principal:
snmtrapd.conf
(consulteu l'exemple)potser cal reiniciar l'snmptrapd per actualizar els canvis a la configuració.
Creeu un element SNMP TEST :
Host SNMP interface IP: 127.0.0.1 Key: snmptrap["linkup"]
Log time format: yyyy-MM-ddThh:mm:ss
Fixeu-vos que s'empra el format de data i hora de la ISO 8601.
snmptrapd
per a la versió del protocol SNMP triada i envieu traps de prova mitjançant la utilitat snmptrap
.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):
Ara sí que podem enviar un trap de prova amb snmptrap
. En aquest exemple farem servir l'OID comú "enllaçar":
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
:
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
En ambdós exemples veureu línies similars al vostre /var/lib/zabbix/snmptraps/snmptraps.log
:
2024-01-30T10:04:23+0200 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
El valor de l'element a Zabbix serà:
2024-01-30 10:04:23 2024-01-30 10:04:21
2024-01-30T10:04:21+0200 UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
Exemple amb Perl:
2024-01-30T11:42:54+0200 ZBXTRAP 127.0.0.1
PDU INFO:
receivedfrom UDP: [127.0.0.1]:58649->[127.0.0.1]:162
notificationtype TRAP
version 1
community public
errorstatus 0
transactionid 1
requestid 2101882550
messageid 0
errorindex 0
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (457671) 1:16:16.71
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp.0