From fc964e5b01b9a98d16501cb884fe0967dfc9d8bb Mon Sep 17 00:00:00 2001 From: Terry Burton Date: Fri, 9 Jul 2010 13:39:47 +0200 Subject: [PATCH] Split reads and writes. Logarithmic scale for reads. Support for INET connections to ZEO monitor. --- plugins/other/zeo_monitor_ | 83 ++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/plugins/other/zeo_monitor_ b/plugins/other/zeo_monitor_ index 293059c0..60691989 100755 --- a/plugins/other/zeo_monitor_ +++ b/plugins/other/zeo_monitor_ @@ -1,30 +1,41 @@ #!/usr/bin/perl -Tw -# Plugin to monitor ZEO load, connected clients and errors/conflicts +# Plugin to monitor ZEO connected clients, reads, writes and errors/conflicts # # Author: Terry Burton # # Revisions: # # 1.0 2010/07/08 First version -# +# 1.1 2010/07/09 Split load into reads and writes +# Reads has logarithmic scale +# Adjust some scaling factors +# Support for INET connections, the new default # -# Invoke using symlinks to zeo_monitor_ in the form zeo_monitor_{load,clients,errors}_ +# Invoke using symlinks to zeo_monitor_ in the form zeo_monitor_{clients,reads,writes,errors}_ # -# Can be configured manually or by autoconf, for example: +# This plugin can be configured manually or by autoconf (provided that the ZEO +# monitor runs on the default port 8091.) # # root@munin:~ munin-node-configure --shell # ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_clients_1 # ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_clients_temp # ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_errors_1 # ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_errors_temp -# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_load_1 -# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_load_temp +# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_reads_1 +# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_reads_temp +# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_writes_1 +# ln -s /usr/share/munin/plugins/zeo_monitor_ /etc/munin/plugins/zeo_monitor_writes_temp # # # Configuration variables: # -# zeomonitorsock - path to the zeo monitor server socket (default /var/run/zeo/zeo-monitor.sock) +# zeomonitoraddr - address:port of the zeo monitor server socket (default 127.0.0.1:8091) +# zeomonitorsock - path to the zeo monitor server socket +# +# Note: This plugin will attempt to attach to the network socket given by +# zeomonitoraddr unless the path to a Unix domain socket is given with +# zeomonitorsock # # Parameters: # @@ -32,7 +43,15 @@ # autoconf # suggest # -# Configuration example: +# Configuration examples: +# +# Connect to the monitor server running on TCP/4567 +# +# [zeo_monitor_*] +# user root +# env.zeomonitoraddr 127.0.0.1:4567 +# +# Connect to the monitor server running on a Unix domain socket # # [zeo_monitor_*] # user root @@ -49,7 +68,9 @@ use Munin::Plugin; use File::Basename; use IO::Socket::UNIX qw(SOCK_STREAM); -my $zeomonitorsock = exists $ENV{'zeomonitorsock'} ? $ENV{'zeomonitorsock'} : '/var/run/zeo/zeo-monitor.sock'; +my $zeomonitoraddr = exists $ENV{'zeomonitoraddr'} ? $ENV{'zeomonitoraddr'} : '127.0.0.1:8091'; +($zeomonitoraddr)=$zeomonitoraddr=~/(.*)/; +my $zeomonitorsock = exists $ENV{'zeomonitorsock'} ? $ENV{'zeomonitorsock'} : ''; ($zeomonitorsock)=$zeomonitorsock=~/(.*)/; if (basename($0) !~ /^zeo_monitor_/) { @@ -88,14 +109,9 @@ if (defined $ARGV[0] and $ARGV[0] eq 'suggest') { my @storage_names; eval { @storage_names=parse_zeo_monitor(); }; + exit 0 if ( $@ ); - if ( $@ ) { - chomp $@; - print "no ($@)\n"; - exit 1; - } - - print "clients_$_\nload_$_\nerrors_$_\n" foreach @storage_names; + print "clients_$_\nreads_$_\nwrites_$_\nerrors_$_\n" foreach @storage_names; exit 0; } @@ -127,19 +143,24 @@ clients.type GAUGE EOF } -if ($mode eq 'load') { +if ($mode eq 'reads') { print <new(Type => SOCK_STREAM,Peer => $zeomonitorsock ) or die("Can't connect to socket: $!\n"); + my $socket; + if ($zeomonitorsock ne '') { + $socket=IO::Socket::UNIX->new(Type=>SOCK_STREAM,Peer=>$zeomonitorsock) or die("Can't connect to socket: $!\n"); + } else { + $socket=IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>$zeomonitoraddr) or die("Can't connect to port: $!\n"); + } my $response=join('',<$socket>); close $socket;