Skip to content

Instantly share code, notes, and snippets.

@kchida
Forked from rantoniuk/check_jmx_params.pl
Created July 27, 2012 23:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kchida/3190977 to your computer and use it in GitHub Desktop.
Save kchida/3190977 to your computer and use it in GitHub Desktop.
check_jmx_params - Nagios script for monitoring Tomcat PermGen OldGen and currentThreads through JNDI JMX
#!/usr/bin/perl
use strict;
use warnings;
use POSIX;
use Getopt::Std;
getopt('h');
##################################################################
# Monitoring JMX by Radek Antoniuk <radek.antoniuk@gmail.com> #
##################################################################
# This script is checking PermGen space, OldGen space and Thread #
# usage (though it can be easily extended). By default is uses #
# 127.0.0.1:6999 to query Tomcat JMX for info #
# Warning and Critical Thresholds are defined below #
# The script is returning Performance Data (perfdata) #
##################################################################
# Usage: ./check_jmx_params #
# ./check_jmx_params -h 1.2.3.4:8888 #
##################################################################
my $warn = 0.8;
my $crit = 0.9;
###################################
my $retval = 0;
my $result = "JAVA ";
my $details = "";
my $perfdata = "";
my $proc = 0;
my $ret;
my $host = "127.0.0.1:6999";
our $opt_h;
if (defined($opt_h)){ $host = $opt_h; }
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=PS Perm Gen" -A Usage -K used -I Usage -J used -vvvv};
if ( $? > 0){
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=CMS Perm Gen" -A Usage -K used -I Usage -J used -vvvv};
}
if ( $? > 0){
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=Perm Gen" -A Usage -K used -I Usage -J used -vvvv};
}
if ($ret =~ /^JMX .+ Usage.used is ((\d+),committed=(\d+);init=(\d+);max=(\d+);used=(\d+))$/) {
if ( $2 > $crit * $5) { $retval = 2; }
elsif ( $2 > $warn * $5) { $retval = 1;}
$proc = ceil($2 / $5 * 100);
$details = "PermGen is $proc%; ";
$perfdata = "PermGen=$2B;".$warn*$5 .";".$crit*$5.";";
}
else {
exit(1);
}
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=PS Old Gen" -A Usage -K used -I Usage -J used -vvvv};
if ( $? > 0){
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=CMS Old Gen" -A Usage -K used -I Usage -J used -vvvv};
}
if ( $? > 0){
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O "java.lang:type=MemoryPool,name=Old Gen" -A Usage -K used -I Usage -J used -vvvv};
}
if ($ret =~ /^JMX .+ Usage.used is ((\d+),committed=(\d+);init=(\d+);max=(\d+);used=(\d+))$/) {
if ( $2 > $crit * $5) { $retval = 2;}
elsif ( $2 > $warn * $5) { $retval = 1; }
$proc = ceil($2 / $5 * 100);
$details .= "OldGen is $proc%; ";
$perfdata .= " OldGen=$2B;".$warn*$5 .";".$crit*$5.";";
}
else {
exit(1);
}
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O Catalina:type=ThreadPool,name=http-8080 -A currentThreadCount};
if ($ret =~ /currentThreadCount is (\d+)/) {
my $threads = $1;
$ret = qx{java -cp /usr/lib/nagios/plugins/jmxquery.jar jmxquery.JMXQuery -U service:jmx:rmi:///jndi/rmi://$host/jmxrmi -O Catalina:type=ThreadPool,name=http-8080 -A maxThreads};
if ( $ret =~ /maxThreads is (\d+)/ ){
if ( $threads > $crit * $1) { $retval = 2; }
elsif ( $threads > $warn * $1) { $retval = 1; }
$details .= "Threads is $threads/$1; ";
$perfdata .= " Threads=$threads;".$warn*$1.";".$crit*$1.";0;$1;";
}
}
if ($retval == 1) { $result .= "WARNING"; }
elsif ($retval == 2) { $result .= "CRITICAL"; }
else { $result .= "OK"; }
print "$result - $details|$perfdata\n";
exit($retval);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment