From f3f624be1f849fb8bcfdf9d513dbe37c961c2047 Mon Sep 17 00:00:00 2001 From: mwiegand Date: Mon, 5 Sep 2022 15:42:48 +0200 Subject: [PATCH] monitoring stuff --- bundles/icinga2/files/check_by_sshmon | 15 ++++++++------ bundles/icinga2/files/conf.d/commands.conf | 2 +- bundles/monitored/metadata.py | 8 +++++--- bundles/nginx/metadata.py | 4 ++-- bundles/systemd-timers/metadata.py | 2 +- bundles/systemd/metadata.py | 23 +++++++++++++++++++--- 6 files changed, 38 insertions(+), 16 deletions(-) diff --git a/bundles/icinga2/files/check_by_sshmon b/bundles/icinga2/files/check_by_sshmon index c9a31df..685c2b9 100644 --- a/bundles/icinga2/files/check_by_sshmon +++ b/bundles/icinga2/files/check_by_sshmon @@ -2,11 +2,7 @@ UNKNOWN=3 -if [ -z "$SSHMON_TEST" ] -then - echo 'check_by_sshmon: Env SSHMON_TEST missing' >&2 - exit $UNKNOWN -elif [ -z "$SSHMON_COMMAND" ] +if [ -z "$SSHMON_COMMAND" ] then echo 'check_by_sshmon: Env SSHMON_COMMAND missing' >&2 exit $UNKNOWN @@ -16,7 +12,14 @@ then exit $UNKNOWN fi -ssh sshmon@"$SSHMON_HOST" "sudo $SSHMON_COMMAND" +if [ -z "$SSHMON_SUDO" ] +then + PREFIX="" +else + PREFIX="sudo " +fi + +ssh sshmon@"$SSHMON_HOST" "$PREFIX$SSHMON_COMMAND" exitcode=$? diff --git a/bundles/icinga2/files/conf.d/commands.conf b/bundles/icinga2/files/conf.d/commands.conf index 571ff35..151cb0e 100644 --- a/bundles/icinga2/files/conf.d/commands.conf +++ b/bundles/icinga2/files/conf.d/commands.conf @@ -12,9 +12,9 @@ object CheckCommand "sshmon" { command = [ "/usr/lib/nagios/plugins/check_by_sshmon" ] - env.SSHMON_TEST = "1234" env.SSHMON_COMMAND = "$command$" env.SSHMON_HOST = "$address$" + env.SSHMON_SUDO = "$sudo$" } diff --git a/bundles/monitored/metadata.py b/bundles/monitored/metadata.py index f6d4cb7..a5c380a 100644 --- a/bundles/monitored/metadata.py +++ b/bundles/monitored/metadata.py @@ -1,9 +1,10 @@ defaults = { 'monitoring': { 'services': { - 'test': { - 'vars.command': '/bin/ls /', - }, + # 'test': { + # 'vars.command': '/bin/ls /', + # 'vars.sudo': True, + # }, }, }, } @@ -50,6 +51,7 @@ def user(metadata): conf['vars.command'] for conf in metadata.get('monitoring/services').values() if conf['check_command'] == 'sshmon' + and conf.get('vars.sudo', None) }, }, } diff --git a/bundles/nginx/metadata.py b/bundles/nginx/metadata.py index 82c0f47..d80dfe1 100644 --- a/bundles/nginx/metadata.py +++ b/bundles/nginx/metadata.py @@ -122,8 +122,8 @@ def monitoring(metadata): return { 'monitoring': { 'services': { - f'HTTP {hostname}': { - 'vars.command': f"""/usr/bin/curl -X GET {quote(hostname + vhost.get('check_path', ''))} -IL --fail""" + hostname: { + 'vars.command': f"/usr/bin/curl -X GET -IL --fail {quote(hostname + vhost.get('check_path', ''))}", } for hostname, vhost in metadata.get('nginx/vhosts').items() }, diff --git a/bundles/systemd-timers/metadata.py b/bundles/systemd-timers/metadata.py index 50d298c..11b1f87 100644 --- a/bundles/systemd-timers/metadata.py +++ b/bundles/systemd-timers/metadata.py @@ -58,7 +58,7 @@ def monitoring(metadata): 'monitoring': { 'services': { f'{name}.timer': { - 'vars.command': f'/usr/lib/nagios/plugins/check_systemd_timer {name}' + 'vars.command': f'/usr/lib/nagios/plugins/check_systemd_timer {name}', } for name in metadata.get('systemd-timers') }, diff --git a/bundles/systemd/metadata.py b/bundles/systemd/metadata.py index a4bd8e9..6e7c190 100644 --- a/bundles/systemd/metadata.py +++ b/bundles/systemd/metadata.py @@ -11,7 +11,7 @@ defaults = { ) def units(metadata): units = {} - + for name, config in metadata.get('systemd/units').items(): if '/' in name: continue @@ -47,10 +47,10 @@ def units(metadata): ) def services(metadata): services = {} - + for name, config in metadata.get('systemd/services').items(): extension = name.split('.')[-1] - + if extension not in ['timer', 'service', 'mount', 'swap']: raise Exception(f'unknown extension: {extension}') @@ -59,3 +59,20 @@ def services(metadata): 'services': services, } } + + +@metadata_reactor.provides( + 'monitoring/services', +) +def monitoring(metadata): + return { + 'monitoring': { + 'services': { + name: { + 'vars.command': f"/bin/sh -c '/usr/bin/systemctl is-failed {name} && /usr/bin/systemctl status {name} && exit 2 || exit 0'" + } + for name in metadata.get('systemd/units') + if name.endswith('.service') + }, + }, + }