-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
use POSIX; | |
use Getopt::Std; | |
getopt('h'); | |
################################################################## | |
# Monitoring JMX by Radek Antoniuk <[email protected]> # | |
################################################################## | |
# 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