From e342c815dc96262d24e103e683db838ed3f8909d Mon Sep 17 00:00:00 2001 From: Tim Smith Date: Mon, 9 Apr 2012 10:32:15 -0700 Subject: [PATCH 1/3] Add plugin for Voldemort NoSQL data store to pull throughput and call stats --- plugins/voldemort/voldemort | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 plugins/voldemort/voldemort diff --git a/plugins/voldemort/voldemort b/plugins/voldemort/voldemort new file mode 100644 index 00000000..d10873b8 --- /dev/null +++ b/plugins/voldemort/voldemort @@ -0,0 +1,64 @@ +#!/usr/bin/env jruby + +# Description: Voldemort plugin to pull basic stats on throughput and number of calls into Munin +# Author: Peter Crossley - Webtrends Inc + +require 'rubygems' +require 'jmx4r' + + +#%# family=auto +#%# capabilities=autoconf + +# friendly name => result of listPerfStatsKeys via JMX +keys = { + "Throughput" => { "vlabel" => "rate", + "type" => "ABSOLUTE", + "values" => ["all_operation_throughput","delete_throughput", "get_all_throughput", "get_throughput", "put_throughput"] + }, + "Number of Calls" => { "vlabel" => "counts", + "type" => "COUNTER", + "values" => ["number_of_calls_to_delete","number_of_calls_to_get", "number_of_calls_to_get_all", + "number_of_calls_to_put", "number_of_exceptions"] + } +} + +if ARGV[0] == "config" + keys.each_key do |key| + puts "multigraph voldemort_#{key.gsub(" ", "_")}" + puts "graph_title #{key}" + puts "graph_scale no" + puts "graph_category voldemort" + puts "graph_vlabel #{keys[key]['vlabel']}" + for data in keys[key]['values'] do + puts "#{data}.type #{keys[key]['type']}" + puts "#{data}.label #{data.gsub("_", " ")}" + end + puts + end + exit 0 +elsif ARGV[0] == "autoconf" + puts "yes" + exit 0 +else + + # Add JMX port + # JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=5400 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" + # Tell JBossAS to use the platform MBean server + # JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver" + # Make the platform MBean server able to work with JBossAS MBeans + # JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl" + # JBOSS_CLASSPATH="/opt/webtrends/jboss/bin/mbean" + JMX::MBean.establish_connection :port => 5400 + vs = JMX::MBean.find_by_name "voldemort.store.stats.aggregate:type=aggregate-perf" + + keys.each_key do |key| + puts "multigraph voldemort_#{key.gsub(" ", "_")}" + for data in keys[key]['values'] do + puts "#{data}.value #{begin vs.send("#{data}") rescue 0 end}" + end + puts + end +end + + From 6bc704a19a75b45743f98c0bb0b84de03bc3b95d Mon Sep 17 00:00:00 2001 From: Igor Borodikhin Date: Tue, 10 Apr 2012 12:40:37 +0600 Subject: [PATCH 2/3] New plugin for KVM network stats. It works without root privileges and applicable to ProxmoxVE KVM. --- plugins/kvm/kvm_net | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/plugins/kvm/kvm_net b/plugins/kvm/kvm_net index 81c99073..ed2b7caf 100755 --- a/plugins/kvm/kvm_net +++ b/plugins/kvm/kvm_net @@ -4,12 +4,10 @@ # # Munin plugin to show the network I/O per vm # -# Copyright Maxence Dunnewind, Rodolphe QuiƩdeville +# Copyright Igor Borodikhin # # License : GPLv3 # -# need to be run with root privilege to execute brctl -# # # parsed environment variables: # vmsuffix: part of vm name to be removed @@ -58,22 +56,18 @@ def fetch(vms): ''' Fetch values for a list of pids @param dictionnary {kvm_pid: cleaned vm name} ''' - macs = find_vms_tap() res = {} for pid in vms: - mac = get_vm_mac(pid) + tap = get_vm_mac(pid) try: - tap = "tap%s" % macs[mac] - f = open("/proc/net/dev", "r") - for line in f.readlines(): - if tap in line: - line = line.split(':')[1] - print "%s_in.value %s" % (vms[pid], line.split()[0]) - print "%s_out.value %s" % (vms[pid], line.split()[8]) - break - else: - f.close() - except: + f = open("/proc/net/dev", "r") + for line in f.readlines(): + if tap in line: + print "%s_in.value %s" % (vms[pid], re.sub(r"%s:"%tap, "", line.split()[0])) + print "%s_out.value %s" % (vms[pid], line.split()[8]) + break + except Exception as inst: + print inst continue def detect_kvm(): @@ -98,7 +92,8 @@ def get_vm_mac(pid): @return the mac address for a specified pid ''' cmdline = open("/proc/%s/cmdline" % pid, "r") - mac = re.sub(r"^.*macaddr=(..:..:..:..:..:..).*$",r"\1", cmdline.readline()) + line = cmdline.readline() + mac = re.sub(r"^.*ifname=(tap[^,]+),.*$",r"\1", line) return mac def list_pids(): @@ -112,16 +107,21 @@ def find_vms_tap(): ''' Check if kvm is installed @return a list of pids from running kvm ''' - result = {} - kvm = Popen("brctl showmacs br0 | grep no", shell=True, stdout=PIPE) + result = [] + tap = "" + mac = "" + kvm = Popen("ip a | grep -A 1 tap | awk '{print $2}' | grep -v '^$'", shell=True, stdout=PIPE) res = kvm.communicate()[0].split('\n') for line in res: try: - tap = str(int(line.split()[0]) - 1) - mac = line.split()[1] - result[mac] = tap - except: + if len(line) > 0: + if re.match(r"^tap.*", line): + tap = re.sub(r"(tap[^:]+):", r"\1", line) + else: + result.append(tap) + except Exception as inst: continue + return result if __name__ == "__main__": From a160dea03441697330d6b326978ebd0cd6891443 Mon Sep 17 00:00:00 2001 From: Maxim Kravets Date: Wed, 11 Apr 2012 16:08:02 +0600 Subject: [PATCH 3/3] Proper shebang for flexibility --- plugins/weather/weather_press_ | 2 +- plugins/weather/weather_temp_ | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/weather/weather_press_ b/plugins/weather/weather_press_ index abcf5de5..28c28ba3 100755 --- a/plugins/weather/weather_press_ +++ b/plugins/weather/weather_press_ @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """ munin US NOAA weather plugin (http://weather.noaa.gov) diff --git a/plugins/weather/weather_temp_ b/plugins/weather/weather_temp_ index 321031de..5cd74b55 100755 --- a/plugins/weather/weather_temp_ +++ b/plugins/weather/weather_temp_ @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """ munin US NOAA weather plugin (http://weather.noaa.gov)