So,nach einer aufschlußreichen Diskussion zum Thema Umgebungsvariablen in Icinga – Ich hatte mir darüber noch nie wirklich einen Kopf gemacht, da “es” ja funktioniert hat – und der Bitte darum, ein “vollständiges Skript” zu veröffentlichen hier mal der entsprechende Entwurf für einen ansprechenden Ersatz der Standard-Mail-Benachrichtigung.
Das Grund-Layout stammt größtenteils von einem bestehenden Notification-Template wurde aber von mir nach Perl protiert und entsprechend umgebaut, bzw. angepasst.
Das Skript generiert eine HTML-Mail mit einem Link zum entsprechenden PNP4Nagios-Graphen.
Die Integration in Icinga gestaltet sich ziemlich simpel.
Das Skript wird z.B. nach /usr/local/icinga/bin kopiert und ausführbar gemacht. Danach sollten die Abhängigkeiten zum Perl-Paket MAIL::Sender aufgelöst werden. Unter Debian geht das am einfachsten mit einem
apt-get install libmail-sender-perl |
Sollte das Perl-Paket nicht in den Distribution-Quellen enthalten sein, kann man zur Not auch direkt CPAN bemühen
cpan Mail::Sender install |
Danach fügt man entweder in eine bestehende commands.cfg oder am besten in eine “neue” notifications.cfg (Achtung, muss in der icinga.cfg unter Umständen eingefügt werden) folgenden Block ein
define command { command_name notify-by-html-email command_line /usr/local/icinga/bin/icinga_mail.pl --debug 0 --smtphost 127.0.0.1 --icinga_url http://icinga.localdomain/icinga/ --pnp4nagios_url http://icinga.localdomain/pnp4nagios/ --originator "$ADMINEMAIL$" --recipient "$CONTACTEMAIL$" --notificationtype "$NOTIFICATIONTYPE$" --adminemail "$ADMINEMAIL$" --hostname "$HOSTNAME$" --hostalias "$HOSTALIAS$" --hostnotes "$HOSTNOTES$" --hoststate "$HOSTSTATE$" --hoststatetype "$HOSTSTATETYPE$" --hostattempt "$HOSTATTEMPT$" --maxhostattempt "$MAXHOSTATTEMPTS$" --hostduration "$HOSTDURATION$" --hostnotificationnumber "$HOSTNOTIFICATIONNUMBER$" --hostcheckcommand "$HOSTCHECKCOMMAND$" --hostlatency "$HOSTLATENCY$" --lasthostcheck "$LASTHOSTCHECK$" --lasthoststatechange "$LASTHOSTSTATECHANGE$" --lasthostup "$LASTHOSTUP$" --lasthostdown "$LASTHOSTDOWN$" --lasthostunreachable "$LASTHOSTUNREACHABLE$" --hostoutput "$HOSTOUTPUT$" --hostaddress "$HOSTADDRESS$" --hostnotesurl "$HOSTNOTESURL$" --servicedesc "$SERVICEDESC$" --servicestate "$SERVICESTATE$" --servicenotificationnumber "$SERVICENOTIFICATIONNUMBER$" --serviceoutput "$SERVICEOUTPUT$" --lastservicecheck "$LASTSERVICECHECK$" --lastservicestatechange "$LASTSERVICESTATECHANGE$" --lastserviceok "$LASTSERVICEOK$" --lastservicewarning "$LASTSERVICEWARNING$" --lastservicecritical "$LASTSERVICECRITICAL$" --lastserviceunknown "$LASTSERVICEINKNOWN$" --servicestatetype "$SERVICESTATETYPE$" --serviceattempt "$SERVICEATTEMPT$" --maxserviceattempts "$MAXSERVICEATTEMPTS$" --serviceduration "$SERVICEDURATION$" --servicecheckcommand "$SERVICECHECKCOMMAND$" --servicedisplayname "$SERVICEDISPLAYNAME$" --servicelatency "$SERVICELATENCY$" --servicepercentchange "$SERVICEPERCENTCHANGE$" --timet "$TIMET$" --processstarttime "$PROCESSSTARTTIME$" --totalhostsup "$TOTALHOSTSUP$" --totalhostsdown "$TOTALHOSTSDOWN$" --totalhostsunreachable "$TOTALHOSTSUNREACHABLE$" --totalservicesok "$TOTALSERVICESOK$" --totalserviceswarning "$TOTALSERVICESWARNING$" --totalservicescritical "$TOTALSERVICESCRITICAL$" --totalservicesunknown "$TOTALSERVICESUNKNOWN$" --totalhostproblemsunhandled "$TOTALHOSTPROBLEMSUNHANDLED$" --totalserviceproblemsunhandled "$TOTALSERVICEPROBLEMSUNHANDLED$" --notificationauthor "$NOTIFICATIONAUTHOR$" --notificationcomment "$NOTIFICATIONCOMMENT$" } |
Danach bekommt jeder “Contact” noch über host_notification_commands und service_notifications_commands das neue Notification-Template verpasst
... host_notification_commands notify-by-html-email service_notification_commands notify-by-html-email ... |
Nach dem anschließenden Reload der Icinga-Config werden dann Mails mit dem “neuen” Template verschickt.
UPDATE
Wie es halt immer so ist … Eine Software wird nie fertig ![]()
Damit die PNP4Nagios-Graphen auch ausserhalb des Unternehmens funktionieren, dürfen diese nicht nur verlinkt werden, sondern müssen base64-codiert mitgeschickt werden.
Ich habe das Skript um einen Wget-Call erweitert und den base64-Code im IMG-Tag eingebaut:
<img src="data:image/png;base64, iVBORw0KGgoAAAANSU...MyBzOjAuMDEgcjowLjEzCg==" alt="pnp4nagios: hostname service" /> |
Dazu die Datei icinga_mail_base64.pl herunterladen und in icinga_mail.pl umbenennen.
Download – pnp4nagios über base64
Für den Wget-Call habe ich versucht die allgemeingültigsten Parameter –no-proxy –no-check-certificate zu verwenden. Wer über einen Proxy oder mit einem gültigen Zertifikat auf Icinga zugreift, muss das in der Zeile 716
# get pnp4nagios images as base64 my $base64image = `wget --no-proxy --no-check-certificate -O - '$pnp4nagios_url/image?host=$icinga_hostname&srv=$icinga_servicedesc&view=1&source=0' 2> /dev/null | base64`; |
entsprechen anpassen.
UPDATE 2
Das ganze ist jetzt auch Google Code Project verfügbar:
Issues und Bugs bitte dort einkippen.
