Seite wählen

check_by_ssh mit Icinga 2

von | Mrz 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)

Markus Frosch
Markus Frosch
Principal Consultant

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.
Mehr Beiträge zum Thema Icinga

Ansible – AWX|Tower State handling on Workflows

The Ansible Tower or its upstream AWX provides an easy to use GUI to handle Ansible tasks and schedules. Playbooks are configured as templates and as the name suggests, they can be modified to the needs, extended by variables, a survey or tags. Furthermore those...

Ein simpler Installer für Icinga

Aus der anstehenden Überarbeitung des Icinga-Buchs habe ich mit dem Icinga-Installer ein Projekt gestartet, um Icinga in seiner Gesamtheit als Stack bestehend aus Icinga 2, Icinga Web 2, MariaDB oder PostgreSQL und Apache leicht und einfach zu installieren. Der...

Monitoring-Plugins Software-Repository von NETWAYS

Ab sofort bieten wir unter https://packages.netways.de/plugins, die von uns meist genutzten Monitoring-Plugins als Pakete für RHEL 8 und 7, Debian Buster und Stretch, sowie Ubuntu Bionic Beaver und Focal Fossa zum Download an. Zur Zeit überwiegen die RPM Pakete in der...

Icinga2 und Influx2: So bringen wir beide zum reden

Auch wenn die Überschrift es vermuten lässt. Das hier ist kein Clickbait sondern eine Kurzanleitung zum Thema. Das Problem: Seitdem die time series database influxdb in der Version 2.0 erschienen es kann man das icinga2 influx feature nicht mehr ohne weiteres nutzen....

Veranstaltungen

Di 18

Icinga 2 Fundamentals Training | Online

Mai 18 @ 09:00 - Mai 21 @ 17:00
Jun 15

stackconf online

Juni 15 - Juni 17
Jun 22

Ansible Fundamentals Training | Online

Juni 22 @ 09:00 - Juni 24 @ 17:00
Jun 22

Kubernetes Quick Start | Online

Juni 22 @ 09:00 - 17:00
Jun 25

Ansible AWX (Tower) Training | Online

Juni 25 @ 09:00 - 17:00