How is the state created in Checkmk ( workflow )

Hi all,

at the moment we have an issue with elasticsearch where the status send by elasticsearch is not used for the state of the service ( elasticsearch health check ). We have engaged the support and they can reproduce it and work on a fix which is great.

However, i want to understand how the state is being created and how to debug this my own.
I see there is a special agent at
share/check_mk/agents/special/agent_elasticsearch
which loads the main function from
/omd/versions/2.0.0p26.cee/lib/python3/cmk/special_agents/agent_elasticsearch.py

This is connecting to the elasticsearch node and fetches the information which works well.
I see also a check at
share/check_mk/checks/elasticsearch_cluster_health
which seems to parse the fetched output and set the state ( maybe :slight_smile: ).
and finally i found at file called
/omd/versions/2.0.0p26.cee/lib/check_mk/gui/plugins/wato/check_parameters/elasticsearch_cluster_health.py.

But actually i do not get how all this works together so if someone provide me a very basic overview or an URL to read would be great ( gerne auch auf Deutsch :slight_smile: )

Thanks in advance
Best
Andi

Hallo,
hast Du schon im Handbuch geschaut?
https://docs.checkmk.com/latest/de/devel_check_plugins.html

Karl

Hallo Karl,

das ist nen guter Tipp das wird mir das sicherlich erklären.
Vielen Dank.

Tatsächlich habe ich viel gelernt und es macht Spaß aber ich sehe auch hier leider nicht so recht wie der Workflow ist.

CheckMK fetched den Agentoutput oder triggert den special_agent und wie geht es dann weiter?
Welche Dateien werde wie aufgerufen?

Nachdem das Elasticsearch Problem gefixt ist habe ich jetzt das nächste Problem.
Wir haben Prometheus zu laufen und es gibt nen entsprechenden Check:
lib/check_mk/base/plugins/agent_based/prometheus_build.py

Die entsprechende Information wird auch vom Host ĂĽbergeben ( oder vom Server per API geholt so genau sehe ich das nicht ).

<<<prometheus_build:sep(0)>>>
{“scrape_target”: {“targets_number”: XXX, “down_targets”: []}, “version”: [“X.XX.X”], “storage_retention”: “30d”, “reload_config_status”: true}
Aber der Service taucht nicht im Host auf in der GUI. Ist jetzt nichts dramatisches aber ich wĂĽrde das gern debuggen um zu lernen finde aber den Ansatz nicht so ganz.

Kurz der Ablauf wie die Daten verarbeitet werden.

  • Special Agent Aufruf → holt die Rohdaten vom ES
  • Rohdaten werden als Agent Output dem CheckMK zur VerfĂĽgung gestellt
  • CheckMK parsed den Output → hierbei sind erstmal nur die Zeilen relevant welche mit “<<<” anfangen diese legen fest fĂĽr welches Check Plugin die Daten sind
  • Im entsprechenden Check Plugin gibt es meist ein Parse Funktion welche die Daten dann aufbereitet
  • Die aufbereiteten Daten gehen dann entweder an die Discovery Funktion (wenn neue Services gesucht werden) oder an die Check Funktion wenn dann der Status festgelegt werden soll
3 Likes

Hallo
vielen Dank für die Erklärung das bringt mich schon mal ein Stück weiter.

Leider verstehe ich aber nicht wie sich das dann weiter verhält.
Wie es scheint wird jeder check in
~/lib/check_mk/base/plugins/agent_based/
aufgerufen. Wie wird nun geprüft ob der Check anwendbar ist? Ich hätte gedacht das erfolgt durch die Auswertung vom “name” unter register.check_plugin bzw. register.agent_section aber zumindest für den prometheus_build Check scheint das nicht zu funtionieren.
Obwohl die Section vorhanden ist
<<<prometheus_build:sep(0)>>> ( Was bedeuted denn das “:sep(0)” oder :chached )?
{“scrape_target”: {“targets_number”: XXX, “down_targets”: []}, “version”: [“X.XX.X”], “storage_retention”: “30d”, “reload_config_status”: true}
Wird keine der Funktionen ( parse, check oder discovery ) aufgerufen .
Ich bin mir aber auch ehrlich gesagt nicht sicher ob dies die richtige Stelle für den Check ist da die Information eher vom special Agent kommt und nicht vom checkmk_agent selbst. Lokal fehlt diese section nämlich.

€
Also tatsächlich funtioniert alles wie es soll. Der Check wurde lediglich deaktiviert und deswegen gab es kein Ergebnis in CheckMK :smiley:

Dennoch, der Check unter ~/lib/check_mk/base/plugins/agent_based/prometheus_build.py
wird anscheinend gar nicht aufgerufen. Ich habe in den Funktionen und 1 außerhalb jeweils nen “open(…).write(…)” eingetragen und lediglich das was nicht innerhalb einer Funktion steht wird aufgerufen bzw. diese Datei existiert dann.

Nun frag ich mich welches Plugin hier nun genutzt wird um den Service zu erstellen?

€€
Es ist doch der check
~/lib/check_mk/base/plugins/agent_based/prometheus_build.py
ich habe das nur falsch angefangen.
Sorry for the noise und Danke fĂĽr die Hilfe

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.