VMware ESXi mit eigenem Check

Hallo zusammen,
ich habe da eine Frage… ich monitore eine VMware ESXi Server und es funktioniert auch alles.
Nun möchte ich mit einem eigenem Check eine Scriptsicherung auf dem ESXi Server überprüfen und komme so gar nicht weiter. Mein Ansatz war, dass ich diesen Check über einen SSH Zugriff realisiere.
Der SSH Zugriff funkionert genauso wie ich mir das vorstelle. D.h., dass wenn ich eine SSH Verbindung zu dem Server aufbaue, das Ergebnis von meinem Script bekomme. Zu Testzwecken, habe ich die Ausgabe so angebpasst, dass folgende Antwort kommt:
OMD[testSite]:~$ ssh -T -oStrictHostKeyChecking=no root@192.168.xx.xx
0 Hallo-Test - text1 text2
Gemäß einer Anleitung für eigene Checks habe ich unter Host Tags einen Auxiliary tag und eine Host tag group angelegt. Nun habe ich einfach einen Host mit einer IP angelegt und bei Check_MK Agent - no agent hinterlegt. Unter Host Tags habe ich die Host Tag group angegeben. Und schließich habe ich eine Rule erstellt, die den SSH Aufruf erledigt.

Was mache ich falsch ?? :face_with_raised_eyebrow:
Auch verstehe ich das Zusammenspiel von diesen Tags nicht ?

Kann mir jemand weiter helfen ?
Besten Dank schon mal im voraus …

Hallo,

die Tags sind dafür da um gewisse Typen an Hosts zu gruppieren und diese Tags wieder zu verwenden um Regeln, für die Überwachung oder Notifizierung, daran zu binden.

In deinem Fall würdest du ein Tag anlegen, der sagt muss den Check mit dem Script ausführen und deine Rule würde ensprechend auf diese Tag eingeschränkt laufen. Das heißt, jeden Host den du neu anlegst und dieses Tag zuweist, würde automatisch auch dieser Check ausgeführt.

Welche Anleitung hast du verwendet. Ich kann von deiner Beschreibung nicht ganz nachvollziehen, was du nun wo angelegt hast.

Hi Tosch
gundlegend ging es hiermit los: https://checkmk.de/cms_localchecks.html
und hiermit
https://checkmk.de/cms_datasource_programs.html
Für die SSH Kommunikation habe ich folgende Seite hinzugezogen (hat schon für einen Mac funktioniert) https://forum.checkmk.com/t/check-mk-deutsch-fwd-check-mk-agent-mac-osx-10-11/2476/3

Also:
Ich habe einen Auxiliary tag hinzugefügt: ID backup_esxi_check Title Backup Check (SSH)
dann habe ich eine Host tag group hinzugefügt: Internal ID backup_esxi_check Title Backup Check TG (SSH), “Choices” mit der Tag ID backup_esxi_ssh_check Description check ESX Backup (ssh), Auxiliary Tag Backup Check (SSH)

Danach habe ich unter Host & Service Parameters -> Individual program call instead of agent access eine Rule erstellt, die in dem Folder des Hosts liegt:
Description Check ESXi Backup
Command line to execute ssh -T -oStrictHostKeyChecking=no root@192.168.xx.xx
Folder Linux Server
Host Tags Backup Check TG (SSH)
Explicit hosts -> Specifiy explicit host names ->

Mir wird immer nur ein “ping” Check angezeigt und sonst nix …

Okay,

ich glaube so tief müssen wir gar nicht. Ich denke dein Fehler ist die falsche Rule. Du hast an dieser Stelle kein Datasource Programm erstellt, sondern einen Check. Du müsstest deine Kommandozeile in der Rule Classical active and passive Monitoring checks angeben. Datasources liefern einen Output analog des checkmk Agenten zurück, du gibst aber ein einzelnes Check Ergebnis. Ich denke, anschließend sollte der Check als neuer Service an deinen Hosts auftauchen. Ein Discovern ist nicht nötig, nur das Aktivieren der Änderungen.

muss ich die Host Group und Auxiliary Tags weiterhin angeben ?

An der Stelle, wenn du in deinem Ordner nur die Hosts hast, für die der Check gelten soll, brauchst du die Tags weder in der Rule noch auf deinem Host. Die Rule solltest du dann in den entsprechenden Ornder (Folder Linux Server) legen.

Auxiliary tags brauchst du auch nur, wenn du so etwas wie Tag-Gruppen anlegen willst, also eine Regel auf mehr als eine Wert eines Tags anwenden willst.

Super :+1: funktioniert …
Hab zwar noch ein kleines Problem mit dem mehrzeiligen Status, aber nu wird der Check ausgeführt.

Vielen Dank

eine Frage habe ich doch noch.
Kann es sein, dass das erfolgreiche Ausführen des SSH Kommandos dafür sorgt, dass der Check immer OK ist ? Denn, egal was das Script als Status (0,1,2) zurück gibt. Der Chek bleibt auf OK …

Nein eigentlich nicht.

Habe das eben mal fix ausprobiert:

simon@Simon-PC:~$ ssh docker false
simon@Simon-PC:~$ echo $?
1
simon@Simon-PC:~$ ssh docker true
simon@Simon-PC:~$ echo $?
0
simon@Simon-PC:~$ ssh docker exit 3
simon@Simon-PC:~$ echo $?
3

Ergo: check mal dein Skript

ähhhhhm ??? kopfkratz

Ich rufe nur die SSH Verbindung auf. Über den eingetragenen Schlüssel und dem command="/pfad/script" in der authorized_keys wird das Script aufgerufen.
Das Script gibt die Werte in der Form “Status Name_des_Checks - Detaillierte Informationen” zurück.
Ich kann auch folgende Strings zurückgeben (was ich einfach mit einem echo probiert habe).
0 Test - das war ein Test
oder
1 Test - das war ein Test
oder
2 Test - das war ein Test
Egal was als Status (erster Wert) zurückkommt. Der Check bleibt “grün” …
Lt. der Anleitung (siehe hier) soll das Script ja genau diese Werte erzeugen und zurückgeben.

Dein Script ist noch als Datasource in Benutzung oder - ich kann der Diskussion vorher nicht ganz folgen :slight_smile:

Da du “local Checks” erzeugst muss bevor deine Zeile ausgegeben wird auch noch der Header für Local Checks kommen.
Also einfach noch eine Zeile davor ausgeben lassen mit dem Inhalt

<<<local>>>

Dann sollten deine Checks auch ordentlich funktionieren.

Es wäre vielleicht noch gut zu sehen wie der komplette Output deines “Special Agents” aussieht.

Hallo Andreas,
ich versuche es zu erklären:
Ein aktive Datensicherung erzeugt ein “relativ” komplexes Logfile. Da diese Datensicherung Script gesteuert ist würde ich dies gerne über Checkmk überprüfen lassen.
Was und wie ich das tun muss … mhhh. Ich habe recherchiert und gelesen und bin auf dem Punkt gekommen, dass dies über eine SSH Abfrage wohl am besten geht, da es sich um einen ESXi Server ohne vCenter handelt.
Das Script erzeugt, lokal aufgerufen folgenden Output:

0 ESXi-Datensicherung - Status
Status letzte Sicherung   : 2020-04-24 20:38:59  Final status: All VMs backed up OK!
Letzer Sicherungstyp      : ACTIVE (auto).
Gesamt Sicherungsdauer ca.: 3 Stunde(n) und 8 Minuten
Naechste Sicherung geplant: 17:30 Uhr

Da für lokale Checks ja auch mehrzeilige Ausgaben möglich sind. Das Script baut sich diese Informationen aus den Logfiles zusammen.

Nun meine Frage … bin ich auf dem richtigen Weg oder irgendwann falsch abgebogen?
Muss die Ausgabe
<<<local>>>
als separate Ausgabe eingebaut werden oder in die gleiche Zeile ?

Danke für den Hinweis … nun wird zumindest der Returncode richtig interpretiert.
Aber nun gibt es keine mehrzeilige Ausgabe mehr …

Bei dem SSH Aufruf bekomme ich folgendes zurück:
OMD[testSite]:~$ ssh root@192.168.xx.xx

<<<local>>>
 0 ESXi-Datensicherung - Status
 Status letzte Sicherung   : 2020-04-24 20:38:59  Final status: All VMs backed up OK!
Letzer Sicherungstyp      : ACTIVE (auto).
Gesamt Sicherungsdauer ca.: 3 Stunde(n) und 8 Minuten
Naechste Sicherung geplant: 17:30 Uhr
Connection to 192.168.70.9 closed.

Prüfe ich es über cmk bekomme ich folgende Ausgabe:

OMD[testSite]:~$ cmk -nv --debug --checks=local esx
Check_MK version 1.5.0p23
+ FETCHING DATA
 [agent] Execute data source
 [piggyback] Execute data source
ESXi-Datensicherung  OK - Status
Sicherung            UNKN - Invalid performance data geplant: in local check output Naechste Sicherung geplant: 17:30 Uhr(?)
Sicherungsdauer      UNKN - Invalid performance data ca.: in local check output Gesamt Sicherungsdauer ca.: 3 Stunde(n) und 8 Minuten(?)
Sicherungstyp        UNKN - Invalid performance data : in local check output Letzer Sicherungstyp : ACTIVE (auto).(?)
letzte               UNKN - Invalid performance data Sicherung in local check output Status letzte Sicherung : 2020-04-24 20:38:59 Final status: All VMs backed up OK!(?)
OK - [agent] Version: unknown, OS: unknown, execution time 7.3 sec | execution_time=7.309 user_time=0.010 system_time=0.010 children_user_time=0.000 children_system_time=0.000 cmk_time_ds=7.290 cmk_time_agent=0.001

Das echo Kommando ist wie folgt aufgebaut:

echo -e "<<<local>>>\\n $Status ESXi-Datensicherung - Status\\n $StatusSicherung\\n$SicherungsTyp\\n$SicherungsDauer\\n$SicherungsIntervall"

Komisch, dass die Ausgabe über SSH sauber aussieht, aber im Checkmk dann gesplittet wird. Oder muss dem Checkmk explizit der Zeilenumbruch mit \n im Text mit gegeben werden?

Das Problem ist das erste “\n” nach “<<>>” muss ein echter Zeilenumbruch sein und die folgenden dürfen nur als Steuerzeichen vorhanden sein.
Probier mal alle anderen “\n” durch “\\n” zu ersetzen.
Ich hab das jetzt nicht probiert aber ein Versuch kostet ja nix.

Funktioniert nicht wirklich, habe nun diverse Kombinationen der Maskierung durch. Er weigert sich standhaft.

Mir ist aufgefallen, dass in der Anleitung siehe hier die Ausgabe in einer Zeile steht. Kann es sein, dass checkmk nur einen String haben will ? Und die Zeilenumbrüche anhand der Maskierung selber setzt ?? Wäre schon ein schräges Verhalten, aber denkbar …oder ??

ich bleib dran und berichte, viellicht gibt es ja jemanden mit dem gleichen Problem oder Fragestellung.

Davon würd ich erstmal ausgehen, wenn die Doku das schon so klar sagt: “Das Skript muss so konstruiert sein, dass es pro Check eine Statuszeile ausgibt” :wink:

Das ist ja auch so richtig aber in dem Fall hier soll ja ein Check mit einer Multiline ausgegeben werden.
Dabei ist halt wichtig, dass innerhalb der Ausgabe der Zeilenumbruch nicht “echt” ist sondern noch maskiert ist.
Der erste Zeilenumbruch nach dem <<<local>>> muss aber “echt” sein, da hier wirklich eine neue Zeile anfängt. Ich mache dies im Normalfall halt selber in den Scripten. Wäre vielleicht auch hier besser anstatt direkt den SSH Aufruf als “Special Agent” zu benutzen lieber ein kleines Wrapper Script schreiben welches die Ausgaben ordentlich weiter reicht.

1 Like

Ich finde den Ansatz mit dem Special Agent nicht schlecht, ein wenig mehr Aufwand, aber der Output kann besser verarbeitet werden.

… erstmal allen Mitstreitern “vielen Dank” für die Hinweise und Ideen.
Das Problem ist gelöst und war dann doch simpler als vermutet. Ich hatte mir immer wieder den Kopf über “Entwertungen von Escape Seq.” gemacht habe und immer wieder ähnliche, aber unbrauchbare Ergebnisse erzielt… mit ein bisschen Abstand kommen einem doch die besten Ideen.

Nun zur Auflösung
Die Konfiguration als “Datasource Programm → Individual program call instead of agent access” habe ich belassen. Die Ausgabe war ja auch (fast) ok. Nach einem Blick in die echo man-page habe ich eine kleine Änderung vorgenommen:

  • statt echo -eecho -en
  • jeweils ein \ zum \n hinzugefügt

Ausgabe Befehl

Ausgabe checkmk

:v: :+1: :v: :slightly_smiling_face:

Es fehlte lediglich der Schalter “n” und ein weiterer \ für die korrekte Ausgabe.

Auszug aus der echo man-page
-n
do not output the trailing newline

Sollte jemand weitere Informationen gebrauchen können, schickt mir einfach eine Nachricht.
Also… nochmal vielen Dank

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.