SNMP check-plugin für secunet-Geräte

Hallo werte Mitstreiter!
Ich möchte gerne Geräte der Firma Secunet mittels SNMP abfragen, allerdings über “den Standard” hinaus. Bislang kann ich Services wie Interfaces, CPU-Load, Memory “discovern” und überwachen. Die Geräte liefern jedoch sehr viel mehr.
Ich habe mich immer gesträubt, ein eigenes check-plugin zu erstellen, nun muss ich mich dann doch damit beschäftigen :wink:
So grundsätzlich verstehe ich, wie das funktioniert, was mir allerdings fehlt, ist wohl ein Plan, was ich alles sehen will.
Wenn ich in die herstellerspezifische MIB schaue, sind es so grob 250 Objekte, die da geliefert werden.

Wie gehe ich da jetzt am sinnvollsten vor, um erst einmal “ALLE” Objekte zu discovern und Services draus zu machen?

Einzig sinnvolle Variante ist, vorher entscheiden was man wissen will. Erstmal alles discovern geht leider nicht.

Dazu müsste man ja auch wissen, was der Hersteller sich so dabei dachte… :joy:

Wie sähe denn ein detect und fetch für alles ab einer base-OID aus?
In etwa so?

 snmp_section_northwind_setup = SimpleSNMPSection(
    name = "northwind_base_config",
    parse_function = parse_northwind,
    detect = startswith(".1.3.6.1.2.1.1.1.0", "Northwind"),
    fetch = SNMPTree(base='.1.3.6.1.2.1.1', oids=['4.0' , '5.0']),
)

Das steht üblicherweise in der MIB, die der Hersteller mitliefern sollte.

1 Like

…das mit den Herstellerspezifika klappt schon einigermaßen…
Wie mache ich das denn mit Dingen aus anderen MIBs?
Das Gerät liefert z.B. was aus RFC1213 zum Thema Routing.
Wie sage ich in der Sektion Discovery, dass zum Beispiel pro Route ein Service angelegt wird?

Deine Discovery-Funktion bekommt ja ein Array mit den Daten, die Du in der fetch Definition angefordert hast. Die wertest Du dann aus und machst ein yield für jeden Service den Du hinzugefügt haben möchtest. Wie man dabei den Servicenamen definiert schaust Du Dir am einfachsten in vorhandenen Checks an. Überhaupt kann man sich sehr viel an Infos einfach aus vorhandenen ähnlichen Checks ziehen.

Alles Discovern mit einem externen SNMP runner (also ohne Checkmk) ist exakt der richtige Weg.

Dann geht es auf die Suche, was für Werte da geliefert werden und der Bewertung, welche OIDs von Interesse sind.

Allgemein gesprochen, sind im private tree oftmals hunderte Werte hinterlegt, die jedoch sehr oft mehr Noise darstellen. Mit einem MIB File zu arbeiten ist ein Weg, hier hat es sich doch nach X Jahren gezeigt, dass die MIBs nicht immer zuverlässig sind. Bedeutet, im Zweifel den Hersteller fragen.

Ok, nun stellen Sie sich vor, Sie haben alle Werte von Interesse … dann kommt noch die Verbindungsthematik hinzu, manche Geräte sind da recht eigen.

Den Fall mit SNMP und custom Werte habe ich bereits dutzende male bei Kunden implementiert, inklusive Schwellwerte, Dashboards und gemeinsames Einsteigen in SNMP.