Commit 7f5aebb1 authored by Bernhard Geier's avatar Bernhard Geier

Icinga2-Server: Alerting per XMPP

parent 52edb07a
......@@ -10,6 +10,9 @@ object Host "{{ item }}" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
{% endfor %}
......@@ -9,6 +9,9 @@ object Host "{{ item }}" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
{% endfor %}
......@@ -9,6 +9,9 @@ object Host "api.freifunk-ingolstadt.de" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
object Host "firmware.freifunk-ingolstadt.de" {
......@@ -20,6 +23,9 @@ object Host "firmware.freifunk-ingolstadt.de" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
object Host "map.freifunk-ingolstadt.de" {
......@@ -31,6 +37,9 @@ object Host "map.freifunk-ingolstadt.de" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
object Host "grafana.freifunk-ingolstadt.de" {
......@@ -42,4 +51,7 @@ object Host "grafana.freifunk-ingolstadt.de" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
......@@ -12,6 +12,9 @@ object Host "{{ item }}" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
{% endfor %}
......@@ -10,6 +10,9 @@ object Host "freifunk-ingolstadt.de" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
object Host "ingolstadt.freifunk.net" {
......@@ -20,5 +23,8 @@ object Host "ingolstadt.freifunk.net" {
vars.notification["mail"] = {
groups = ["freifunk_admins"]
}
vars.notification["xmpp"] = {
groups = ["freifunk_admins"]
}
}
......@@ -9,10 +9,14 @@ Die Konfiguration erfolgt durch Variable "icinga2":
icinga2:
api: true
icingaweb2: true
xmpp:
user: icinga2@jabberexample.com
pw: passwort0
userliste:
- user: username1
pw: passwort1
email: username1@foobar.com
xmpp: username1@jabberfoobar.com
- user: username2
pw: passwort2
- email: beispiel@bar.baz
......@@ -26,7 +30,8 @@ Die Konfiguration erfolgt durch Variable "icinga2":
```
- **api:** Icinga2-API ein- (=true) oder ausschalten (=false). Wenn nicht gesetzt wird "false" angenommen. Über die API ist nur Monitoring erlaubt, kein Anlegen/Ändern/Löschen von Objekten u.ä..
- **icingaweb2:** IcingaWeb2-Weboberfläche ein- (=true) oder ausschalten (=false).
- **userliste:** Enthält eine Liste mit Benutzern. Ein Benutzer muss Benutzername und Passwort und/oder E-Mailadresse haben.
- **xmpp:** Optional. Zugangsdaten für den XMPP-Account, der von Icinga2 verwenden soll um Alerts an User per XMPP zu verschicken.
- **userliste:** Enthält eine Liste mit Benutzern. Ein Benutzer muss Benutzername und Passwort und/oder E-Mailadresse und/oder XMPP-Adresse haben.
- **api_lister:** Ändert die IP-Adresse und den Ports für Icinga2-API. Wenn nicht gesetzt wird als "address" "::" und als "port" "5665" verwendet, womit die Icinga2-API an alle Netzwerkschnittstellen auf Port 5665 verfügbar ist.
- **http_listener:** Ändern die IP-Adresse und den Ports für IcingaWeb2. Wenn nicht gesetzt wird als "address" "*" und als "port" "80" verwendet, womit IcingaWeb2 an alle Netzwerkschnittstellen auf Port 80 verfügbar ist.
- **mail_interval:** Icinga2 kann bei länger andauernden Alerts nicht nur einmalig, sondern regelmäßig per E-Mail informieren. Hier kann eingestellt werden, in welchen Abständen diese E-Mails versendet werden sollen (z.B. "30m" für alle 30 Minuten, "2h" für alle zwei Stunden usw., "0" für keine regelmäßigen E-Mails). Standardwert ist "30m".
......@@ -34,7 +39,7 @@ Die Konfiguration erfolgt durch Variable "icinga2":
Falls die Icinga2-API und/oder IcingaWeb2 eingeschaltet ist, dann haben alle in "userliste" mit Benutzername ("user") und Passwort ("pw") angebenen Benutzer darauf Zugriff.
An alle in "userliste" angegebenen E-Mail-Adressen ("email") versendet Icinga2 Notifications. Dazu ist die Rolle exim4-daemon-light nötig, die die E-Mails lokal annimmt und an einen SMTP-Server weiterleitet.
Im Beispiel oben gibt es drei User: Zwei davon können sich an der API und an IcingaWeb2 anmelden, einer davon bekommt die Alerts zusätzlich per E-Mail. Der dritte User kann sich nirgends anmelden und wird nur per E-Mail über Alerts informiert.
Im Beispiel oben gibt es drei User: Zwei davon können sich an der API und an IcingaWeb2 anmelden, einer davon bekommt die Alerts zusätzlich per E-Mail und XMPP. Der dritte User kann sich nirgends anmelden und wird nur per E-Mail über Alerts informiert.
Auf die API kann, wenn nicht anders konfiguriert, über https, Port 5665, zugegriffen werden.
......
# Ansible managed
apply Notification "xmpp-icingaadmin" to Host {
import "xmpp-host-notification"
user_groups = host.vars.notification.xmpp.groups
users = host.vars.notification.xmpp.users
assign where host.vars.notification.xmpp
}
apply Notification "xmpp-icingaadmin" to Service {
import "xmpp-service-notification"
user_groups = host.vars.notification.xmpp.groups
users = host.vars.notification.xmpp.users
assign where host.vars.notification.xmpp
}
- name: Install dependencies for this role
apt:
pkg: ['git', 'python3-slixmpp']
- name: Clone XMPPNotify
git:
repo: https://github.com/Finn10111/XMPPNotify.git
dest: /opt/icinga2-XMPPNotify
update: yes
- name: Store XMPP account credentials in /etc/xmppnotify.cfg
template:
src: 'icinga2-xmpp/xmppnotify.cfg.j2'
dest: '/etc/xmppnotify.cfg'
owner: 'nagios'
group: 'nagios'
mode: '0600'
- name: Symlink xmppnotify.py to /etc/icinga2/scripts/
file:
src: '/opt/icinga2-XMPPNotify/xmppnotify.py'
dest: '/etc/icinga2/scripts/xmppnotify.py'
state: link
notify: reload icinga2
- name: Symlink commands-xmppnotify.conf to /etc/icinga2/conf.d/
file:
src: '/opt/icinga2-XMPPNotify/commands-xmppnotify.conf'
dest: '/etc/icinga2/conf.d/commands-xmppnotify.conf'
state: link
notify: reload icinga2
- name: Create Icinga2 template for XMPP notifications
template:
src: 'icinga2-xmpp/templates-xmppnotify.conf.j2'
dest: '/etc/icinga2/conf.d/templates-xmppnotify.conf'
notify: reload icinga2
- name: Attach XMPP notifications to hosts and services
copy:
src: 'icinga2-xmpp/notifications-xmppnotify.conf'
dest: '/etc/icinga2/conf.d/notifications-xmppnotify.conf'
notify: reload icinga2
......@@ -2,6 +2,11 @@
tags:
- 'role::icinga2'
- import_tasks: icinga2-xmpp.yml
when: icinga2.xmpp.user is defined and icinga2.xmpp.user and icinga2.xmpp.pw is defined and icinga2.xmpp.pw
tags:
- 'role::icinga2-xmpp'
- import_tasks: icinga2-api.yml
when: icinga2.api is defined and icinga2.api
tags:
......
# {{ ansible_managed }}
template Notification "xmpp-host-notification" {
command = "xmpp-host-notification"
states = [ Up, Down ]
types = [ Problem, Acknowledgement, Recovery, Custom ]
period = "24x7"
interval = 8h
vars += {
notification_icingaweb2url = "http://{{ inventory_hostname_short }}.{{ freifunk.domain }}"
}
}
template Notification "xmpp-service-notification" {
command = "xmpp-service-notification"
states = [ OK, Warning, Critical, Unknown ]
types = [ Problem, Acknowledgement, Recovery, Custom ]
period = "24x7"
interval = 8h
vars += {
notification_icingaweb2url = "http://{{ inventory_hostname_short }}.{{ freifunk.domain }}"
}
}
# {{ ansible_managed }}
[Account]
jid={{ icinga2.xmpp.user }}
password={{ icinga2.xmpp.pw }}
......@@ -11,6 +11,9 @@ object User "{{ item.user | default(item.email) }}" {
display_name = "{{ item.user | default(item.email) }}"
email = "{{ item.email }}"
{% if item.xmpp is defined %}
vars.xmpp = "{{ item.xmpp }}"
{% endif %}
}
{% endfor %}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment