munin-contrib/plugins/ultramonkey/ultramonkey-l7

139 lines
3.3 KiB
Perl
Executable File

#!/usr/bin/env perl
use strict;
use warnings;
# must be run as root
my $L7VSADM = q{ /usr/sbin/l7vsadm };
if ( defined $ARGV[0] and $ARGV[0] eq 'autoconf' ) {
get_autoconf();
}
elsif ( defined $ARGV[0] and $ARGV[0] eq 'config' ) {
get_config();
}
else {
get_value();
}
exit 0;
# -------------------------------------------------------------------------- #
sub get_autoconf
{
`$L7VSADM`;
if ( $? ) {
print qq{no ($L7VSADM something wrong ...)\n};
} else {
print qq{yes\n};
}
}
sub get_config
{
my %l7vsadm = get_l7vsadm();
# print graph config
my $graph_order = join q{ }, keys %l7vsadm;
print << "END_graph_";
graph_title Connections
graph_args --base 1000 -l 0
graph_vlabel connections / sec
graph_info UltraMonkey-L7 Connections
graph_category loadbalancer
graph_order $graph_order
END_graph_
# print graph config detail each hosts
foreach my $host ( sort keys %l7vsadm ) {
print << "END_hosts_";
$host.label $host
$host.type COUNTER
$host.draw AREASTACK
END_hosts_
}
}
sub get_value
{
my %l7vsadm = get_l7vsadm();
foreach my $host ( sort keys %l7vsadm ) {
my $value = $l7vsadm{$host}->{InactConn};
print qq{$host.value $value\n};
}
}
sub get_l7vsadm
{
my @l7vsadm_output = `$L7VSADM`;
if ( $? ) {
exit 1;
}
my @lines = map { s{ \s* -> \s* }{}xms; $_ } grep /->/, @l7vsadm_output;
my $header = shift @lines;
my @header_columns = split /\s+/, $header;
shift @header_columns;
my %l7vsadm = ();
foreach ( @lines ) {
my ( $host, @values ) = split /\s+/, $_;
my %value_hash = ();
@value_hash{ @header_columns } = @values;
$l7vsadm{$host} = \%value_hash;
}
%l7vsadm;
}
__END__
# -------------------------------------------------------------------------- #
This program must be run as root.
add settings like below.
--- /etc/munin/plugin-conf.d/munin-node ---
[ultramonkeyl7]
user root
--- /etc/munin/plugin-conf.d/munin-node ---
# -------------------------------------------------------------------------- #
get_l7vsadm : l7vsadm output to hash
--- l7vsadm output ---
Layer-7 Virtual Server version 3.0.1
Prot LocalAddress:Port ProtoMod Scheduler
-> RemoteAddress:Port Forward Weight ActiveConn InactConn
TCP ldb001:mysql sessionless lc
-> db002:mysql Masq 1 0 2796
-> db003:mysql Masq 1 0 259
-> db004:mysql Masq 1 0 6
--- l7vsadm output ---
--- hash ---
$VAR1 = {
'db002:mysql' => {
'ActiveConn' => '0',
'Forward' => 'Masq',
'InactConn' => '2796',
'Weight' => '1'
},
'db003:mysql' => {
'ActiveConn' => '0',
'Forward' => 'Masq',
'InactConn' => '259',
'Weight' => '1'
},
'db004:mysql' => {
'ActiveConn' => '0',
'Forward' => 'Masq',
'InactConn' => '6',
'Weight' => '1'
},
--- hash ---