/usr/share/munin/plugins/libvirt-mem is in munin-libvirt-plugins 0.0.6-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #!/usr/bin/python
# vim: set fileencoding=utf-8 :
#
# Munin plugin to show the amount of memory used by libvirt managed virtual
# machines
#
# Copyright 2008 Guido Guenther <agx@sigxcpu.org>
#
# License: GPLv2
#
# depends: python-libvirt
#
#%# capabilities=autoconf
#%# family=contrib
import re, sys, os
import libvirt
def canon(name):
return re.sub(r"[^a-zA-Z0-9_]", "_", name)
def print_config(uri):
"""print the plugin config, determine the domains"""
try:
conn = libvirt.openReadOnly(uri)
except libvirt.libvirtError, err:
print >>sys.stderr, "Error opening to %s connection: %s" % (uri, err)
return 1
hostname = conn.getHostname()
print """graph_title Virtual Domain Memory Usage
graph_vlabel Memory Usage / Bytes
graph_category Virtual Machines
graph_info This graph shows the current amount of memory used by each virtual machine
graph_args --base 1024 -l 0
host_mem.label %(hostname)s (host)
host_mem.type GAUGE
host_mem.min 0
host_mem.draw LINE1
host_mem.info total memory of host '%(hostname)s'
total.type GAUGE
total.label total memory
total.info total memory used by virtual machines on host '%(hostname)s'
total.graph no
total.min 0
total_pc.type GAUGE
total_pc.label used memory percentage
total_pc.info memory in percent used by virtual machines on host '%(hostname)s'
total_pc.graph no
total_pc.min 0
total_pc.max 100
total_pc.warning 90
total_pc.critical 95
total_max.type GAUGE
total_max.label total max. mem
total_max.info maximum memory virtual machines can balloon to on host '%(hostname)s'
total_max.min 0
total_max_pc.type GAUGE
total_max_pc.label total maximum memory percentage
total_max_pc.graph no
total_max_pc.info maximum memory in percent virtual machines can balloon to on host '%(hostname)s'
total_max_pc.min 0""" % dict(hostname=hostname)
ids = conn.listDomainsID()
draw = "AREA"
for id in ids:
try:
dom = conn.lookupByID(id)
name = dom.name()
except libvirt.libvirtError, err:
print >>sys.stderr, "Id: %s: %s" % (id, err)
continue
if name == "Domain-0":
continue
print "%s_mem.label %s" % (canon(name), name)
print "%s_mem.type GAUGE" % canon(name)
print "%s_mem.min 0" % canon(name)
print "%s_mem.draw %s" % (canon(name), draw)
print "%s_mem.info memory used by virtual machine '%s'" % (canon(name), name)
if draw == "AREA":
draw = "STACK"
return 0
def fetch_values(uri):
total = 0
total_max = 0
try:
conn = libvirt.openReadOnly(uri)
except libvirt.libvirtError, err:
print >>sys.stderr, "Error opening to %s connection: %s" % (uri, err)
return 1
ids = conn.listDomainsID()
hostmem = conn.getInfo()[1] * 1024 * 1024
print "host_mem.value %d" % hostmem
for id in ids:
try:
dom = conn.lookupByID(id)
name = dom.name()
except libvirt.libvirtError, err:
print >>sys.stderr, "Id: %s: %s" % (id, err)
continue
if name == "Domain-0":
continue
maxmem, mem = dom.info()[1:3]
mem *= 1024
maxmem *= 1024
total += mem
total_max += maxmem
print "%s_mem.value %d" % (canon(name), mem)
print "total.value %d" % total
print "total_pc.value %.0f" % (100.0 * total / float(hostmem))
print "total_max.value %d" % total_max
print "total_max_pc.value %.0f" % (100.0 * total_max / float(hostmem))
return 0
def main(sys):
uri = os.getenv("uri", "qemu:///system")
if len(sys) > 1:
if sys[1] in [ 'autoconf', 'detect' ]:
if libvirt.openReadOnly(uri):
print "yes"
return 0
else:
print "no"
return 1
elif sys[1] == 'config':
return print_config(uri)
return fetch_values(uri)
if __name__ == "__main__":
sys.exit(main(sys.argv))
# vim:et:ts=4:sw=4:
|