diff --git a/bundles/icinga2/files/icinga_statusmonitor.py b/bundles/icinga2/files/icinga_statusmonitor.py new file mode 100644 index 0000000..b5c326b --- /dev/null +++ b/bundles/icinga2/files/icinga_statusmonitor.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +from flask import Flask, Response +from subprocess import check_output + +app = Flask(__name__) + +@app.route('/status') +def statuspage(): + try: + check_output(['/usr/lib/nagios/plugins/check_procs', '-C', 'icinga2', '-c', '1:']) + + # check_output will raise an exception if there is a non-zero status + icinga_is_fine = True + except: + icinga_is_fine = False + + try: + check_output(['/usr/lib/nagios/plugins/check_procs', '-C', 'postgres', '-c', '1:']) + + # check_output will raise an exception if there is a non-zero status + postgres_is_fine = True + except: + postgres_is_fine = False + + if icinga_is_fine and postgres_is_fine: + return 'OK', 200 + else: + return 'Something is wrong!', 500 diff --git a/bundles/icinga2/files/icinga_statusmonitor.service b/bundles/icinga2/files/icinga_statusmonitor.service new file mode 100644 index 0000000..3bfd258 --- /dev/null +++ b/bundles/icinga2/files/icinga_statusmonitor.service @@ -0,0 +1,15 @@ +[Unit] +Description=Icinga2 Statusmonitor +After=network.target + +[Service] +User=nagios +Group=nagios +Environment="FLASK_APP=/etc/icinga2/icinga_statusmonitor.py" +ExecStart=/usr/bin/python3 -m flask run +WorkingDirectory=/tmp +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/bundles/icinga2/items.py b/bundles/icinga2/items.py index 0aead44..c39a0f7 100644 --- a/bundles/icinga2/items.py +++ b/bundles/icinga2/items.py @@ -218,6 +218,19 @@ files = { 'mode': '0660', 'group': 'icingaweb2', }, + + # Statusmonitor + '/etc/icinga2/icinga_statusmonitor.py': { + 'triggers': { + 'svc_systemd:icinga_statusmonitor:restart', + }, + }, + '/etc/systemd/system/icinga_statusmonitor.service': { + 'triggers': { + 'action:systemd-reload', + 'svc_systemd:icinga_statusmonitor:restart', + }, + }, } actions = { @@ -253,6 +266,13 @@ svc_systemd = { 'symlink:', }, }, + 'icinga_statusmonitor': { + 'needs': { + 'file:/etc/icinga2/icinga_statusmonitor.py', + 'file:/etc/systemd/system/icinga_statusmonitor.service', + 'pkg_apt:python3-flask', + }, + }, } diff --git a/bundles/icinga2/metadata.py b/bundles/icinga2/metadata.py index 25571ed..3a2305d 100644 --- a/bundles/icinga2/metadata.py +++ b/bundles/icinga2/metadata.py @@ -23,6 +23,9 @@ defaults = { 'libmonitoring-plugin-perl': {}, 'libnet-dns-perl': {}, 'libreadonly-perl': {}, + + # neeeded for statusmonitor + 'python3-flask': {}, } }, 'icinga2': { @@ -38,6 +41,9 @@ defaults = { 'check_interval': '30m', 'vars.notification.mail': True, }, + 'ICINGA STATUSMONITOR': { + 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit icinga_statusmonitor', + }, }, }, }, diff --git a/data/powerdns/files/bind-zones/kunsmann.eu b/data/powerdns/files/bind-zones/kunsmann.eu index 9b89f8f..d2b82e3 100644 --- a/data/powerdns/files/bind-zones/kunsmann.eu +++ b/data/powerdns/files/bind-zones/kunsmann.eu @@ -16,6 +16,9 @@ git IN AAAA 2a01:4f8:10b:2a5f::2 icinga IN A 51.195.44.8 icinga IN AAAA 2001:41d0:701:1100::2618 +statusmonitor.icinga IN A 51.195.44.8 +statusmonitor.icinga IN AAAA 2001:41d0:701:1100::2618 + jenkins IN A 94.130.52.224 jenkins IN AAAA 2a01:4f8:10b:2a5f::2 diff --git a/nodes/ovh/icinga2.py b/nodes/ovh/icinga2.py index 5f95573..9b03ed2 100644 --- a/nodes/ovh/icinga2.py +++ b/nodes/ovh/icinga2.py @@ -37,6 +37,14 @@ nodes['ovh.icinga2'] = { 'webroot': '/usr/share/icingaweb2/public', 'extras': True, }, + 'icinga_statusmonitor': { + 'domain': 'statusmonitor.icinga.kunsmann.eu', + 'proxy': { + '/': { + 'target': 'http://127.0.0.1:5000/', + } + }, + } }, }, 'php': {