Seite wählen

NETWAYS Blog

Benachrichtigung mal einfach

Neulich beim Kunden, sollte folgendes Szenario zur Benachrichtigung umgesetzt werden. Der Weg, also ob Mail, Slack oder Telegram, soll vom Benutzer abhängig sein, je nach dessen Vorliebe. Ist beim Benutzer eine Mailadresse gesetzt, wird er auch per Mail informiert. Soll die Benachrichtigung hingegen via Telegram bzw. Slack erfolgen, muss der notwendige Empfangs-Hook über ein User-Custom-Attribute angegeben werden.

Wer zu benachrichtigen ist, wird am Host-Objekt angegeben. Die zu benachrichtigen Benutzer können hierbei in einer Liste (host.vars.notification.user) oder über die Mitgliedschaft in einer Gruppe, die ebenfalls am Host in einer Liste (host.vars.notification.groups) angegeben werden, zu gewiesen.

Sei ein Benutzer admin Mitglied der Gruppen icingaadmins und linuxadmins. Soll bei folgendem Host

object Host "localhost" {
  import "generic-host"

  address = "127.0.0.1"

  vars.notifiction = {
    groups = [ "icingaadmins", "linuxadmins", "vips" ]
  }
}

für den Benutzer admin, aber keine doppelten Nachrichten versandt werden, kann dies zunächst mit dieser Regel umgesetzt werden:

apply Notification "mail-admin to Host {
  import "mail-host-notification"
  users = [ "admin" ]

  assign where "admin" in host.vars.notification.users || f("admin", host.vars.notification.groups)
}

Über den ersten Teil der assign-Regel wäre das Vorhandensein von admin in der Liste der zu benachrichtigen Benutzer am Host abgehandelt. Der zweite Teil ist eine selbstdefinierte Funktion die ein true zurück liefert, sofern der Benutzer mindestens einer der Gruppen aus der Liste angehört.

function f(user,groups) {
  if (typeof(groups) == Array) {
    for (grp in groups) {
      if (grp in get_user(user).groups) {
        return true
      }
    }
  }
  return false
}

Nun möchte man nicht für jeden Benutzer am Icinga-System eine solche Notification definieren, zumal die Services noch nicht berücksichtigt sind, dann wären deren für jeden Benutzer, immer gleich zwei Notification-Definitionen. Notifications werden vom Config-Compiler immer nach den User- und Usergroup-Objekten ausgewertet, somit kann die Notification zu ein Notification-for, die eine Schleife über alle bekannten Benutzer führt, umgewandelt bzw. erweitert werden:

apply Notification for (user in get_objects(User)) to Host {
  import "mail-host-notification"
  users = [ user.name ]

  assign where user.name in host.vars.notification.users || f(user.name, host.vars.notification.groups)
  ignore where ! get_user(user.name).email
}

Die abschließende ignore-Klausel stellt sich, dass keine Notification für Benutzer erzeugt wird, die keine Mailadresse angegeben haben. Sollen nun die selben Benutzer, nicht nur für den Host, sondern auch über Probleme bei den zum Host gehörigen Services benachrichtigt werden, ist das ganze nur noch eine Fingerübung:

apply Notification for (user in get_objects(User)) to Service {
  import "mail-service-notification"
  users = [ user.name ]

  assign where user.name in host.vars.notification.users || f(user.name, host.vars.notification.groups)
  ignore where ! get_user(user.name).email
}

Äquivalente Notifications lassen sich damit auch für die alternativen Benachrichtigungswege Slack, Telegram und weitere erstellen.

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Thomas Krenn erklärt die Einrichtung von unserem CEP CT63 USB powered

cutUnser langjähriger Partner Thomas Krenn hat letzte Woche einen Artikel zur Einrichtung des CEP CT63 USB powered in seinem Wiki eingestellt. Das CEP CT63 USB powered arbeitet ohne großen Aufwand und vor allem ohne zusätzliche Treiber mit den gängigen Linux Distributionen zusammen. Unsere Kunden nutzen das CEP CT63 wegen der hervorragenden Funktionalität zusammen mit Nagios und Icinga.
Zusätzlich wird auch bei Thomas Krenn noch einmal erklärt, wie die Einrichtung mit den SMS Server Tools funktioniert. Einen kleine Hilfe für die Fehlerbeseitigung findet man am Ende der Anleitung.
Der Bedarf an einer SMS-Lösung begründete Thomas Krenn mit einer Kundenanforderung. Promt hat NETWAYS für diesen versuch eine kostenlose Teststellung bereit gestellt und konnte so einen unkomplizierten vorab-Test ermöglichen. Der Thomas Krenn-Kunde war mit der Lösung sehr zufrieden und hat das Gerät gleich behalten.
Sie möchten auch ein Gerät testen, bevor Sie kaufen? Kein Problem! Nehmen Sie einfach Kontakt zu uns auf.

Blog Serie zu Nagios Benachrichtigungen

75699271_cf18da72a2_oEs ist mal wieder Zeit für eine Blog Serie. Nach dem unsere Serien zu MySQL-Tuning und High-Performance Websites recht gut ankamen, versuche ich mich in den nächsten Wochen mal an dem Thema Nagios Benachrichtigungen. Klingt vielleicht auf den ersten Blick nicht so spannend, aber ich glaube dass man gerade durch Optimierungen in diesem Bereich das Monitoring noch wesentlich effektiver machen kann. Beispielsweise durch schnellere Benachrichtigungen, weniger Fehlalarme oder bessere Kanäle.
Ich werden also in den nächste Wochen jeweils immer am Mittwoch einen – hoffentlich neuen – Weg vorstellen, Nagios Benachrichtigungen zu versenden. Folgende Themen habe ich aktuell in der Pipeline:

Wenn Euch noch Themen einfallen oder ein wichtiges Thema fehlen sollte, nehme ich das gerne mit in die Serie auf. Schreibt mir einfach in den Kommentaren.

Julian Hein
Julian Hein
Executive Chairman

Julian ist Gründer und Eigentümer der NETWAYS Gruppe und kümmert sich um die strategische Ausrichtung des Unternehmens. Neben seinem technischen und betriebswirtschaftlichen Background ist Julian häufig auch kreativer Kopf und Namensgeber, beispielsweise auch für Icinga. Darüber hinaus ist er als CPO (Chief Plugin Officer) auch für die konzernweite Pluginstrategie verantwortlich und stösst regelmässig auf technische Herausforderungen, die sonst noch kein Mensch zuvor gesehen hat.