add monitoring for freifunk nodes
All checks were successful
bundlewrap/pipeline/head This commit looks good

This commit is contained in:
Franzi 2021-01-09 11:03:23 +01:00
parent 19dd29e847
commit 8e54d6eb23
Signed by: kunsi
GPG key ID: 12E3D2136B818350
6 changed files with 163 additions and 0 deletions

View file

@ -0,0 +1,78 @@
#!/usr/bin/env python3
from requests import get
from sys import argv, exit
meshviewer_url = argv[1]
node_id = argv[2]
node = None
try:
for n in get(meshviewer_url).json()['nodes']:
if node_id == n['node_id']:
node = n
break
if not node:
print('CRITICAL: Node {} not found in {}'.format(
node_id,
meshviewer_url,
))
exit(2)
if not node['is_online']:
print('CRITICAL: Node "{}" is offline!'.format(
node['hostname'],
))
exit(2)
crit = set()
warn = set()
if node['loadavg'] > 1:
warn.add('has high load: {}'.format(
node['loadavg'],
))
if node['rootfs_usage'] > 0.9:
crit.add('rootfs usage is {}%'.format(
int(node['rootfs_usage']*100)
))
elif node['rootfs_usage'] > 0.8:
warn.add('rootfs usage is {}%'.format(
int(node['rootfs_usage']*100)
))
if node['memory_usage'] > 0.9:
crit.add('ram usage is {}%'.format(
int(node['memory_usage']*100)
))
elif node['memory_usage'] > 0.8:
warn.add('ram usage is {}%'.format(
int(node['memory_usage']*100)
))
for line in sorted(crit):
print('CRITICAL: Node "{}" {}'.format(
node['hostname'],
line,
))
for line in sorted(warn):
print('WARNING: Node "{}" {}'.format(
node['hostname'],
line,
))
if crit:
exit(2)
elif warn:
exit(1)
else:
print('Node "{}" reports no errors'.format(
node['hostname'],
))
exit(0)
except Exception as e:
print(repr(e))
exit(3)

View file

@ -25,6 +25,13 @@ object CheckCommand "dummy_hostalive" {
command = [ "true" ]
}
object CheckCommand "check_freifunk_node" {
import "plugin-check-command"
import "ipv4-or-ipv6"
command = [ "/usr/local/share/icinga/plugins/check_freifunk_node", "$url$", "$id$" ]
}
object CheckCommand "check_http_wget" {
import "plugin-check-command"
import "ipv4-or-ipv6"