pixel
Select Page

check_by_ssh mit Icinga 2

by | Mar 21, 2016 | Icinga

tips and tricksAb und zu stehe ich vor dem Problem, dass ich auf einem zu überwachenden System den Icinga 2 Agent nicht benutzen kann.
Anstatt irgendwie das alte (und teils unsichere) NRPE zu benutzen, greife ich dann oft gerne auf check_by_ssh zurück.
Ein Remote-Check funktioniert relativ einfach:

.../check_by_ssh -H web1.example.com -l monitoring -i /etc/icinga2/secure/id_rsa -C '/usr/lib/nagios/plugins/check_users -w 3 -c 5'

Wie man an der Kommandozeile erahnen kann, rufen wir hier einfach per SSH ein Nagios Plugin auf.
Nun habe ich in der Icinga 2 Welt den Vorteil, dass ich saubere Kommandozeilen bauen kann, d.h. Icinga 2 kümmert sich darum, einen Befehl zu bauen, in dem alle Parameter sauber formatiert, und auch “escaped” sind.
Das by_ssh CheckCommand in der Icinga 2 ITL bietet ein kleines Hilfsmittel dafür an, hier ein einfacher Service als Beispiel:

apply Service "users" {
  import "generic-service"
  check_command = "by_ssh"
  vars.users_wgreater = 3
  vars.users_cgreater = 5
  vars.by_ssh_command = [ "/usr/lib/nagios/plugins/check_users" ]
  vars.by_ssh_arguments = {
    "-w" = "$users_wgreater$"
    "-c" = "$users_cgreater$"
  }
  // assign where ...
}

Wie man am Syntax vielleicht erkennen kann, funktioniert dies hier ähnlich wie die Definition von CheckCommands. Nur eben als Kommando in einem Kommando. Innerhalb vom CheckCommand by_ssh wird hier eine kleine Kommandozeile generiert, in der auch Macros aufgelöst werden.
Nachdem Icinga 2 Konfiguration fast wie eine kleine Programmiersprache ist, kann ich auch einfach vom fertigen CheckCommand aus der ITL die Definitionen kopieren:

apply Service "users" {
  // ...
  check_command = "by_ssh"
  vars.by_ssh_command = {{ get_check_command("users").command }}
  vars.by_ssh_arguments = {{ get_check_command("users").arguments }}
  // ...
}

Wenn ich es meinen Usern noch einfacher machen will kann man dies sogar per Template lösen:

template Service "ssh-service" {
  import "generic-service"
  // "save" original command name, and replace it
  vars.original_check_command = check_command
  check_command = "by_ssh"
  // these get evaluated at runtime
  vars.by_ssh_command = {{ get_check_command(service.vars.original_check_command).command }}
  vars.by_ssh_arguments = {{ get_check_command(service.vars.original_check_command).arguments }}
}

Der eigentliche Service bleibt dabei sehr übersichtlich, hier kommt es nur auf die Reihenfolge an, das check_command muss vor dem import gesetzt sein.

apply Service "users" {
  // ...
  check_command = "users"
  import "ssh-service"
  vars.users_wgreater = 3
  vars.users_cgreater = 5
  // ...
}

Über die Icinga 2 API kann ich gut sehen welches Kommando ausgeführt wird:

$ ICINGA2_API_PASSWORD="geheim" /usr/sbin/icinga2 console --connect https://root@localhost:5665/
=> get_service("web1.example.com", "users").last_check_result.command
[ "/usr/lib/nagios/plugins/check_by_ssh", "-C", "'/usr/lib/nagios/plugins/check_users' '-c' '4' '-w' '2'", "-H", "1.2.3.4" ]

Viel Spaß beim Ausprobieren!
Beitragsbild von Owen Moore (CC-BY-2.0)

More posts on the topicIcinga

ServiceNow Data Asset Import mit dem Director

Hallo Liebe Leser dieses Blogs, nach einer weile der Abwesenheit hab ich heute die Freude ihnen etwas näher bringen zu dürfen. Da viele unserer Kunden inzwischen auch ServiceNow verwenden und diese auch als Assetmanagement / CMDB verwenden. Kommt doch die Frage auf...

Modifier im Icinga-Director selbstgemacht

Ich bin sowohl als Consultant als auch als Ausbilder ein großer Fan von Hilfe zur Selbsthilfe. Der Blogpost wird also zum einen dem geneigten Leser hoffentlich helfen sich bei Bedarf seine eigenen Modifier für den Icinga-Director zu bauen, zum anderen will ich anhand...

Icinga for Windows – Performance Boost mittels REST-Api

Seit dem ersten Release von Icinga for Windows hat sich eine Menge getan, um sowohl die Funktionalitäten, die Usability als auch die Sicherheit der Lösung zu erhöhen. Ein großer Fokus lag parallel jedoch auch immer auf der Performance, was sowohl auf den Aufbau des...

IDO-Snap: war vorher wirklich alles besser?

Kürzlich entstand im Rahmen eines Kundenprojektes ein nettes kleines Icinga-Modul, welches ich hier vorstellen möchte. Ein Monitoring-System ist abgesehen vom Desasterfall immer dann gefragt, wenn man Änderungen an seiner IT-Umgebung vornimmt. Firmware- oder...