munin_tomcat_threads

munin_tomcat_threads

tomcatのスレッドを監視しておかしなスレッドがたまっていないか調べる必要がでてきた。

そこで、muninで監視するスクリプトを見つけたが、ちょっとちがったのと、個別のスレッドの状態までは確認できなかったので、自作しました。
ただ、perlがよくわからんので、そこはまねっこです。

use strict;
use Switch '__';

my $ret = undef;

if(!eval "require LWP::UserAgent;") {
    $ret = "LWP::UserAgent not found";
}

if(!eval "require XML::LibXML;") {
    $ret .= "XML::Simple not found";
} 

my $URL       = exists $ENV{'url'}       ? $ENV{'url'}       : "http://%s:%s\@127.0.0.1:%d/manager/status?XML=true";
my $PORT      = exists $ENV{'ports'}     ? $ENV{'ports'}     : 8080;
my $USER      = exists $ENV{'user'}      ? $ENV{'user'}      : "user";
my $PASSWORD  = exists $ENV{'password'}  ? $ENV{'password'}  : "password";
my $TIMEOUT   = exists $ENV{'timeout'}   ? $ENV{'timeout'}   : 30;
my $CONNECTOR = exists $ENV{'connector'} ? $ENV{'connector'} : "jk-8009";

my $url = sprintf $URL, $USER, $PASSWORD, $PORT;

if(exists $ARGV[0] and $ARGV[0] eq "autoconf") {
    if($ret) {
	print "no ($ret)\n";
	exit 1;
    }
    my $au = LWP::UserAgent->new(timeout => $TIMEOUT);
    my $repsonse = $au->request(HTTP::Request->new('GET',$url));
    if($repsonse->is_success and $repsonse->content =~ /<status>.*< \/status>/im) {
	print "yes\n";
	exit 0;
    } else {
	print "no (no tomcat status)\n";
	exit 1;
    }
}

if(exists $ARGV[0] and $ARGV[0] eq "config") {
    print "graph_title Tomcat current threads ($CONNECTOR) \n";
    print "graph_args --base 1000 -l 0\n";
    print "graph_vlabel current thread / count \n";
    print "graph_category tomcat\n";
    print "parse.label Parse and prepare request \n";
    print "parse.max 150\n";
    print "parse.min 0\n";

    print "service.label Service\n";
    #print "service.type DERIVE\n";
    print "service.max 150\n";
    print "service.min 0\n";

    print "finishing.label Finishing\n";;
    print "finishing.max 150\n";
    print "finishing.min 0\n";

    print "ready.label Ready \n";
    print "ready.max 150\n";
    print "ready.min 0\n";

    print "keepalive.label Keepalive\n";
    print "keepalive.max 150\n";
    print "keepalive.min 0\n";
    exit 0;
}

my $ua = LWP::UserAgent->new(timeout => $TIMEOUT);
my $response = $ua->request(HTTP::Request->new('GET',$url));
my $xml = XML::LibXML->new->parse_string($response->content);

my $pNum = 0;
my $sNum = 0;
my $fNum = 0;
my $rNum = 0;
my $kNum = 0;

my @nodeList = $xml->getElementsByTagName('connector');
foreach my $conn (@nodeList){
  my $name = $conn->getAttribute('name');
  if($name eq $CONNECTOR){
    my @workers = $conn->getElementsByTagName('worker');
    foreach my $worker (@workers){
      my $stage = $worker->getAttribute("stage");
      switch ($stage){
	case 'P'	{ $pNum++; }
	case 'S'	{ $sNum++; }
	case 'F'	{ $fNum++; }
	case 'R'	{ $rNum++; }
	case 'K'	{ $kNum++; }
	else		{ }
      }
    }
  }
}

print "parse.value $pNum\n";
print "service.value $sNum\n";
print "finishing.value $fNum\n";
print "ready.value $rNum\n";
print "keepalive.value $kNum\n";

関連記事

One Response to “Muninでtomcatのスレッド状況を監視”

Leave a Reply

Spam protection by WP Captcha-Free

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年3月
    4月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

カスタム検索
RSS
Add to Google
にほんブログ村 IT技術ブログへ