2 SNMP agent

Overzicht

U wilt mogelijk SNMP-bewaking gebruiken op apparaten zoals printers, netwerkswitches, routers of UPS'en die meestal SNMP-ingeschakeld zijn en waarop het praktisch onhaalbaar zou zijn om volledige besturingssystemen en Zabbix-agents in te stellen.

Om gegevens te kunnen ophalen die worden verstrekt door SNMP-agents op deze apparaten, moet de Zabbix-server initieel geconfigureerd zijn met SNMP-ondersteuning door de --with-net-snmp vlag op te geven.

SNMP-controles worden alleen uitgevoerd via het UDP-protocol.

Zabbix-server- en proxy-daemons vragen SNMP-apparaten in één enkel verzoek om meerdere waarden. Dit heeft invloed op alle soorten SNMP-items (reguliere SNMP-items, SNMP-items met dynamische indexen en SNMP low-level discovery) en zou het SNMP-verwerkingsproces veel efficiënter moeten maken. Zie het gedeelte bulkverwerking voor technische details over hoe dit intern werkt. Bulkverzoeken kunnen ook worden uitgeschakeld voor apparaten die ze niet goed kunnen verwerken met behulp van de "Gebruik bulkverzoeken"-instelling voor elke interface.

Zabbix-server- en proxy-daemons loggen regels die lijken op de volgende als ze een onjuist SNMP-antwoord ontvangen:

SNMP-antwoord van host "gateway" bevat niet alle gevraagde variabele koppelingen

Hoewel deze niet alle problematische gevallen dekken, zijn ze nuttig om individuele SNMP-apparaten te identificeren waarvoor bulkverzoeken moeten worden uitgeschakeld.

Zabbix-server/proxy zal altijd minstens één keer opnieuw proberen na een onsuccesvolle query-poging: ofwel via het opnieuw proberen mechanisme van de SNMP-bibliotheek of via het interne bulkverwerkingsmechanisme.

Als u SNMPv3-apparaten bewaakt, zorg er dan voor dat msgAuthoritativeEngineID (ook bekend als snmpEngineID of "Engine ID") nooit wordt gedeeld door twee apparaten. Volgens RFC 2571 (sectie 3.1.1.1) moet het uniek zijn voor elk apparaat.

RFC3414 vereist dat de SNMPv3-apparaten hun engineBoots persistent opslaan. Sommige apparaten doen dat niet, wat resulteert in het verwerpen van hun SNMP-berichten als verouderd na herstart. In een dergelijke situatie moet de SNMP-cache handmatig worden gewist op een server/proxy (door -R snmp_cache_reload te gebruiken) of moet de server/proxy worden herstart.

SNMP-bewaking configureren

Om een apparaat via SNMP te gaan bewaken, moeten de volgende stappen worden uitgevoerd:

Stap 1

Ontdek de SNMP-string (of OID) van het item dat u wilt bewaken.

Om een lijst met SNMP-strings te krijgen, gebruikt u het snmpwalk-commando (onderdeel van de net-snmp software die u als onderdeel van de Zabbix-installatie zou moeten hebben geïnstalleerd) of een equivalent hulpmiddel:

snmpwalk -v 2c -c public <host IP> .

Hier staat '2c' voor SNMP-versie, u kunt het ook vervangen door '1', om SNMP Versie 1 op het apparaat aan te geven.

Dit zou u een lijst met SNMP-strings en hun laatste waarde moeten geven. Als dat niet het geval is, is het mogelijk dat de SNMP 'community' anders is dan de standaard 'public', in welk geval u moet uitzoeken wat het is.

U kunt dan de lijst doornemen totdat u de string vindt die u wilt bewaken, bijvoorbeeld als u de bytes die binnenkomen op poort 3 van uw switch wilt bewaken, zou u de IF-MIB::ifHCInOctets.3 string gebruiken van deze regel:

IF-MIB::ifHCInOctets.3 = Counter64: 3409739121

U kunt nu het snmpget-commando gebruiken om de numerieke OID voor 'IF-MIB::ifHCInOctets.3' te achterhalen:

snmpget -v 2c -c public -On <host IP> IF-MIB::ifHCInOctets.3

Merk op dat het laatste nummer in de string het poortnummer is dat u wilt bewaken. Zie ook: Dynamische indexen.

Dit zou u iets als het volgende moeten opleveren:

.1.3.6.1.2.1.31.1.1.1.6.3 = Counter64: 3472126941

Opnieuw is het laatste nummer in de OID het poortnummer.

Een aantal van de meest gebruikte SNMP-OID's worden automatisch vertaald naar een numerieke representatie door Zabbix.

In het laatste bovenstaande voorbeeld is het waardeveldtype "Counter64", wat intern overeenkomt met het type ASN_COUNTER64. De volledige lijst met ondersteunde typen is ASN_COUNTER, ASN_COUNTER64, ASN_UINTEGER, ASN_UNSIGNED64, ASN_INTEGER, ASN_INTEGER64, ASN_FLOAT, ASN_DOUBLE, ASN_TIMETICKS, ASN_GAUGE, ASN_IPADDRESS, ASN_OCTET_STR en ASN_OBJECT_ID. Deze typen komen ongeveer overeen met "Counter32", "Counter64", "UInteger32", "INTEGER", "Float", "Double", "Timeticks", "Gauge32", "IpAddress", "OCTET STRING", "OBJECT IDENTIFIER" in de snmpget-uitvoer, maar kunnen ook worden weergegeven als "STRING", "Hex-STRING", "OID" en andere, afhankelijk van de aanwezigheid van een weergavetip.

Stap 2

Maak een host aan die overeenkomt met een apparaat.

Voeg een SNMP-interface toe aan de host:

  • Voer het IP-adres/DNS-naam en het poortnummer in
  • Selecteer de SNMP-versie uit de keuzelijst
  • Voeg interface-inloggegevens toe, afhankelijk van de geselecteerde SNMP-versie:
    • SNMPv1, v2 vereisen alleen de community (meestal 'public')
    • SNMPv3 vereist meer specifieke opties (zie hieronder)
  • Laat het selectievakje Use bulk requests aangevinkt om bulkverwerking van SNMP-verzoeken mogelijk te maken
SNMPv3-parameter Beschrijving
Context name Voer een contextnaam in om het item op het SNMP-subnet te identificeren.
Contextnaam wordt ondersteund voor SNMPv3-items sinds Zabbix 2.2.
Gebruikersmacro's worden opgelost in dit veld.
Beveiligingsnaam Voer de beveiligingsnaam in.
Gebruikersmacro's worden opgelost in dit veld.
Beveiligingsniveau Selecteer het beveiligingsniveau:
noAuthNoPriv - er worden geen authenticatie- of privacyprotocollen gebruikt
AuthNoPriv - authenticatieprotocol wordt gebruikt, privacyprotocol niet
AuthPriv - zowel authenticatie- als privacyprotocollen worden gebruikt
Authenticatieprotocol Selecteer authenticatieprotocol - MD5, SHA1, SHA224, SHA256, SHA384 of SHA512.
Authenticatiewachtwoord Voer het authenticatiewachtwoord in.
Gebruikersmacro's worden opgelost in dit veld.
Privacyprotocol Selecteer privacyprotocol - DES, AES128, AES192, AES256, AES192C (Cisco) of AES256C (Cisco).
Let op dat:
- op sommige oudere systemen ondersteunt net-snmp mogelijk geen AES256;
- op sommige nieuwere systemen (bijvoorbeeld RHEL9) kan de ondersteuning van DES worden stopgezet voor het net-snmp-pakket.
Privacywachtwoord Voer het privacywachtwoord in.
Gebruikersmacro's worden opgelost in dit veld.

In geval van onjuiste SNMPv3-inloggegevens (beveiligingsnaam, authenticatieprotocol/wachtwoord, privacyprotocol):

  • Zabbix ontvangt een FOUT van net-snmp, behalve bij een verkeerd Privacywachtwoord waarbij Zabbix een TIME-OUT-fout ontvangt van net-snmp;
  • (sinds Zabbix 6.0.13) de beschikbaarheid van de SNMP-interface schakelt over naar rood (niet beschikbaar).

Wijzigingen in Authenticatieprotocol, Authenticatiewachtwoord, Privacyprotocol of Privacywachtwoord, die worden aangebracht zonder de Beveiligingsnaam te wijzigen, worden pas van kracht nadat de cache op een server/proxy handmatig is gewist (door -R snmp_cache_reload te gebruiken) of de server/proxy wordt opnieuw opgestart. In gevallen waarin de Beveiligingsnaam ook wordt gewijzigd, worden alle parameters onmiddellijk bijgewerkt.

U kunt een van de meegeleverde SNMP-templates (Template SNMP-apparaat en andere) gebruiken die automatisch een reeks items toevoegt. Het kan echter zijn dat het sjabloon niet compatibel is met de host. Klik op Toevoegen om de host op te slaan.

Stap 3

Maak een item aan voor monitoring.

Ga nu terug naar Zabbix en klik op Items voor de SNMP-host die je eerder hebt aangemaakt. Afhankelijk van of je al dan niet een sjabloon hebt gebruikt bij het maken van je host, heb je ofwel een lijst met SNMP-items die aan je host zijn gekoppeld, of gewoon een lege lijst. We gaan ervan uit dat je het item zelf gaat aanmaken met behulp van de informatie die je zojuist hebt verzameld met snmpwalk en snmpget, dus klik op Maak item aan. In het nieuwe formulier voor het item:

  • Voer de naam van het item in
  • Verander het veld 'Type' naar 'SNMP-agent'
  • Voer de 'Sleutel' in als iets betekenisvols
  • Zorg ervoor dat het veld 'Hostinterface' je switch/router bevat
  • Voer de tekstuele of numerieke OID die je eerder hebt opgehaald in met het veld 'SNMP OID', bijvoorbeeld: .1.3.6.1.2.1.31.1.1.1.6.3
  • Stel het 'Type informatie' in op Numeriek (ongesigneerd)
  • Voer een 'Update-interval' en 'Geschiedenisopslag' in als je wilt dat deze verschillen van de standaardwaarden
  • Op het tabblad Voorverwerking, voeg een Verandering per seconde stap toe (belangrijk, anders krijg je cumulatieve waarden van het SNMP-apparaat in plaats van de laatste verandering). Kies een aangepaste vermenigvuldiger als je die wilt gebruiken.

Alle verplichte invoervelden zijn gemarkeerd met een rode asterisk.

Sla het item nu op en ga naar MonitoringLaatste gegevens voor je SNMP-gegevens!

Voorbeeld 1

Algemeen voorbeeld:

Parameter Omschrijving
OID 1.2.3.45.6.7.8.0 (of .1.2.3.45.6.7.8.0)
Sleutel <Unieke te gebruiken string als referentie voor triggers>
Bijvoorbeeld "mijn_parameter".

Merk op dat de OID zowel in numerieke als in tekstvorm kan worden opgegeven. In sommige gevallen moet een tekstuele OID echter worden omgezet naar een numerieke representatie. De hulpprogramma snmpget kan hiervoor worden gebruikt:

snmpget -On localhost public enterprises.ucdavis.memory.memTotalSwap.0
Voorbeeld 2

Monitoring van uptime:

Parameter Omschrijving
OID MIB::sysUpTime.0
Sleutel router.uptime
Type waarde Float
Eenheden uptime
Voorverwerking stap: Aangepaste vermenigvuldiger 0.01

Interne werking van bulkverwerking

De Zabbix-server en -proxy bevragen SNMP-apparaten voor meerdere waarden in één enkel verzoek. Dit heeft invloed op verschillende soorten SNMP-items:

Alle SNMP-items op één enkele interface met identieke parameters worden gepland om op hetzelfde moment bevraagd te worden. De eerste twee types items worden door pollers genomen in batches van maximaal 128 items, terwijl low-level discovery regels individueel verwerkt worden, zoals voorheen.

Op het lagere niveau zijn er twee soorten bewerkingen voor het bevragen van waarden: het ophalen van meerdere gespecificeerde objecten en het wandelen door een OID-tree.

Voor "ophalen" wordt een GetRequest-PDU gebruikt met maximaal 128 variabele bindingen. Voor "wandelen" wordt een GetNextRequest-PDU gebruikt voor SNMPv1 en een GetBulkRequest met een "max-repetitions" veld van maximaal 128 wordt gebruikt voor SNMPv2 en SNMPv3.

De voordelen van bulkverwerking voor elk type SNMP-item worden hieronder beschreven:

  • Gewone SNMP-items profiteren van de verbeteringen bij het "ophalen";
  • SNMP-items met dynamische indexen profiteren zowel van de verbeteringen bij het "ophalen" als bij het "wandelen": "ophalen" wordt gebruikt voor indexverificatie en "wandelen" voor het opbouwen van de cache;
  • SNMP low-level discovery regels profiteren van de verbeteringen bij het "wandelen".

Er is echter een technisch probleem: niet alle apparaten zijn in staat om 128 waarden per verzoek terug te sturen. Sommige geven altijd een correct antwoord, maar andere antwoorden met een "tooBig(1)" foutmelding of reageren helemaal niet zodra het potentiële antwoord een bepaalde limiet overschrijdt.

Om een optimale hoeveelheid objecten te vinden die bevraagd moeten worden voor een gegeven apparaat, gebruikt Zabbix de volgende strategie. Het begint voorzichtig met het bevragen van 1 waarde in een verzoek. Als dat succesvol is, bevraagt het 2 waarden in een verzoek. Als dat weer succesvol is, bevraagt het 3 waarden in een verzoek en gaat zo verder door het aantal bevraagde objecten met 1,5 te vermenigvuldigen, resulterend in de volgende reeks verzoeksgroottes: 1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 128.

Zodra een apparaat echter weigert om een correct antwoord te geven (bijvoorbeeld voor 42 variabelen), doet Zabbix twee dingen.

Ten eerste, voor de huidige itembatch wordt het aantal objecten in een enkel verzoek gehalveerd en worden 21 variabelen bevraagd. Als het apparaat in leven is, zou het verzoek in de overgrote meerderheid van de gevallen moeten werken, omdat 28 variabelen bekend waren om te werken en 21 aanzienlijk minder is dan dat. Als dat nog steeds mislukt, schakelt Zabbix over naar het bevragen van waarden één voor één. Als dat ook mislukt, reageert het apparaat zeker niet en is de grootte van het verzoek geen probleem.

Het tweede dat Zabbix doet voor volgende itembatches is dat het begint met het laatste succesvolle aantal variabelen (28 in ons voorbeeld) en doorgaat met het verhogen van de verzoeksgroottes met 1 tot de limiet is bereikt. Bijvoorbeeld, stel dat de grootte van het grootste antwoord 32 variabelen is, dan zullen de volgende verzoeken van groottes 29, 30, 31, 32 en 33 zijn. Het laatste verzoek zal mislukken en Zabbix zal nooit meer een verzoek van grootte 33 uitvoeren. Vanaf dat moment bevraagt Zabbix voor dit apparaat maximaal 32 variabelen.

Als grote verzoeken echter mislukken met dit aantal variabelen, kunnen er twee dingen aan de hand zijn. De exacte criteria die een apparaat gebruikt om de grootte van het antwoord te beperken, kunnen niet bekend zijn, maar we proberen dat te benaderen met behulp van het aantal variabelen. Dus de eerste mogelijkheid is dat dit aantal variabelen ongeveer overeenkomt met de feitelijke limiet van het apparaat voor de grootte van het antwoord in het algemeen: soms is het antwoord minder dan de limiet, soms is het groter dan dat. De tweede mogelijkheid is dat een UDP-pakket in beide richtingen gewoon verloren is gegaan. Om deze redenen, als Zabbix een mislukt verzoek krijgt, vermindert het het maximumaantal variabelen om dieper in het comfortabele bereik van het apparaat te komen, maar (vanaf versie 2.2.8) slechts tot twee keer toe.

In het hierboven gegeven voorbeeld, als een verzoek met 32 variabelen toevallig mislukt, zal Zabbix het aantal verminderen tot 31. Als dat ook mislukt, zal Zabbix het aantal verminderen tot 30. Zabbix zal het aantal variabelen echter niet verminderen tot onder de 30, omdat het zal aannemen dat verdere mislukkingen te wijten zijn aan het verlies van UDP-pakketten, eerder dan aan de limiet van het apparaat.

Als een apparaat echter om andere redenen geen bulkverzoeken kan verwerken en de beschreven heuristiek niet werkt, is er vanaf Zabbix 2.4 een instelling "Gebruik bulkverzoeken" voor elke interface waarmee bulkverzoeken voor dat apparaat uitgeschakeld kunnen worden.