Hi,

I have put together a perl module named 'Net::ZKMon',  a wrapper
module around the ZooKeeper's 4-letter word commands meant for
zookeeper monitoring.

This module is written and meant to the serve the purpose of
  -  providing a perl interface to executing 4-letter command as just
another perl function,
  -  having the monitoring data in a structured perl references
  - and attempting to reduce the pains/overhead/hassle involved in
parsing the entire monitoring data when the 4-letter words are
executed.

This is a very initial bare-bones release seeding the thought of
wrapping around the monitoring with perl's style of doing things. Its
in a very nascent stages with incomplete set of documentation as of
yet, however I hope to see it being used as a plugin module required
for other sorts of monitoring systems like
collectd/nagios/ganglia/cacti (for both alerting & graphing) for
monitoring Zookeeper, with full documentation soon. The package will
also get to have more examples for easier integration with general
monitoring systems.

About Apache ZooKeeper 4-letter words/commands :
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkCommands

Source of the code is available and published at
http://search.cpan.org/~mnikhil/Net-ZKMon/

I am also open for the ideas/suggestions/ improvements/collaboration.
Please feel free to fork the code yourself at github here :
https://github.com/mnikhil-git/p5-Net-ZKMon

An Example:
===========
#!/usr/bin/perl
use strict;
use Net::ZKMon;

my $hosta = 'host1.prod.mycompany.com';
my $hostb = 'host2.prod.mycompany.com';
my $hostc = 'host3.prod.mycompany.com';
my $hostd = 'host4.prod.mycompany.com';
my $hoste = 'host5.prod.mycompany.com';

my @zcluster = ( $hosta , $hostb , $hostc, $hostd, $hoste );

my $zkmon = new Net::ZKMon(hostname => $hosta);

print $hosta, ": version : ", $zkmon->stat->{'version'}, "\n\n";
foreach my $h (@zcluster) {
   my $h_srvr = $zkmon->stat($h);
   print "Node: $h  --> $h_srvr->{version} | $h_srvr->{Mode} |
$h_srvr->{Zxid}  | $h_srvr->{'Node count'} ",
          " | $h_srvr->{min_latency} | $h_srvr->{max_latency} |
$h_srvr->{avg_latency} \n";
}

Output:

host1.prod.mycompany.com  version : 3.3.4

Node: host1.prod.mycompany.com  --> 3.3.4 | follower | 0x50003ad60  |
18  | 0 | 753 | 0
Node: host2.prod.mycompany.com  --> 3.3.4 | follower | 0x50003ad60  |
18  | 0 | 53 | 0
Node: host3.prod.mycompany.com  --> 3.3.4 | follower | 0x50003ad60  |
18  | 0 | 9 | 1
Node: host4.prod.mycompany.com  --> 3.3.4 | follower | 0x50003ad60  |
18  | 0 | 752 | 0
Node: host5.prod.mycompany.com  --> 3.3.4 | leader   | 0x50003ad60  |
18  | 0 | 252 | 0

Thanks,
Nikhil

Reply via email to