使用Nagios Core和jmx4perl监视Tomcat

时间:2020-03-21 11:47:35  来源:igfitidea点击:

本文用作Nagios插件check_jmx4perl的参考,并不旨在提供任何安装或者配置说明。

Nagios环境

我们的环境:

  • CentOS7
  • Nagios核心4.3.4
  • jmx4perl 1.12

JMX(Java管理扩展)是Java世界中的标准管理解决方案。

  • jmx4perl是用于收集JMX信息的CLI工具,
  • check_jmx4perl是一个Nagios插件,用于远程访问JMX数据。

以下是我们的应用程序服务器以及代理可访问的URL的摘要。

# jmx4perl http://example.com/j4psecured
Name:

Apache Tomcat
Vendor:    Apache
Version:   8.0.35

以下内容可用于列出所有JMX MBean及其属性和操作:

# jmx4perl http://example.com/j4psecured list

插件版本:

# /usr/local/nagios/libexec/check_jmx4perl -V
check_jmx4perl 1.12 [http://www.jmx4perl.org]

使用jmx4perl监视Tomcat

别名是某些MBean属性和操作的快捷方式。

如何获取可用别名列表(输出被截断):

# perl -MJMX::Jmx4Perl::Alias -e 'JMX::Jmx4Perl::Alias::help'
CL_LOADED

attr Number of currently loaded classes
CL_TOTAL

attr Number of classes loaded in total
...
MEMORY_HEAP_MAX

attr Maximum available heap memory
MEMORY_HEAP_USED

attr Used heap memory
...
MEMORY_NONHEAP_MAX

attr Maximum available non-heap memory
MEMORY_NONHEAP_USED

attr Used non-heap memory (like a 'method area')
...
THREAD_COUNT

attr Active threads in the system
THREAD_COUNT_PEAK

attr Peak thread count
THREAD_COUNT_STARTED

attr Count of threads started since system start
...

如何检查可用的堆内存:

# ./check_jmx4perl --url http://example.com/j4psecured \
  --alias MEMORY_HEAP_MAX

如何检查已使用的堆内存:

# ./check_jmx4perl --url http://example.com/j4psecured \
  --alias MEMORY_HEAP_USED

如果愿意,我们可以使用MBean属性实现相同的目的:

# ./check_jmx4perl --url http://example.com/j4psecured \
  --mbean "java.lang:type=Memory" \
  --attribute HeapMemoryUsage \
  --path max
# ./check_jmx4perl --url http://example.com/j4psecured \
  --mbean "java.lang:type=Memory" \
  --attribute HeapMemoryUsage \
  --path used

现在,虽然收集实际值对于图形和表示目的是有用的,但是使它们的相对值在0 ...范围内是更好的。
我们可以配置Nagios在值达到90%时发送电子邮件。

如何检查已使用的堆内存是否少于可用内存的90%:

# ./check_jmx4perl --url http://example.com/j4psecured \
  --alias MEMORY_HEAP_USED \
  --base MEMORY_HEAP_MAX \
  --critical 90

与上面相同的结果,但是使用了MBean属性:

# ./check_jmx4perl --url http://example.com/j4psecured \
  --value "java.lang:type=Memory/HeapMemoryUsage/used" \
  --base "java.lang:type=Memory/HeapMemoryUsage/max" \
  --critical 90

如何检查垃圾收集时间:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --mbean "java.lang:type=GarbageCollector,name=PS MarkSweep" \
 --attribute CollectionTime \
 --name GC_CollectionTime

如何检查垃圾收集计数:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --mbean "java.lang:type=GarbageCollector,name=PS MarkSweep" \
 --attribute CollectionTime \
 --name GC_CollectionCount

如何检查在一小时(3600秒)内启动的线程数:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --alias THREAD_COUNT_STARTED \
 --delta 3600 \
 --critical 200

与系统启动以来启动的线程数相比,如何检查活动线程:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --alias THREAD_COUNT \
 --base THREAD_COUNT_STARTED

如何检查元空间使用情况:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --value "java.lang:type=MemoryPool,name=Metaspace/Usage/used" \
 --base "java.lang:type=MemoryPool,name=Metaspace/Usage/max" \
 --critical 90

如何检查代码缓存的使用情况:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --value "java.lang:type=MemoryPool,name=Code Cache/Usage/used" \
 --base "java.lang:type=MemoryPool,name=Code Cache/Usage/max" \
 --critical 95

如何检查已加载的类用法:

# ./check_jmx4perl --url http://example.com/j4psecured \
 --alias CL_LOADED \
 --base CL_TOTAL \
 --critical 95