munin-contrib/plugins/icinga/icinga_checks

115 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
: << =cut
=head1 NAME
icinga_checks - Plugin to monitor results of icinga monitoring
=head1 CONFIGURATION
No configuration
=head1 AUTHORS
Copyright (C) 2019 mafri (with help from sumpfralle and ndo84bw)
=head1 LICENSE
GNU General Public License v3.0 only
SPDX-License-Identifier: GPL-3.0-only
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
ICINGACLI=${ICINGACLI:-$(command -v icingacli)}
JQ=${JQ:-$(command -v jq)}
if [ "$1" = "autoconf" ] ; then
if [ ! -x "$ICINGACLI" ]; then
echo "no (could not find 'icingacli')"
elif [ ! -x "$JQ" ]; then
echo "no (could not find 'jq')"
else
echo "yes"
fi
exit
fi
set -e
if [ "$1" = "config" ]; then
echo "multigraph icinga_host_checks"
echo "graph_title Icinga Host Checks"
echo 'graph_args --base 1000'
echo 'graph_vlabel Count'
echo 'graph_category icinga'
echo "up.label Up"
echo "down.label Down"
echo "unreachable.label Unreachable"
echo "pending.label Pending"
echo "up.draw AREA"
echo "down.draw STACK"
echo "unreachable.draw STACK"
echo "pending.draw STACK"
echo "multigraph icinga_service_checks"
echo "graph_title Icinga Service Checks"
echo 'graph_args --base 1000'
echo 'graph_vlabel Count'
echo 'graph_category icinga'
echo "ok.label Ok"
echo "warning.label Warning"
echo "critical.label Critical"
echo "unknown.label Unknown"
echo "pending.label Pending"
echo "ok.draw AREA"
echo "warning.draw STACK"
echo "critical.draw STACK"
echo "unknown.draw STACK"
echo "pending.draw STACK"
exit
fi
if [ ! -x "$ICINGACLI" ]; then
echo "could not find 'icingacli'" >&2
exit 1
elif [ ! -x "$JQ" ]; then
echo "could not find 'jq'" >&2
exit 1
fi
output=$("$ICINGACLI" monitoring list hosts --format=json)
host_up=$( echo "$output" | "$JQ" -r '.[] | select(.host_state == 0) | .host_name' | wc -l )
host_down=$( echo "$output" | "$JQ" -r '.[] | select(.host_state == 1) | .host_name' | wc -l )
host_pend=$( echo "$output" | "$JQ" -r '.[] | select(.host_state == 2) | .host_name' | wc -l )
host_unre=$( echo "$output" | "$JQ" -r '.[] | select(.host_state == 3) | .host_name' | wc -l )
echo "multigraph icinga_host_checks"
echo "up.value $host_up"
echo "down.value $host_down"
echo "pending.value $host_pend"
echo "unreachable.value $host_unre"
output=$("$ICINGACLI" monitoring list services --format=json)
service_ok=$( echo "$output" | "$JQ" -r '.[] | select(.service_state == 0) | .host_name + .service_name' | wc -l )
service_warn=$(echo "$output" | "$JQ" -r '.[] | select(.service_state == 1) | .host_name + .service_name' | wc -l )
service_crit=$(echo "$output" | "$JQ" -r '.[] | select(.service_state == 2) | .host_name + .service_name' | wc -l )
service_pend=$(echo "$output" | "$JQ" -r '.[] | select(.service_state == 3) | .host_name + .service_name' | wc -l )
service_unkn=$(echo "$output" | "$JQ" -r '.[] | select(.service_state == 4) | .host_name + .service_name' | wc -l )
echo "multigraph icinga_service_checks"
echo "ok.value $service_ok"
echo "warning.value $service_warn"
echo "critical.value $service_crit"
echo "unknown.value $service_unkn"
echo "pending.value $service_pend"