Probleme mit eigenem SNMP-Plugin

Hallo,
ich versuche gerade ein Checkmk-Plugin für die Abfrage des externen Temperatursensors bei APC NMC9641 zu schreiben. Die externen UIO-Sensoren werden leider standardmäßig nicht (mehr) erkannt. Ich habe mich bei der Entwicklung an der Doku und dem darin befindlichen “Flintstone”-Beispiel orientiert. Leider stoße ich aktuell auf zwei Probleme:

  • das “print(string_table)” Statement in der parse-Funktion liefert keine Ausgabe
  • ich habe keine Ahnung, wie ich auf den ausgelesenen Temperaturwert in der Check-Funktion zugreifen kann, um diesen weiter auszuwerten und darzustellen.
from .agent_based_api.v1 import register, Result, Service, startswith, contains, SNMPTree, State

def parse_ap9641_temp(string_table):
    print(string_table)
    return {}

def discover_ap9641_temp(section):
    yield Service()

def check_ap9641_temp(section):
    yield Result(state=State.OK, summary="Temperatur: {section[0]}")

register.snmp_section(
    name = "ap9641_temp_config",
    parse_function = parse_ap9641_temp,
    detect = contains(".1.3.6.1.2.1.1.1.0", "AP9641"),
    fetch = SNMPTree(base='.1.3.6.1.4.1.318.1.1.25.1.2.1.6', oids=['1.1'])
)

register.check_plugin(
    name = "ap9641_temp_setup_check",
    sections = ["ap9641_temp_config"],
    service_name = "AP9641 Sensortemperatur",
    discovery_function = discover_ap9641_temp,
    check_function = check_ap9641_temp
)

Vielleicht kann mich jemand auf die geeignete Lösung stoßen. Vorab Danke für die Unterstützung.

MfG

Hallo Micha.

Ich denke deine “detect” funktioniert nicht richtig. Um genauer zu schauen was hier passiert, wäre sie Ausgabe des SNMP Dumps hilfreich.

VG, Christian

Der Artikel setzt Lektüre des Artikels zur Entwicklung Agenten basierter Plugins voraus:

print() funktioniert nur im Debugmodus und wie man numerische Werte weitergibt, steht da auch drin.

Guten Tag und vielen Dank für die Antworten.
Die Abhängigkeit der beiden Doku-Artikel hatte ich so nicht erfasst und mit dem “cmk --debug” Aufruf, zeigt das print auch die string_table mit dem passenden Temperaturwert an. Nach mehrfacher Lektüre der verfügbaren Dokumentationsartikel kann ich den Parameter nun in der Zusammenfassung des Services anzeigen lassen.

Im nächsten Schritt versuche ich mal das Ganze als Metrik zu verarbeiten. Wenn alles läuft, stelle ich noch eine passende Lösung im Thread ein.
Vielen Dank für die Hilfe und generell die umfangreiche Dokumentation :slightly_smiling_face:

MfG