2 SNMP Agent

Übersicht

Möglicherweise möchten Sie SNMP-Monitoring auf Geräten wie Druckern, Netzwerk-Switches, Routern oder USVs verwenden, die in der Regel SNMP-fähig sind und auf denen es unpraktisch wäre, vollständige Betriebssysteme und Zabbix-Agenten einzurichten.

Damit Daten abgerufen werden können, die von SNMP-Agenten auf diesen Geräten bereitgestellt werden, muss der Zabbix-Server zunächst mit SNMP-Unterstützung konfiguriert werden, indem das Flag --with-net-snmp angegeben wird. Es wird außerdem empfohlen, MIB-Dateien zu installieren, damit Werte von Datenpunkten im korrekten Format angezeigt werden. Ohne die MIB-Dateien können Formatierungsprobleme auftreten, z. B. dass Werte in HEX statt in UTF-8 oder umgekehrt angezeigt werden.

SNMP-Prüfungen werden ausschließlich über das UDP-Protokoll durchgeführt.

Zabbix-Server- und Proxy-Daemons protokollieren Zeilen ähnlich der folgenden, wenn sie eine fehlerhafte SNMP-Antwort erhalten:

SNMP response from host "gateway" does not contain all of the requested variable bindings

Auch wenn sie nicht alle problematischen Fälle abdecken, sind sie nützlich, um einzelne SNMP-Geräte zu identifizieren, für die kombinierte Anfragen deaktiviert werden sollten.

Zabbix-Server/Proxy wiederholt SNMP-walk- und get-Datenpunkte bis zu 5-mal. Der Wiederholungsmechanismus gilt nicht für DNS-Auflösungsfehler.

Bei veralteten SNMP-Prüfungen (einzelne OID-Nummer oder Zeichenfolge) wiederholt Zabbix-Server/Proxy nach einem fehlgeschlagenen Abfrageversuch mindestens einmal: entweder über den Wiederholungsmechanismus der SNMP-Bibliothek oder über den internen Mechanismus der kombinierten Verarbeitung.

Wenn Sie SNMPv3-Geräte überwachen, stellen Sie sicher, dass msgAuthoritativeEngineID (auch als snmpEngineID oder "Engine ID" bezeichnet) niemals von zwei Geräten gemeinsam verwendet wird. Gemäß RFC 2571 (Abschnitt 3.1.1.1) muss sie für jedes Gerät eindeutig sein.

RFC3414 verlangt, dass SNMPv3-Geräte ihre engineBoots persistent speichern. Einige Geräte tun dies nicht, was dazu führt, dass ihre SNMP-Nachrichten nach einem Neustart als veraltet verworfen werden. In einem solchen Fall muss der SNMP-Cache auf einem Server/Proxy manuell geleert werden (mit -R snmp_cache_reload) oder der Server/Proxy muss neu gestartet werden.

Zabbix speichert SNMPv3-EngineID→IP-Zuordnungen im Cache und verwendet zwischengespeicherte EngineIDs für nachfolgende Prüfungen wieder, anstatt jedes Mal eine Probe zu senden, wodurch der Netzwerkverkehr reduziert wird. Wenn eine EngineID nicht wiederverwendet werden kann, wird ein Wiederholungsversuch mit einer Probe durchgeführt, um die neue EngineID zu ermitteln.

Konfiguration der SNMP-Überwachung

Um die Überwachung eines Geräts über SNMP zu starten, müssen die folgenden Schritte durchgeführt werden:

Schritt 1

Ermitteln Sie den SNMP-String (oder die OID) des Datenpunkts, den Sie überwachen möchten.

Um eine Liste von SNMP-Strings zu erhalten, verwenden Sie den Befehl snmpwalk (Teil der Software net-snmp, die Sie im Rahmen der Zabbix-Installation installiert haben sollten) oder ein gleichwertiges Werkzeug:

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

Da '2c' hier für die SNMP-Version steht, können Sie es auch durch '1' ersetzen, um SNMP Version 1 auf dem Gerät anzugeben.

Dies sollte Ihnen eine Liste von SNMP-Strings und deren letztem Wert liefern. Falls nicht, ist es möglich, dass die SNMP-'community' vom Standardwert 'public' abweicht; in diesem Fall müssen Sie herausfinden, welcher Wert verwendet wird.

Anschließend können Sie die Liste durchgehen, bis Sie den String finden, den Sie überwachen möchten, z. B. wenn Sie die eingehenden Bytes auf Port 3 Ihres Switches überwachen möchten, würden Sie den String IF-MIB::ifHCInOctets.3 aus dieser Zeile verwenden:

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

Sie können nun den Befehl snmpget verwenden, um die numerische OID für 'IF-MIB::ifHCInOctets.3' zu ermitteln:

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

Beachten Sie, dass die letzte Zahl im String die Portnummer ist, die Sie überwachen möchten. Siehe auch: Dynamische Indizes.

Dies sollte Ihnen etwa Folgendes liefern:

.1.3.6.1.2.1.31.1.1.1.6.3 = Counter64: 3472126941

Auch hier ist die letzte Zahl in der OID die Portnummer.

Einige der am häufigsten verwendeten SNMP-OIDs werden von Zabbix automatisch in eine numerische Darstellung übersetzt.

Im letzten obigen Beispiel ist der Werttyp "Counter64", was intern dem Typ ASN_COUNTER64 entspricht. Die vollständige Liste der unterstützten Typen lautet 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 und ASN_OBJECT_ID. Diese Typen entsprechen in etwa "Counter32", "Counter64", "UInteger32", "INTEGER", "Float", "Double", "Timeticks", "Gauge32", "IpAddress", "OCTET STRING", "OBJECT IDENTIFIER" in der Ausgabe von snmpget, können jedoch je nach Vorhandensein eines Anzeigehinweises auch als "STRING", "Hex-STRING", "OID" und anders dargestellt werden.

Schritt 2

Erstellen Sie einen Host, der einem Gerät entspricht.

Fügen Sie eine SNMP-Schnittstelle für den Host hinzu:

  • Geben Sie die IP-Adresse/den DNS-Namen und die Portnummer ein.
  • Wählen Sie die SNMP-Version aus der Dropdown-Liste aus.
  • Fügen Sie je nach ausgewählter SNMP-Version Schnittstellen-Zugangsdaten hinzu:
    • SNMPv1, v2 erfordern nur die Community (normalerweise 'public').
    • SNMPv3 erfordert spezifischere Optionen (siehe unten).
  • Geben Sie den Wert für die maximale Wiederholung (Standard: 10) für native SNMP-Bulk-Anfragen (GetBulkRequest-PDUs) an; nur für discovery[]- und walk[]-Datenpunkte in SNMPv2 und v3. Beachten Sie, dass ein zu hoch eingestellter Wert zu einem Timeout bei der Prüfung des SNMP-Agenten führen kann.
  • Aktivieren Sie das Kontrollkästchen Kombinierte Anfragen verwenden, um die kombinierte Verarbeitung von SNMP-Anfragen zu erlauben (nicht bezogen auf native SNMP-Bulk-Anfragen "walk" und "get").
SNMPv3-Parameter Beschreibung
Kontextname Geben Sie den Kontextnamen ein, um den Datenpunkt im SNMP-Subnetz zu identifizieren.
Benutzermakros werden in diesem Feld aufgelöst.
Sicherheitsname Geben Sie den Sicherheitsnamen ein.
Benutzermakros werden in diesem Feld aufgelöst.
Sicherheitsstufe Wählen Sie die Sicherheitsstufe aus:
noAuthNoPriv - es werden weder Authentifizierungs- noch Datenschutzprotokolle verwendet
AuthNoPriv - das Authentifizierungsprotokoll wird verwendet, das Datenschutzprotokoll nicht
AuthPriv - sowohl Authentifizierungs- als auch Datenschutzprotokolle werden verwendet
Authentifizierungsprotokoll Wählen Sie das Authentifizierungsprotokoll aus - MD5, SHA1; mit net-snmp 5.8 und neuer SHA224, SHA256, SHA384 oder SHA512.
Authentifizierungs-Passphrase Geben Sie die Authentifizierungs-Passphrase ein.
Benutzermakros werden in diesem Feld aufgelöst.
Datenschutzprotokoll Wählen Sie das Datenschutzprotokoll aus - DES, AES128, AES192, AES256, AES192C (Cisco) oder AES256C (Cisco).
Siehe Hinweise zur Unterstützung von Datenschutzprotokollen
Datenschutz-Passphrase Geben Sie die Datenschutz-Passphrase ein.
Benutzermakros werden in diesem Feld aufgelöst.

Bei falschen SNMPv3-Zugangsdaten (Sicherheitsname, Authentifizierungsprotokoll/-Passphrase, Datenschutzprotokoll):

  • Zabbix erhält von net-snmp einen ERROR, außer bei einer falschen Datenschutz-Passphrase; in diesem Fall erhält Zabbix von net-snmp einen TIMEOUT-Fehler.
  • Die Verfügbarkeit der SNMP-Schnittstelle wechselt auf Rot (nicht verfügbar).

Änderungen an Authentifizierungsprotokoll, Authentifizierungs-Passphrase, Datenschutzprotokoll oder Datenschutz-Passphrase, die ohne Änderung des Sicherheitsnamens vorgenommen werden, werden normalerweise automatisch angewendet, wenn die entsprechende SNMPv3-Schnittstelle in Zabbix aktualisiert wird. In Fällen, in denen auch der Sicherheitsname geändert wird, werden alle Parameter sofort aktualisiert.

Sie können eine der bereitgestellten SNMP-Vorlagen verwenden, die automatisch eine Reihe von Datenpunkten hinzufügt. Vergewissern Sie sich vor der Verwendung einer Vorlage, dass sie mit dem Host kompatibel ist.

Klicken Sie auf Hinzufügen, um den Host zu speichern.

Unterstützung von Privacy-Protokollen

Abhängig von Ihrem Betriebssystem und der net-snmp-Konfiguration sind einige Privacy-Protokolle möglicherweise nicht verfügbar:

  • Auf einigen neueren Betriebssystemen (zum Beispiel RHEL9) wurde die Unterstützung von DES für das net-snmp-Paket eingestellt.

  • Die Verschlüsselungsprotokolle AES192 und stärker werden auf Betriebssystemen älter als RHEL 8, CentOS 8, Oracle Linux 8, Debian 12, Ubuntu LTS 22.04 und openSUSE Leap 15.5 nicht standardmäßig unterstützt.

Um zu prüfen, ob die net-snmp-Bibliothek AES192+ unterstützt, verwenden Sie eine der folgenden Optionen:

  1. net-snmp-config:
net-snmp-config --configure-options

Wenn die Ausgabe --enable-blumenthal-aes enthält, wird AES192+ unterstützt.

Beachten Sie, dass net-snmp-config Teil des Entwicklungspakets für SNMP ist (libsnmp-dev für Debian/Ubuntu, net-snmp-devel für CentOS/RHEL/OL/SUSE) und möglicherweise standardmäßig nicht installiert ist.

  1. snmpget:
snmpget -v 3 -x AES-256

Wenn die Ausgabe Invalid privacy protocol specified after -3x flag: AES-256 enthält, wird AES192+ nicht unterstützt. Wenn die Ausgabe No hostname specified. enthält, wird AES192+ nicht unterstützt.

Wenn Ihre net-snmp-Bibliothek AES192 und höhere Protokolle nicht unterstützt, kompilieren Sie net-snmp mit der Option --enable-blumenthal-aes neu und kompilieren Sie dann den Zabbix Server neu, wobei Sie die Option --with-net-snmp=/home/user/yourcustomnetsnmp/bin/net-snmp-config angeben.

Schritt 3

Erstellen Sie einen Datenpunkt für die Überwachung.

Gehen Sie nun zurück zu Zabbix und klicken Sie bei dem zuvor erstellten SNMP-Host auf Datenpunkte. Je nachdem, ob Sie beim Erstellen Ihres Hosts eine Vorlage verwendet haben oder nicht, sehen Sie entweder eine Liste von SNMP-Datenpunkten, die Ihrem Host zugeordnet sind, oder nur eine leere Liste. Wir gehen davon aus, dass Sie den Datenpunkt selbst mithilfe der Informationen erstellen, die Sie gerade mit snmpwalk und snmpget gesammelt haben. Klicken Sie daher auf Datenpunkt erstellen.

Füllen Sie die erforderlichen Parameter im Formular für den neuen Datenpunkt aus:

Parameter Beschreibung
Name Geben Sie den Namen des Datenpunkts ein.
Type Wählen Sie hier SNMP agent aus.
Key Geben Sie einen aussagekräftigen Schlüssel ein.
Host interface Stellen Sie sicher, dass Sie die SNMP-Schnittstelle auswählen, z. B. die Ihres Switches/Routers.
SNMP OID Verwenden Sie eines der unterstützten Formate, um OID-Wert(e) einzugeben:

walk[OID1,OID2,...] – ruft einen Teilbaum von Werten ab.
Zum Beispiel: walk[1.3.6.1.2.1.2.2.1.2,1.3.6.1.2.1.2.2.1.3].
Diese Option verwendet native SNMP-Bulk-Anfragen (GetBulkRequest-PDUs) asynchron.
Die Timeout-Einstellungen für diesen Datenpunkt können im Formular Datenpunkt-Konfiguration festgelegt werden. Ziehen Sie in Betracht, einen niedrigen Timeout-Wert festzulegen, um lange Verzögerungen zu vermeiden, falls das Gerät nicht erreichbar ist, da bis zu 5 Wiederholungsversuche durchgeführt werden, wenn frühere Versuche ein Timeout erreichen oder fehlschlagen (z. B. kann ein Timeout von 3 Sekunden zu einer Wartezeit von 15 Sekunden führen).
Sie können diesen als Master-Datenpunkt verwenden, mit abhängigen Datenpunkten, die Daten mithilfe der Vorverarbeitung aus dem Master extrahieren.
Es ist möglich, mehrere OIDs in einem einzelnen snmp walk anzugeben, z. B. walk[OID1,OID2,...], um jeweils eine OID asynchron zu verarbeiten.
Wenn die Bulk-Anfrage keine Ergebnisse zurückgibt, wird versucht, ohne Bulk-Anfrage einen einzelnen Datensatz abzurufen.
MIB-Namen werden als Parameter unterstützt; daher liefern walk[1.3.6.1.2.1.2.2.1.2] und walk[ifDescr] dieselbe Ausgabe.
Wenn mehrere OIDs/MIBs angegeben werden, d. h. walk[ifDescr,ifType,ifPhysAddress], dann ist die Ausgabe eine verkettete Liste.
GetBulk-Anfragen werden mit SNMPv2- und v3-Schnittstellen verwendet, GetNext bei SNMPv1-Schnittstellen; die maximale Anzahl von Wiederholungen für Bulk-Anfragen wird auf Schnittstellenebene konfiguriert.
Der Parameter für maximale Wiederholungen beeinflusst Bulk-Anfragen, indem er die maximale Anzahl von OIDs bestimmt, die in einer einzelnen Bulk-Antwort zurückgegeben werden.
Ein höherer Wert führt zu größeren Bulk-Antworten und reduziert die Anzahl der erforderlichen Übertragungen. Allerdings unterstützen möglicherweise nicht alle Geräte sehr hohe Werte, was zu Problemen führen kann.
Dieser Datenpunkt gibt die Ausgabe des Dienstprogramms snmpwalk mit den Parametern -Oe -Ot -On zurück.
Sie können diesen Datenpunkt als Master-Datenpunkt in der SNMP-Erkennung verwenden.

get[OID] – ruft asynchron einen einzelnen Wert ab.
Zum Beispiel: get[1.3.6.1.2.1.31.1.1.1.6.3]
Die Timeout-Einstellungen für diesen Datenpunkt können im Formular Datenpunkt-Konfiguration festgelegt werden. Ziehen Sie in Betracht, einen niedrigen Timeout-Wert festzulegen, um lange Verzögerungen zu vermeiden, falls das Gerät nicht erreichbar ist, da bis zu 5 Wiederholungsversuche durchgeführt werden, wenn frühere Versuche ein Timeout erreichen oder fehlschlagen (z. B. kann ein Timeout von 3 Sekunden zu einer Wartezeit von 15 Sekunden führen).

OID – (veraltet) Geben Sie eine einzelne textuelle oder numerische OID ein, um synchron einen einzelnen Wert abzurufen, optional kombiniert mit anderen Werten.
Zum Beispiel: 1.3.6.1.2.1.31.1.1.1.6.3.
Bei dieser Option entspricht das Timeout der Datenpunkt-Prüfung dem Wert, der in der Konfigurationsdatei des Server festgelegt ist.

Es wird empfohlen, Datenpunkte vom Typ walk[OID] und get[OID] für eine bessere Leistung zu verwenden. Alle Datenpunkte vom Typ walk[OID] und get[OID] werden asynchron ausgeführt – es ist nicht erforderlich, die Antwort auf eine Anfrage abzuwarten, bevor andere Prüfungen gestartet werden. Auch die DNS-Auflösung erfolgt asynchron.
Die maximale Parallelität asynchroner Prüfungen beträgt 1000 (definiert durch MaxConcurrentChecksPerPoller). Die Anzahl asynchroner SNMP-Poller wird durch den Parameter StartSNMPPollers definiert.

Beachten Sie, dass bei Netzwerkverkehrsstatistiken, die mit einer der Methoden zurückgegeben werden, im Reiter Vorverarbeitung ein Schritt Änderung pro Sekunde hinzugefügt werden muss; andernfalls erhalten Sie vom SNMP-Gerät den kumulativen Wert anstelle der letzten Änderung.

Alle obligatorischen Eingabefelder sind mit einem roten Sternchen markiert.

Speichern Sie nun den Datenpunkt und gehen Sie für Ihre SNMP-Daten zu Überwachung > Letzte Daten.

Beispiel 1

Allgemeines Beispiel:

Parameter Beschreibung
OID 1.2.3.45.6.7.8.0 (oder .1.2.3.45.6.7.8.0)
Key <Eindeutige Zeichenfolge, die als Referenz für Auslöser verwendet wird>
Zum Beispiel „my_param“.

Beachten Sie, dass OID entweder in numerischer oder in Zeichenfolgenform angegeben werden kann. In einigen Fällen muss eine Zeichenfolgen-OID jedoch in eine numerische Darstellung umgewandelt werden. Das Dienstprogramm snmpget kann zu diesem Zweck verwendet werden:

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

Beispiel 2

Überwachung der Uptime:

Parameter Beschreibung
OID MIB::sysUpTime.0
Key router.uptime
Value type Float
Units uptime
Preprocessing step: Custom multiplier 0.01

Native SNMP-Bulk-Anfragen

Der Datenpunkt walk[OID1,OID2,...] ermöglicht die Nutzung nativer SNMP-Funktionalität für Bulk-Anfragen (GetBulkRequest-PDUs), die in den SNMP-Versionen 2/3 verfügbar ist.

Eine GetBulk-Anfrage in SNMP führt mehrere GetNext-Anfragen aus und gibt das Ergebnis in einer einzigen Antwort zurück. Dies kann sowohl für reguläre SNMP-Datenpunkte als auch für die SNMP-Erkennung verwendet werden, um Netzwerk-Roundtrips zu minimieren.

Der SNMP-Datenpunkt walk[OID1,OID2,...] kann als Master-Datenpunkt verwendet werden, der Daten in einer Anfrage sammelt, zusammen mit abhängigen Datenpunkten, die die Antwort bei Bedarf mittels Vorverarbeitung auswerten.

Beachten Sie, dass die Verwendung nativer SNMP-Bulk-Anfragen nicht mit der Option zum Kombinieren von SNMP-Anfragen zusammenhängt, was eine Zabbix-eigene Methode zum Zusammenfassen mehrerer SNMP-Anfragen ist (siehe nächsten Abschnitt).

Für SNMP-Bulk-Datenpunkte erfolgen bis zu fünf Wiederholungsversuche, um einen Fehler zu vermeiden, falls eines der Pakete verloren geht. Das Timeout für SNMP-Datenpunkte mit get und walk (festgelegt im Formular Datenpunktkonfiguration) wird für eine gesamte Sitzung gesetzt. Das Timeout wird unabhängig davon angewendet, ob die Daten vollständig abgerufen werden; wenn Daten nur teilweise empfangen werden (zum Beispiel wenn Daten erfolgreich nur für eine von mehreren OIDs erfasst werden), wird der Datenpunkt mit der Meldung „Only partial data received“ nicht unterstützt. Wird das Timeout erreicht, erfolgt ein Wiederholungsversuch, das Timeout wird zurückgesetzt und die letzte Anfrage wird erneut gesendet, sodass die Sitzung ab der letzten Anfrage fortgesetzt werden kann, wenn ein einzelnes Paket verloren geht oder zu spät eintrifft. Erwägen Sie, einen niedrigen Timeout-Wert festzulegen, um lange Verzögerungen zu vermeiden, wenn das Gerät nicht erreichbar ist, da bis zu 5 Wiederholungsversuche durchgeführt werden, wenn frühere Versuche ein Timeout erreichen oder fehlschlagen (z. B. kann ein Timeout von 3 Sekunden zu einer Wartezeit von 15 Sekunden führen).

Interne Funktionsweise der kombinierten Verarbeitung

Zabbix Server und Proxy können SNMP-Geräte mit einer einzigen Anfrage nach mehreren Werten abfragen. Dies betrifft mehrere Typen von SNMP-Datenpunkten:

Alle SNMP-Datenpunkte auf einer einzelnen Schnittstelle mit identischen Parametern werden so eingeplant, dass sie gleichzeitig abgefragt werden. Die ersten beiden Datenpunkt-Typen werden von Pollern stapelweise mit höchstens 128 Datenpunkten verarbeitet, während Low-Level-Discovery-Regeln wie bisher einzeln verarbeitet werden.

Auf niedrigerer Ebene gibt es zwei Arten von Operationen zur Abfrage von Werten: das Abrufen mehrerer angegebener Objekte und das Durchlaufen eines OID-Baums.

Für das „Abrufen“ wird eine GetRequest-PDU mit höchstens 128 Variablenbindungen verwendet. Für das „Durchlaufen“ wird bei SNMPv1 eine GetNextRequest-PDU verwendet, und bei SNMPv2 und SNMPv3 wird GetBulkRequest mit einem Feld „max-repetitions“ von höchstens 128 verwendet.

Daher ergeben sich die Vorteile der kombinierten Verarbeitung für jeden SNMP-Datenpunkt-Typ wie folgt:

  • reguläre SNMP-Datenpunkte profitieren von Verbesserungen beim „Abrufen“;
  • SNMP-Datenpunkte mit dynamischen Indizes profitieren sowohl von Verbesserungen beim „Abrufen“ als auch beim „Durchlaufen“: „Abrufen“ wird zur Indexverifizierung verwendet und „Durchlaufen“ zum Aufbau des Cache;
  • SNMP-Low-Level-Discovery-Regeln profitieren von Verbesserungen beim „Durchlaufen“.

Es gibt jedoch ein technisches Problem: Nicht alle Geräte sind in der Lage, 128 Werte pro Anfrage zurückzugeben. Einige liefern immer eine korrekte Antwort, andere antworten jedoch entweder mit einem Fehler „tooBig(1)“ oder antworten überhaupt nicht mehr, sobald die potenzielle Antwort eine bestimmte Grenze überschreitet.

Um eine optimale Anzahl von Objekten zu finden, die für ein bestimmtes Gerät abgefragt werden kann, verwendet Zabbix die folgende Strategie. Es beginnt vorsichtig mit der Abfrage von 1 Wert in einer Anfrage. Ist dies erfolgreich, werden 2 Werte in einer Anfrage abgefragt. Ist auch dies erfolgreich, werden 3 Werte in einer Anfrage abgefragt, und es wird auf ähnliche Weise fortgefahren, indem die Anzahl der abgefragten Objekte mit 1,5 multipliziert wird, was zu der folgenden Folge von Anfragegrößen führt: 1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 128.

Sobald ein Gerät jedoch keine korrekte Antwort mehr liefert (zum Beispiel bei 42 Variablen), tut Zabbix zwei Dinge.

Erstens halbiert es für den aktuellen Datenpunkt-Stapel die Anzahl der Objekte in einer einzelnen Anfrage und fragt 21 Variablen ab. Wenn das Gerät erreichbar ist, sollte die Abfrage in den allermeisten Fällen funktionieren, da bekannt ist, dass 28 Variablen funktionierten und 21 deutlich darunter liegt. Falls dies jedoch ebenfalls fehlschlägt, greift Zabbix auf die Abfrage einzelner Werte nacheinander zurück. Falls es auch dann noch fehlschlägt, antwortet das Gerät definitiv nicht, und die Anfragegröße ist nicht das Problem.

Zweitens beginnt Zabbix für nachfolgende Datenpunkt-Stapel mit der zuletzt erfolgreichen Anzahl von Variablen (28 in unserem Beispiel) und erhöht die Anfragegrößen dann jeweils um 1, bis die Grenze erreicht ist. Wenn beispielsweise die größte Antwortgröße 32 Variablen beträgt, haben die nachfolgenden Anfragen die Größen 29, 30, 31, 32 und 33. Die letzte Anfrage schlägt fehl, und Zabbix wird nie wieder eine Anfrage der Größe 33 senden. Ab diesem Zeitpunkt fragt Zabbix für dieses Gerät höchstens 32 Variablen ab.

Wenn große Anfragen bei dieser Variablenanzahl fehlschlagen, kann das zwei Ursachen haben. Die genauen Kriterien, die ein Gerät zur Begrenzung der Antwortgröße verwendet, sind nicht bekannt, aber wir versuchen, dies anhand der Anzahl der Variablen anzunähern. Die erste Möglichkeit ist also, dass diese Variablenanzahl im allgemeinen Fall ungefähr an der tatsächlichen Grenze der Antwortgröße des Geräts liegt: Manchmal liegt die Antwort unter der Grenze, manchmal darüber. Die zweite Möglichkeit ist, dass einfach ein UDP-Paket in eine der beiden Richtungen verloren gegangen ist. Aus diesen Gründen reduziert Zabbix bei einer fehlgeschlagenen Abfrage die maximale Anzahl von Variablen, um tiefer in den stabilen Bereich des Geräts zu gelangen, jedoch nur bis zu zwei Mal.

Im obigen Beispiel reduziert Zabbix die Anzahl auf 31, wenn eine Abfrage mit 32 Variablen fehlschlägt. Falls auch dies fehlschlägt, reduziert Zabbix die Anzahl auf 30. Zabbix reduziert die Anzahl jedoch nicht unter 30, da dann angenommen wird, dass weitere Fehler eher auf verlorene UDP-Pakete als auf die Grenze des Geräts zurückzuführen sind.

Wenn ein Gerät kombinierte Anfragen jedoch aus anderen Gründen nicht korrekt verarbeiten kann und die oben beschriebene Heuristik nicht funktioniert, gibt es für jede Schnittstelle die Einstellung „Use combined requests“, mit der kombinierte Anfragen für dieses Gerät deaktiviert werden können.

Wenn kombinierte Anfragen partielle oder fehlerhafte Antworten verursachen, die zu falschen Berechnungen pro Sekunde (Delta) führen (zum Beispiel scheinbare Spitzen in Schnittstellenzählern), deaktivieren Sie Use combined requests für die betroffene Schnittstelle, um separate Abfragen pro Datenpunkt zu erzwingen; dies verhindert häufig falsche Spitzen. Alternativ können Sie asynchrone get[]- oder walk[]-Datenpunkte verwenden, die asynchron ausgeführt werden und nicht dem schnittstellenbezogenen Batching von Use combined requests unterliegen — sie können anstelle älterer synchroner OID-Prüfungen verwendet werden, um Probleme im Zusammenhang mit kombinierten Anfragen zu vermeiden. Achten Sie auf Server-/Proxy-Protokolleinträge ähnlich dem im Abschnitt Overview gezeigten Eintrag, um betroffene Geräte zu identifizieren.

Wenn die Schnittstelle außerdem häufig nicht verfügbar wird, kann es erforderlich sein, den Parameter UnavailableDelay in den Konfigurationsdateien von Zabbix server oder Zabbix proxy zu erhöhen, um die Häufigkeit der Anfragen zu verringern. Datenpunkte können auf „nicht unterstützt“ gesetzt werden, wenn während der Discovery oder bei OID-Walks nur partielle Daten empfangen werden.