Push Notification bei kritischen Einträgen im Logfile bei syslog-ng

Ich wollte einen Weg finden wie ich auf bestimmte Ereignisse in Logfile durch eine Pushnachricht per Mail (oder auch per Pushover) benachrichtigt werden. Die wesentliche Idee habe ich von hier übernommen und basiert auf Syslog-ng.

Konkret will ich über erfolglose und erfolgreiche Logins auf meinem Openvpn Server informiert werden. Wahrscheinlich kann man einiges noch verbessern aber es tut es.

Zuerst brauchen wir ein Script, das aus einer Pipe heraus Mailnachrichten und über Pushover auf meine mobilen Geräte versendet.

vi /usr/local/bin/log-mail.sh
  #!/bin/bash
  subject="Openvpn Aktivitaet"
  email="your.mail.de"
  URL="https://api.pushover.net/1/messages.json"
  API_KEY="yourapikey"
  USER_KEY="youruserkey"
  while read event;
  do
  	  echo ${event} | mail -s "${subject}" ${email}
	  curl  -F "token=${API_KEY}" -F "user=${USER_KEY}" -F "title=${subject}" -F "message=${event}" "${URL}" > /dev/null 2>&1
  done

chmod +x /usr/local/bin/log-mail.sh

Dann brauchen wir noch die Konfiguration von Syslog

vi /etc/syslog-ng/syslog-ng.conf

     filter f_openvpn1 { message("Peer Connection");};
         filter f_openvpn2 { message("TLS Auth Error");};
     destination d_email_notification { program("/usr/local/bin/log-mail.sh"); };
     log { source(src); filter(f_openvpn1); destination(d_email_notification); };
     log { source(src); filter(f_openvpn2); destination(d_email_notification); };

Die ersten beiden Zeilen legen den Zeichenstring fest, für den ich mich interessiere. Die dritte Zeile sagt, dass es ein Programm gibt das Events entgegen nehmen kann. Die vierte und fünfte Zeile verbindet den Filter mit der Destination und sagt, dass die interessanten Events an das gerade erstellte Programm versenden werden soll.

Dann kommen Nachrichten per Mail und Pushover.

[Openvpn Pushover Notification]