Solution for "No historic metrics recorded but performance data is available. Maybe performance data processing is disabled."

Hallo,
Ich hatte jetzt das Problem, dass ich zu einem Service zusätzlich Performance-Data hinzufügen wollte und anstelle der erhofften Kurven nur die Zeile “No historic metrics recorded but performance data is available. Maybe performance data processing is disabled.” in der Oberfläche auftauchte.

Der Grund dafür ist einfach, dass man im check_info-Block. Dort wo auch der Name der Parsed-, Inventory- und Check-Funktion angegeben wird, da muss auch

“has_perfdata”: True,

hinzugefügt werden. Wenn man dann noch 2-3 Check-Intervalle abwartet, dann kommen die Kurven auch.

Dieser Post enthält keine Fragestellung. Ich fand nur bei google und auch hier keine Lösung dazu und hoffe, dass es dem Nächsten, der sich die Frage stellt, vielleicht hilft.

2 Likes

Hallo anarky,

ich habe ein scheinbar ähnliches Problem, finde aber nicht, wo ich das “has_perfdata” hinzufügen sollte…

Hilfst du (oder jemand anderes) bitte gerne auf die Sprünge?

Danke und Gruß
kohly

Hallo kohly.de
ja, gern!
Also, wenn man einen Check bauen möchte, dann muss man ja einen Agenten auf den Host befördern, der eine Section aufmacht und Daten liefert.

<<<my_check_type>>>
mydata = 1
myotherdata = 2

Dieser Text (also ohne den Header) wird ja dann an den Check weitergegeben, nur eben als 2-Dimenionale Liste an die jeweilige Parse-Funktion.
Dafür sucht CheckMK einfach nach einer Datei in

/opt/omd/sites/master/local/share/check_mk/checks/

wenn da keine ist, dann in den vordefinierten Checks

/opt/omd/sites/master/share/check_mk/checks/

mit genau dem Namen, der in den <<<…>>> eingeschachtelt ist.

Diese Datei ist der Check. Der Check muss dabei einigen Formalien genügen, er muss in Python2 (CheckMK unter v2.0) oder Python3 (CheckMK ab v2.0) geschrieben sein, der Dateiname, darf aber kein .py hinten haben … außer die Section hat das auch.

Die ersten Zeilen des Check-Files müssen

#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-

lauten.

Dann braucht es (mindestens 3 Funktionen)

  • Eine Parsed-Funktion, die von der Section eine zweidimensionale Liste list[lineNo][wordNo] bekommt und die vorformatiert
  • Eine Inventory-Funktion, die die parsed-Datenstruktur der Parsed-Methode bekommt und für jeden Service, der erstellt werden soll, einen Wert zurückgibt (yield)
  • Eine Check-Funktion, die neben dem parsed (und möglichen Params), auch noch einen der Services aus Inventory bekommt und für diesen Service Status, Text und Messwerte zurückgibt.

Das sieht zum Beispiel so hier aus:

def parse_my_check_type(info):
    # some Magic
    return formated_info_as_parsed

def inventory_my_check_type(parsed):
    for service in parsed.keys():
        yield service

def check_my_check_type(item, params, parsed):
    perfdata = [('metricName", numericValue, numericWarnLevel, numericCritLevel), ...]
    # perfdata ist eine Liste von Tupeln, Warn und Crit sind optional (gelbe, rote Linie im Graph)
    return parsed[item][status], parsed[item][outputtext]

Das ist für CheckMK jetzt aber nicht zu gebrauchen. CheckMK kennt den Namen der Methoden nicht und es kann auch mehr geben, theoretisch kann man parsed weglassen … also muss man CheckMK jetzt noch sagen, wie die Funktionen heißen, die es in diesem Check-Plugin benutzen muss.

Also steht am Ende der Check-Datei noch ein sehr wichtiger Block, der sieht in dem Fall hier so aus:

check_info['my_check_type'] = { # Wieder der Check-Name (Section-Bezeichner)
    'parse_function'        : parse_my_check_type,
    'inventory_function'    : inventory_my_check_type,
    'check_function'        : check_my_check_type,
    'service_description'   : 'Anfang des ServiceName %s', # erweitert um item-Name
    'has_perfdata'          : True,
}

Wenn es einen Check gibt, der perfdata verwendet, dann ist die Zeile ganz am Ende wichtig. Nur wenn man in dem Block am Ende

'has_perfdata'          : True

schreibt, genau nur dann, wird CheckMK auch Kurven zeichnen.

Mir persönlich ist nicht klar, warum man darauf verzichten sollte, wenn man keine Performance-Werte erfassen möchte, ich schreibe das (jetzt) einfach immer in jeden Check unten rein und damit trifft mich dieses Problem gar nicht mehr.

Hallo anarky,

danke für deine Ausführungen, jetzt verstehe ich das.

Allerdings trifft das nicht (ganz) mein Problem, ich erhalte die gleiche Meldung bei den Graphen eines ‘local-check’ also nicht eines eigenen Plugins.
Vor v2 wurden die Graphen auch angezeigt, schaue ich in …/pnp4nagios/… nach, sehe ich auch die (alten) Graphen und auch, dass sie (dort) auch weiter geführt werden.

komisch…

Bei Local-Checks gibt es dieses has_perfdata nicht. Das wird einfach vom Agenten aus mittels einer einzelnen Zeile umgesetzt.

Also wenn der Agent, nicht im plugins- sondern im custom- (oder local?) Verzeichnis eine ausführbare Datei hat, dann gibt es für jede Zeile des Outputs einen Service am jeweiligen Host.

Also einfach so:

0      myservice   myvalue=73;80;90  My output text who may contain spaces

wobei vorne 0 (ok), 1 (warn), 2 (crit), dann der Name des Service, dann die Perfdata (metric-name=value,gelbeLinie,roteLinie … bei mehreren Metriken mit | getrennt, alles ohne Leerzeichen und dann nach einem Space der Output-Text kommt.

Das muss so funktionieren, bei mir tut es das. Dass CheckMK 2.x noch hässliche Macken hat, das habe ich gehört, aber noch nicht selbst angesehen, ich bin noch bei <2.0 und da funktioniert das genau so. Und ich meine, dass sich das bei CheckMK2 nicht ändern sollte.


Ein Hinweis von mir:
Local-Checks lassen sich in aller Regel sehr viel schneller entwickeln als “richtige” Checks, aber die mangelnde Konfigurierbarkeit (Schwellen, Pfade auf dem Host) etc. fehlt dann schnell, während der Check läuft. Ich habe bei mir nahezu alle Local-Checks nach und nach auf “richtige” Checks umstellen müssen, einfach, weil die Entscheidung, ob ein Zustand gut oder schlecht ist, auf dem Host nur sehr unhandlich getroffen werden kann.
Meiner bescheidenen Meinung nach, sollte ein Agent, stumpf Fakten sammeln, an Pfaden, die ihm die Bakery in die ini geschrieben hat und auf dem CheckMK-Server sollte dann die Bewertung dessen stattfinden. Das ist sauberer und macht einen Check sehr viel nachhaltig nutzbarer.
Wenn Local-Checks als buggen sollten, dann ist das ja eigentlich ein guter Anlass, dass man das umstellt.

Ist deine Version zufällig eine 2.0.0p2 Raw Edition?
Wenn ja bist du von dem Problem betroffen welches hier erörtert wurde.
https://forum.checkmk.com/t/bug-keine-graphen-in-2-0-0p2-cre-fur-services-mit-leerzeichen-im-namen/24117/13

hallo andreas,

ich weiß deine bemühungen sehr zu schätzen!

der bug trifft nicht, den workaround habe ich bereits angewendet.
der local check an sich ist es auch nicht, da einer der graphen des gleichen local checks auch angezeigt wird, sechs andere dagegen nicht.

ich vermute den fehler wo anders, weiss aber nur noch nicht wo :wink:

vlt. hat es damit zu tun, dass ich für die sechs ‘fehlerhaften’ services einen cluster erstellt habe, in dem eben der eine funktionierende nicht enthalten ist. :man_shrugging:

alle graphen bis auf diese ‘geclusterten’ sechs werden ja auch korrekt angezeigt…

Schaun die Performance Daten bei allen identisch aus?
Werden für die geclusterten Graphen RRD Files erzeugt?

cool, dass du da mit dran bleibst! :+1:

die daten sehen für mich sonst korrekt aus.
für die geclusterten services finde ich aktuelle rrd files die mir auch unter /pnp4nagios/ im ‘alten layout’ angezeigt werden :thinking:

Wie meinst das - bei dir läuft doch eine v2 oder?
Kannst mal nen kleinen Screenshot posten wie die RRD’s aussehen?

ja 2.0.0p2. (von 1.6.0p22 über 2.0.0p1)
https://sitename/pnp4nagios/ ist aber nach wie vor vorhanden.
darunter finde ich den ‘cluster host’ mit seinen services und sehe, dass die graphen aktuell sind.
neu:


alt:

jetzt, wo du so fragst: ich hatte ein eigenes pnp-template erstellt, da ich für temperaturen/etc. auch min. im graphen stehen haben wollte…ich räum das mal kurz weg.

nein, die templates waren es leider auch nicht.

Nach einem 2er Update kann kein PNP4Nagios Webfrontend mehr funktionieren.
Außer man hat selbst mal was gebaut.
Relevant wären wirklich wie die RRD’s aussehen von Namensgebung usw.

oha. komisch, ich bin sicher, dass ich daran nichts verändert habe.
die installation kommt schon von omd 1.x und wurde über die jahre (1.3>1.4.x>1.5>1.6>2.0) aktualisiert.

OMD[kohly]:~$ ls -la var/pnp4nagios/perfdata/sensors.chaos.inc/*
-rw-rw-r-- 1 kohly kohly 5347 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK.xml
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:48 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_children_system_time.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:34 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_children_user_time.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:05 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_cmk_time_agent.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:38 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_execution_time.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:44 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_system_time.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:36 var/pnp4nagios/perfdata/sensors.chaos.inc/Check_MK_user_time.rrd
-rw-rw-r-- 1 kohly kohly 3281 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_benzinpreis.xml
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:50 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_benzinpreis_diesel.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:50 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_benzinpreis_e10.rrd
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:50 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_benzinpreis_e5.rrd
-rw-rw-r-- 1 kohly kohly 1802 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_dwd_wbi.xml
-rw-r–r-- 1 kohly kohly 384952 Apr 16 17:50 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_dwd_wbi_wbi.rrd
-rw-r–r-- 1 kohly kohly 384960 Apr 16 17:50 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_light_ext.rrd
-rw-rw-r-- 1 kohly kohly 1949 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_light_ext.xml
-rw-r–r-- 1 kohly kohly 384960 Apr 16 17:28 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_rh_ext.rrd
-rw-rw-r-- 1 kohly kohly 1968 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_rh_ext.xml
-rw-r–r-- 1 kohly kohly 384960 Apr 16 17:57 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_temp_ext.rrd
-rw-rw-r-- 1 kohly kohly 1992 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_temp_ext.xml
-rw-r–r-- 1 kohly kohly 384960 Apr 16 17:14 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_temp_int.rrd
-rw-rw-r-- 1 kohly kohly 1995 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_mmlx_temp_int.xml
-rw-r–r-- 1 kohly kohly 325672 Apr 16 17:23 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_vblx_rh_int.rrd
-rw-rw-r-- 1 kohly kohly 1962 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_vblx_rh_int.xml
-rw-r–r-- 1 kohly kohly 384960 Apr 16 17:40 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_vblx_temp_int.rrd
-rw-rw-r-- 1 kohly kohly 1992 Apr 16 18:02 var/pnp4nagios/perfdata/sensors.chaos.inc/sensor_tf_vblx_temp_int.xml

was kann ich bitte sonst noch hilfreiches liefern?

Also bei “normalen” CheckMK-Checks kann man nicht einfach Clustern, da muss zu dem

has_perfdata: True

parallel noch ein

'node_info'               : True,

hin. Stichwort: Clusterfähigkeit

Das ändert die Verschachtelungstiefe und so kommt man nachher auch tatsächlich im Cluster an die einzelnen Werte ran.

Ich möchte da jetzt nichts behaupten, dass ich nicht weiß, aber ich kann mir nicht vorstellen, dass man Local-Checks überhaupt clusterfähig machen kann. Also in der Form, dass der Service auf 4 Hosts sein kann und immer auf 3en Unknown ist und auf einem läuft, das wahrscheinlich schon, aber nicht so, dass da was sinnvolles passiert, wenn es den Service mehrfach parallel laufend geben kann.

Erste seltsame Sache
Der erste Graph mit dem Namen - sensor:tf:hv03:temp:int
hat unten gar keine RRD Files - komisch
Zeigt aber einen Graph an und alle anderen Graphen fehlen.
Gibt es den Graph auch in deinem PNP Interface?

Zu dem Thema Cluster und Local Checks

Genau sinnvoll clustern kann man die nicht. Mann muss sein Script so gestalten, dass immer nur ein Cluster Member nen Output produziert und dann wenn gar nix zurück kommt gibt es halt nen Fehler. Selbst mit normalen Checks ist ohne extra Programmierung keine Auswertung möglich welche andere Sachen wie - geht auf einem Node und geht nicht auf dem anderen Node auswertet.

es hatte ja bis vor v2 funktioniert.
im ‘cluster’ - also bei den services - kommt ja auch alles an.
lediglich die graphen werden nicht angezeigt.

der graph von ‘hv03’ ist nicht im cluster. der wird angezeigt.
die anderen ‘sensor:tf:…’ graphen fehlen.
alle werden im pnp interface angezeigt, genau so wie die aller anderen services auch aller anderen hosts.
ich verstehe es halt einfach nicht…

Ich sags gern nochmal - dein erster Screenshot zeigt einen host “kohly.sensors.chaos.inc” und der zweite Screenshot den host “sensors.chaos.inc”.
Die Liste der RRD Dateien ist auch vom Host “sensors.chaos.inc”. Dort gibt es wie gesagt die RRD vom Graph “sensor:tf:hv03:temp:int” nicht - wäre ja ok wenn der Graph wie du sagst nicht geclustert ist.
Schau doch bitte mal in den Ordner “~/var/pnp4nagios/perfdata/kohly.sensors.chaos.inc/” Was ist dort an RRD vorhanden.
Ich denke mal dort sind auch für deine geclusterten Services schon pseudo RRD / XML Files vorhanden. Da scheinbar zu einem Zeitpunkt X mal kurz die Clusterzuordnung nicht da war.
Wäre eine Vermutung.

guten morgen andreas,

du darfst natürlich gerne dinge ‘nochmal sagen’, ich nehme aber jetzt bitte die rethorik da raus, die hilft nicht weiter.

in dem screenshot steht nicht “kohly.sensors.chaos.inc” sondern “kohly, sensors.chaos.inc” (“sitename, hostname”). es gibt keinen host kohly.sensors.chaos.inc und demgemäß auch keinen solchen ordner.

trotzdem danke für deine anregungen, leider trifft aber nichts davon mein problem.
die gleiche fehlermeldung muss nicht immer die selbe ursache haben.

ich hoffe nun darauf, dass auch andere dieses problem haben und der fehler dann entsprechend als solcher erkannt und gelöst wird.

vg
kohly

mit werk #12298 wird der oben beschriebene fehler in livestatus.o anders.
die meldung lautet nun:

Cannot create graph

Cannot get RRD data for sensors.chaos.inc/sensor:tf:mmlx:light:ext/lux_ext

was wohl an der falschen substituition des zeichen “:” liegt. im dateisystem wird mit _ ersetzt.

vlt. wird das ja irgendwann auch gefixt.

Siehe meine Antwort oben - die Chance besteht, dass dies nun auch geht.

Ok mein Fehler hab das beim lesen nicht genau erkannt gehabt.

Was ich eigentlich sagen wollte ist halt wenn kein RRD da ist wird der Graph halt auch nicht angezeigt.
Und deshalb hab ich da gemeint in deiner Fileliste war der eine Graph nicht vorhanden welcher aber im CMK Webinterface angezeigt wurde.

Ich gehe mal davon aus, dass deine Installation immer eine RAW war oder?

Im Endeffekt kann es auch an der jetzt noch fehlenden Ersetzung liegen.
Damit müssten aber die Graphen mit einer 2.0.0p1 richtig angezeigt werden da der Fehler erst in p2 “eingeführt” wurde.
Wenn mit einer p1 auch ein Fehler kommt dann ist es noch etwas anderes was kaputt ist.
Wäre interessant falls das auch mit p1 ist.