Nagios check mk
From Proxmox VE
This is a check for the Nagios check addon "check_mk" (http://mathias-kettner.de/check_mk.html). The idea is that only VM's that are running while doing the inventory are getting monitored. If a VM is added or removed do a:
check_mk -II tcp proxmoxservername
The check also collects performance data for %CPU load caused by the VM and % of memory consumption of the VM.
Client-Check
/usr/lib/check_mk_agent/plugins/mh_qemu
#!/bin/sh
# check_mk check f. LSI Controller
#
# 10/2010 Matthias Henze
# Lizenz: GPL v2
# sampel output
# 101 oracle stopped 1024 8.00 0
# 102 server running 3072 50.00 2634
# 103 monitoring running 2048 32.00 5139
# 104 nagios running 1024 32.00 9030
if which qm >/dev/null ; then
echo '<<<qemu>>>'
qm list | grep -v VMID | while read L
do
PID=$(echo $L | awk -- '{print $6}')
if [ $PID -gt 0 ]; then
DATA=$(top -p $PID -n 1 -b | tail -n 2 | head -n 1 | awk -- '{print $9" "$10}')
else
DATA=""
fi
echo $L" "$DATA
done
fi
Plugin
/omd/versions/0.44/share/check_mk/checks/qemu
The path asumes the use of OMD (Open source Monitoring Distribution).
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# check_mk check f. LSI Controlle
#
# 12/2010 Matthias Henze
# Lizenz: GPL v2
# Example output from agent:
#<<<qemu>>>
# VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID CUP RAM
# 101 oracle stopped 1024 8.00 0 0 0
# 102 server running 3072 50.00 2634 0 0
# 103 monitoring running 2048 32.00 5139 0 0
# 104 nagios running 1024 32.00 9030 0 0
# inventory
def inventory_qemu(checkname, info):
inventory = []
for line in info:
if line[2] == "running": # only VM's running while inventory are monitored !
vm = line[0]
inventory.append( (vm, None) )
return inventory
# check
def check_qemu(item, param, info):
for line in info:
perfdata = []
if line[0] == item:
name = line[1]
status = line[2]
ram = line[4]
infotext = "%s (id: %s, name: %s ram: %s MB)" % (status, item, name, ram)
if status == "running":
perfdata.append( ( "CPU%", int(round(float(line[6]))) ) )
perfdata.append( ( "RAM%", int(round(float(line[7]))) ) )
return (0, "OK - status is " + infotext, perfdata)
else:
return (2, "CRITICAL - status is " + infotext, perfdata)
return (3, "UNKNOWN - VM %s not found in agent output" % item)
# declare the check to Check_MK
check_info['qemu'] = \
(check_qemu, "QEMU VM %s", 1, inventory_qemu)
