Icinga 2 und Auto-Discovery mit SNMP

Nachdem ich meine eigenen VMs lange Zeit mit “Monitoring per Jabber” überwacht habe (sprich: User schreiben mir Jabber-Nachrichten/Mails/u.ä., wenn etwas nicht mehr geht), habe ich mich endlich entschlossen, diese automatisiert zu überwachen.
Hierbei wollte ich meinen Usern auch gleich die Möglichkeit geben, zusätzlich zu den von mir vordefinierten Checks, eigene Services zu überwachen, ohne ihnen dabei direkt Zugriff auf meine Monitoring-Config zu geben.
Bei meinen Tests hat sich SNMP dabei als recht flexibel erwiesen. Zunächst bekommt jede VM eine eigene Community zugewiesen, damit die VMs nicht gegenseitig auf ihre Monitoring-Daten zugreifen können. Der jeweilige Community-Name ist dabei der HMAC-Hash der IP-Adresse. Der HMAC-Schlüssel ist dabei geheim und wird auf den VMs selbst nirgendwo gespeichert.
Die eigene Community bekommen die VMs über ein PHP-Script:

<?php
$pkey = "hmac_schlüssel_hier";
echo substr(hash_hmac("sha256", $_SERVER["REMOTE_ADDR"], $pkey), 0, 12);

Das Installationsscript für die VMs sieht dabei in etwa so aus:

#!/bin/sh
set -e
apt-get install -y snmpd nagios-plugins-basic
COMMUNITY=$(curl https://beutner.name/api/hostkey.php)
cat >/etc/snmp/snmpd.conf <<CONFIG
agentAddress udp:0.0.0.0:161
view systemonly included .1.3.6.1.4.1.8072.1.3
rocommunity $COMMUNITY default -V systemonly
rouser authOnlyUser
extend apt /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_apt
extend disk /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_disk -w 10 -c 5 -p /
extend swap /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_swap -w 50 -c 25
extend procs /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_procs -w 500 -c 1000
extend users /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_users -w 10 -c 25
extend load /opt/monitoring/exec_plugin /usr/lib/nagios/plugins/check_load -w 5 -c 10
CONFIG
service snmpd restart
mkdir -p /opt/monitoring
cat >/opt/monitoring/exec_plugin <<SCRIPT
#!/bin/sh
output=\$(\$@ 2>&1)
status=\$?
echo \$status \$output
SCRIPT
chmod +x /opt/monitoring/exec_plugin

Bei meiner SNMP-Config habe ich bewusst darauf verzichtet, “normale” OIDs abzufragen, sondern verwende ausschließlich extend. Der Vorteil davon ist, dass ich auf Seite der Monitoring-VM ein einziges Plugin zum Checken aller Services benötige.
Um zu erkennen, welche Services eine VM hat, habe ich ein Script geschrieben, das anhand eines SNMP-Walks Icinga-Templates erstellt. Dieses läuft als Cronjob und aktualisiert in regelmäßigen Abständen die Config, sofern die jeweiligen Hosts erreichbar sind:

$ /opt/monitoring/discover-snmp.py --key hmac_schlüssel_hier 213.95.47.212
IP address: 213.95.47.212, SNMP Community: xxxxxxx
template Host "snmp-extend:213.95.47.212" {
  macros["community"] = "xxxxxxx",
  services["apt"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "apt"
  },
  services["disk"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "disk"
  },
  services["load"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "load"
  },
  services["swap"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "swap"
  },
  services["procs"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "procs"
  },
  services["users"] = {
    templates = [ "snmp-extend-service" ],
    check_command = "snmp-extend",
    macros["plugin"] = "users"
  },
}

Das Check-Plugin für den “snmp-extend”-Check fragt dabei mit snmpget die entsprechende OID ab. Prinzipiell wird hier SNMP eigentlich nur als Transport für die Check-Results verwendet.
Um das ganze noch etwas benutzerfreundlicher zu gestalten, wären noch einige Änderungen notwendig:

  • idealerweise gäbe es statt dem Installationsscript ein updatebares Debian-Paket (oder RPM, MSI, etc. – wobei ich selbst eigentlich nur Debian-VMs habe)
  • Die Services sollten jeweils in einer einzelnen Datei sein, dies würde das Aktualisieren der snmpd-Config erleichtern
  • Je nach Umgebung wäre es praktisch, snmpd auf einem anderen Port zu starten – und eine separate Config-Datei zu verwenden
  • SNMPv3 unterstützt Verschlüsselung; für meinen Anwendungsfall ist dies aber nicht notwendig, da die anderen VMs entweder auf demselben Server sind oder ausschließlich per VPN erreichbar sind

Weekly Snap: LConf 1.3, InGraph, Auto Discovery & Devops

22 – 26 October released LConf 1.3, introduced the InGraph web interface, and contributed an article on auto discovery and an opinion on devops.
Most exciting of all, Jannis released the faster, better and prettier LConf 1.3 for Icinga and Nagios LDAP based configuration.
Also from our dev team, Alexander gave us part 2 of the ultimate guide to InGraph, with a little tour of the features in the user interface as Marcus reflected on his apprenticeship in systems integration.
On events, Eva thanked the sponsors that helped make OSMC possible while Bernd reported back from the Nuernberg Web Week that we supported.
Bernd finished a busy week with an article contribution to Admin Magazine on auto discovery (available both in German and English) as well as his opinion on what devops is and isn’t.

Artikel zum Thema Auto-Discovery


In der aktuellen Ausgabe des Admin-Magazins habe ich einen kleinen Artikel über das Thema-Autodiscovery  (komischerweise nicht die Lösung aller Probleme) geschrieben. Neben ein paar klassischen Ansätzen um zu einer vernünftigen Inventarisierung seiner Infrastruktur zu kommen, hat der Artikel aber auch einen kleinen philosophischen Touch.
Eigentlich bin ich kein großer Fan von Auto-Discovery, was ich mir an manchen Stellen leider auch nicht verkneifen konnte. Im praktischen Einsatz führt Auto-Discovery nämlich häufig schnell zu vielen Services, aber das Quantität nicht Qualität ist weiss man ja.
Werft auf jeden Fall einen Blick in den grandiosen Artikel und kauft ihn bei Bedarf auch online,was ich ohne vorhandendes Provisionsmodell objektiv und unabhängig empfehlen kann. Solltet ihr gerade in einem amerikanischen Starbucks sitzen und den Wunsch verspüren euch unauffällig zu verhalten; dann rennt einfach in den nächsten Kiosk und kauf die US-Ausgabe.
Auf der OSMC gab es die Zeitung übrigens gratis, aber das hilft Euch jetzt leider nichts mehr. Da hilft nur noch die spontane Anmeldung bei der OSDC und mein Versprechen was zu schreiben:-)

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.