3 SNMP traps

Overzicht

Het ontvangen van SNMP-traps is het tegenovergestelde van het bevragen van SNMP-geschikte apparaten.

In dit geval wordt de informatie van een SNMP-geschikt apparaat verzonden en opgevangen of "gevangen" door Zabbix.

Gewoonlijk worden traps verzonden bij een verandering van een bepaalde voorwaarde en maakt het apparaat verbinding met de server op poort 162 (in tegenstelling tot poort 161 aan de zijde van het apparaat die wordt gebruikt voor bevragingen). Het gebruik van traps kan sommige korte problemen detecteren die zich voordoen te midden van het bevragingsinterval en die mogelijk worden gemist door de bevraagde gegevens.

Het ontvangen van SNMP-traps in Zabbix is ontworpen om te werken met snmptrapd en een van de mechanismen om de traps door te geven aan Zabbix - ofwel een Bash- of Perl-script of SNMPTT.

De eenvoudigste manier om trap-bewaking in te stellen na het configureren van Zabbix is om de Bash-scriptoplossing te gebruiken, omdat Perl en SNMPTT vaak ontbreken in moderne distributies en een complexere configuratie vereisen. Deze oplossing gebruikt echter een script geconfigureerd als traphandle. Voor een betere prestatie op productiesystemen wordt de ingesloten Perl-oplossing aanbevolen (een script met de optie do perl of SNMPTT).

Het werkproces van het ontvangen van een trap:

  1. snmptrapd ontvangt een trap
  2. snmptrapd geeft de trap door aan het ontvangstscript (Bash, Perl) of SNMPTT
  3. De ontvanger analyseert, formatteert en schrijft de trap naar een bestand
  4. Zabbix SNMP-trapper leest en analyseert het trapbestand
  5. Voor elke trap zoekt Zabbix alle "SNMP-trapper"-items met hostinterfaces die overeenkomen met het ontvangen trapadres. Let op dat alleen het geselecteerde "IP" of "DNS" in de hostinterface wordt gebruikt tijdens de matching.
  6. Voor elk gevonden item wordt de trap vergeleken met de reguliere expressie in snmptrap[regexp]. De trap wordt ingesteld als de waarde van alle overeenkomende items. Als er geen overeenkomend item wordt gevonden en er een snmptrap.fallback item is, wordt de trap ingesteld als de waarde van dat item.
  7. Als de trap niet is ingesteld als de waarde van een item, logt Zabbix standaard de niet-overeenkomende trap. (Dit wordt geconfigureerd met "Log unmatched SNMP traps" in Beheer → Algemeen → Overige.)

Configuratie van SNMP-traps

Het configureren van de volgende velden in de frontend is specifiek voor dit type item:

  • Uw host moet een SNMP-interface hebben

In Configuratie → Hosts, in het veld Hostinterface stelt u een SNMP-interface in met het juiste IP- of DNS-adres. Het adres van elke ontvangen trap wordt vergeleken met de IP- en DNS-adressen van alle SNMP-interfaces om de overeenkomende hosts te vinden.

  • Configureer het item

In het veld Sleutel gebruikt u een van de SNMP-trap-sleutels:

Sleutel
Omschrijving Terugkeerwaarde Opmerkingen
snmptrap[regexp]
Vangt alle SNMP-traps die overeenkomen met de reguliere expressie gespecificeerd in regexp. Als regexp niet is gespecificeerd, worden alle trappen gevangen. SNMP-trap Dit item kan alleen worden ingesteld voor SNMP-interfaces.
User-macro's en globale reguliere expressies worden ondersteund in de parameter van deze item-sleutel.
snmptrap.fallback
Vangt alle SNMP-traps die niet zijn opgevangen door een van de snmptrap[] items voor die interface. SNMP-trap Dit item kan alleen worden ingesteld voor SNMP-interfaces.

Multiline reguliere expressie-matching wordt momenteel niet ondersteund.

Zet het Type informatie op 'Log' zodat de tijdstempels kunnen worden geparset. Houd er rekening mee dat andere formaten zoals 'Numeriek' ook acceptabel zijn, maar mogelijk een aangepaste trap-handler vereisen.

Voor SNMP-trap-bewaking om te werken, moet het eerst correct worden ingesteld (zie hieronder).

setup SNMP trap bewaking

Configuratie van Zabbix server/proxy

Om de trappen te lezen, moet Zabbix server of proxy worden geconfigureerd om het SNMP trapper-proces te starten en te wijzen naar het trappenbestand dat wordt geschreven door SNMPTT of een Bash/Perl trappenontvanger. Om dat te doen, bewerk het configuratiebestand (zabbix_server.conf of zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[TRAP BESTAND]

Als de systemd-parameter PrivateTmp wordt gebruikt, is het onwaarschijnlijk dat dit bestand in /tmp zal werken.

Configuratie van de Bash trappenontvanger

Vereisten: alleen snmptrapd.

Een Bash trappenontvanger script kan worden gebruikt om trappen rechtstreeks van snmptrapd naar de Zabbix-server door te sturen. Om het te configureren, voegt u de traphandle optie toe aan het snmptrapd-configuratiebestand (snmptrapd.conf), zie voorbeeld.

Configuratie van SNMPTT

Eerst moet snmptrapd geconfigureerd worden om SNMPTT te gebruiken.

Voor de beste prestaties moet SNMPTT geconfigureerd worden als een daemon met snmptthandler-embedded om de trappen door te sturen. Zie de instructies voor het configureren van SNMPTT.

Wanneer SNMPTT is geconfigureerd om de trappen te ontvangen, configureer snmptt.ini:

  1. Schakel het gebruik van de Perl-module uit het NET-SNMP-pakket in:
net_snmp_perl_enable = 1
  1. Log de trappen naar het trap-bestand dat door Zabbix wordt gelezen:
log_enable = 1
       log_file = [TRAP BESTAND]
  1. Stel het datum-tijd formaat in:
date_time_format = %H:%M:%S %Y/%m/%d

Het "net-snmp-perl" pakket is verwijderd in RHEL 8.0-8.2; opnieuw toegevoegd in RHEL 8.3. Voor meer informatie, zie de bekende problemen.

Formatteer nu de trappen zodat Zabbix ze herkent (bewerk snmptt.conf):

  1. Elke FORMAT-regel moet beginnen met "ZBXTRAP [address]", waar [address] zal vergeleken worden met de IP- en DNS-adressen van SNMP-interfaces op Zabbix. Bijvoorbeeld:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
       FORMAT ZBXTRAP $aA Apparaat opnieuw geïnitialiseerd (coldStart)
  1. Zie hieronder meer over het formaat van SNMP-trappen.

Gebruik geen onbekende trappen - Zabbix zal ze niet kunnen herkennen. Onbekende trappen kunnen worden afgehandeld door een algemene gebeurtenis in te stellen in snmptt.conf:

EVENT general .* "Algemene gebeurtenis" Normaal
Configuratie van Perl trappenontvanger

Vereisten: Perl, Net-SNMP gecompileerd met --enable-embedded-perl (standaard gedaan sinds Net-SNMP 5.4)

Een Perl trappenontvanger (zoek naar misc/snmptrap/zabbix_trap_receiver.pl) kan worden gebruikt om trappen rechtstreeks van snmptrapd naar de Zabbix-server door te sturen. Om het te configureren:

  • voeg het Perl-script toe aan het snmptrapd-configuratiebestand (snmptrapd.conf), bijvoorbeeld:
perl do "[VOLLEDIG PAD NAAR HET PERL ONTVANGER SCRIPT]";
  • configureer de ontvanger, bijvoorbeeld:
$SNMPTrapperFile = '[TRAP BESTAND]';
       $DateTimeFormat = '[DATUM TIJD FORMAAT]';

Als de naam van het script niet tussen aanhalingstekens staat, zal snmptrapd weigeren op te starten met meldingen vergelijkbaar met deze:

Regexp modifiers "/l" and "/a" are mutually exclusive at (eval 2) line 1, at end of line
       Regexp modifier "/l" may not appear twice at (eval 2) line 1, at end of line
SNMP trap formaat

Alle aangepaste Perl trap ontvangers en SNMPTT trapconfiguraties moeten de trap op de volgende manier formatteren:

[tijdstempel] [de trap, deel 1] ZBXTRAP [adres] [de trap, deel 2]

waarbij

  • [tijdstempel] - het tijdstempel dat wordt gebruikt voor logitems
  • ZBXTRAP - de kop die aangeeft dat er een nieuwe trap begint in deze regel
  • [adres] - IP-adres dat wordt gebruikt om de host voor deze trap te vinden

Merk op dat "ZBXTRAP" en "[adres]" uit het bericht worden verwijderd tijdens de verwerking. Als de trap op een andere manier is opgemaakt, kan Zabbix de trappen onverwachts interpreteren.

Voorbeeldtrap:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normaal "Statusgebeurtenissen" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operationele status: 2

Dit zal resulteren in de volgende trap voor de SNMP-interface met IP=192.168.1.1:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normaal "Statusgebeurtenissen"
       localhost - Link down on interface 2. Admin state: 1. Operationele status: 2

Systeemvereisten

Ondersteuning voor grote bestanden

Zabbix heeft ondersteuning voor grote bestanden voor SNMP-trapperbestanden. De maximale bestandsgrootte die Zabbix kan lezen is 2^63 (8 EiB). Houd er rekening mee dat het bestandssysteem een lagere limiet voor de bestandsgrootte kan opleggen.

Logrotatie

Zabbix biedt geen logsrotatiesysteem - dat moet door de gebruiker worden afgehandeld. De logrotatie moet eerst het oude bestand een nieuwe naam geven en pas daarna verwijderen, zodat er geen trappen verloren gaan:

  1. Zabbix opent het trapperbestand op de laatst bekende locatie en gaat naar stap 3.
  2. Zabbix controleert of het momenteel geopende bestand is geroteerd door het inode-nummer te vergelijken met het inode-nummer van het gedefinieerde trapperbestand. Als er geen geopend bestand is, wordt de laatste locatie opnieuw ingesteld en gaat Zabbix naar stap 1.
  3. Zabbix leest de gegevens uit het momenteel geopende bestand en stelt de nieuwe locatie in.
  4. De nieuwe gegevens worden geparseerd. Als dit het geroteerde bestand was, wordt het bestand gesloten en gaat het terug naar stap 2.
  5. Als er geen nieuwe gegevens waren, wacht Zabbix 1 seconde en gaat terug naar stap 2.
Bestandssysteem

Vanwege de implementatie van het trapperbestand heeft Zabbix een bestandssysteem nodig dat inodes ondersteunt om bestanden te onderscheiden (de informatie wordt verkregen via een stat() oproep).

Opzetvoorbeelden met verschillende SNMP-protocolversies

Dit voorbeeld maakt gebruik van snmptrapd en een Bash-ontvangerscript om traps door te sturen naar de Zabbix-server.

Opzet:

  1. Configureer Zabbix om SNMP-trapper te starten en het trapbestand in te stellen. Voeg toe aan zabbix_server.conf:
StartSNMPTrapper=1
       SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
  1. Download het Bash-script naar /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

Pas indien nodig de ZABBIX_TRAPS_FILE-variabele in het script aan. Maak eerst de bovenliggende directory aan om de standaardwaarde te gebruiken:

mkdir -p /var/lib/zabbix/snmptraps
  1. Voeg het volgende toe aan snmtrapd.conf (raadpleeg het werkende voorbeeld):
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
  1. Maak een SNMP-item TEST aan:

    Host SNMP-interface-IP: 127.0.0.1 Sleutel: snmptrap["linkup"] Logtijdformaat: yyyyMMdd.hhmmss

  2. We zullen vervolgens snmptrapd configureren voor onze gekozen SNMP-protocolversie en testtraps verzenden met behulp van het hulpprogramma snmptrap.

SNMPv1, SNMPv2

SNMPv1- en SNMPv2-protocollen vertrouwen op authenticatie met "community string". In het onderstaande voorbeeld gebruiken we "secret" als community string. Het moet worden ingesteld op dezelfde waarde op SNMP-trapverzenders.

Houd er rekening mee dat hoewel SNMPv2 nog steeds veel wordt gebruikt in productieomgevingen, het geen versleuteling en echte afzenderauthenticatie biedt. De gegevens worden als platte tekst verzonden en daarom moeten deze protocolversies alleen worden gebruikt in beveiligde omgevingen zoals privénetwerk en mogen ze nooit worden gebruikt via een openbaar of derden-netwerk.

SNMP-versie 1 wordt tegenwoordig niet echt meer gebruikt, omdat het geen 64-bits tellers ondersteunt en als een verouderd protocol wordt beschouwd.

Om SNMPv1- of SNMPv2-traps te accepteren, moet u de volgende regel aan snmptrapd.conf toevoegen. Vervang "secret" door de SNMP-communitystring die is geconfigureerd op SNMP-trapverzenders:

authCommunity log,execute,net secret

Nu kunnen we een testtrap verzenden met behulp van snmptrap. We zullen in dit voorbeeld de veelgebruikte OID "link up" gebruiken:

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

SNMPv3 lost beveiligingsproblemen van SNMPv1/v2 op en biedt authenticatie en versleuteling. U kunt de MD5- of meerdere SHA-authenticatiemethoden en DES/meerdere AES als versleuteling gebruiken.

Voeg om SNMPv3-traps te accepteren de volgende regels toe aan snmptrapd.conf:

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

Let op het sleutelwoord "execute" waarmee scripts kunnen worden uitgevoerd voor dit beveiligingsmodel van de gebruiker.

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

Als u sterke versleutelingsmethoden zoals AES192 of AES256 wilt gebruiken, gebruikt u net-snmp vanaf versie 5.8. U moet het mogelijk opnieuw compileren met de configure-optie: --enable-blumenthal-aes. Oudere versies van net-snmp ondersteunen geen AES192/AES256. Zie ook: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption

Verificatie

In beide voorbeelden zult u vergelijkbare regels zien in uw /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

De itemwaarde in Zabbix zal zijn:

2022-08-05 10:22:35 2022-08-05 10:22:33 
       
       20220805.102233 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

Zie ook