|
以前做过通过jmx监控单个tomcat实例,但是有的时候公司一台服务器上有10个tomcat容器那怎么办呢,来吧往下看吧
1,注意操作文件路径:
zabbix安装路径; /data/zabbix/etc/zabbix_agentd.conf.d/jmx_discovery.sh
/etc/zabbix/zabbix_agentd.conf 配置文件中 UnsafeUserParameters=1 必须打开,否则模板的自动发现功能报错。
该模板的监控和触发属性在自动发现中配置,所以导入模板后,下属的监控项和触发器等都为空。需要等一会儿,数据等还会出来。
操作步骤:
1、上传 catalina-jmx-remote.jar,cmdline-jmxclient-0.10.3.jar到 /lib下jmx_discovery.sh 和 add_service_tomcat.sh 到 /data/zabbix/etc/zabbix_agentd.conf.d/目录下
2、给 add_service_tomcat.sh 赋执行权限,并执行
3、zabbix服务端对主机添加模版
脚本说明:
add_service_tomcat.sh
#!/bin/bash
#因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。
t_datadir=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`
tomcat_no=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`
n_port=9999 #配置监控初始端口
local_ip=`ifconfig em4 |awk -F '[ :]+' 'NR==2 {print $4}'` #提取主机IP
for tomcat in $t_datadir
do
m_no=`cat -n $tomcat/bin/catalina.sh|grep 'Execute The Requested Command'|awk '{print $1}'` #提取代码插入位置
cp $tomcat/bin/catalina.sh $tomcat/bin/catalina.sh_bak #备份catalina.sh
#cp /tmp/catalina-jmx-remote.jar $tomcat/lib/catalina-jmx-remote.jar #复制文件到实例lib目录
sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"' $tomcat/bin/catalina.sh #插入监控配置
let "m_no=m_no+1" #设置行号
sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname='$local_ip'"' $tomcat/bin/catalina.sh #插入监控配置
let "m_no=m_no+1" #设置行号
sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port='$n_port'"' $tomcat/bin/catalina.sh #插入监控配置
let "m_no=m_no+1" #设置行号
sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"' $tomcat/bin/catalina.sh #插入监控配置
let "m_no=m_no+1" #设置行号
sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"' $tomcat/bin/catalina.sh #插入监控配置
let "n_port=n_port+1"
done
local_ip=`ifconfig em4 |awk -F '[ :]+' 'NR==2 {print $4}'` #提取主机IP
cat >> /data/zabbix/zabbix_agentd.conf.d/tomcat.conf &1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.System.status
,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=OperatingSystem \$2 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.HeapMemoryUsage.status
,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.NonHeapMemoryUsage.status
,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}'
UserParameter=java.LoadClass.status
,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=ClassLoading \$2 2>&1 |awk '{print \$NF}'
UserParameter=java.Threading.status
,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Threading \$2 2>&1 |awk '{print \$NF}'
END
chmod +x /data/zabbix/etc/zabbix_agentd.conf.d/jmx_discovery.sh 然后执行脚本
jmx_discovery.sh:
#!/bin/bash
#因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。
t_datadir=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`
tomcat_no=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`
n_port=9999 #配置监控初始端口
i=1
printf '{"data":[\n'
for tomcat in $t_datadir #输出JSON文件
do
t_service=`echo "$tomcat"|awk -F"/" '{print $(NF)}'`
if [ "$i" != ${tomcat_no} ];then
printf "\t\t{ \n"
printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"
else
printf "\t\t{ \n"
printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"
fi
let "n_port=n_port+1"
let "i=i+1"
done
tomcat监控模板如下:
3.0
2016-06-08T01:26:24Z
Templates
Template for Tomcat
Template for Tomcat
Templates
Tomcat_内存
Tomcat_类
Tomcat_系统
Tomcat_线程
Tomcat_运行时间
Tomcat Server
0
java.jmx.discovery
30
0
0
0
0
0
0
{#JMX_PORT}
8
A
30
发现查找tomcat服务
{#JAVA_NAME} 堆内存提交值:
0
0
java.HeapMemoryUsage.status[{#JMX_PORT},committed]
30
7
30
0
3
B
0
0
0
0
1
0
0
java提交内存
0
Tomcat_内存
{#JAVA_NAME} 堆内存最大值:
0
0
java.HeapMemoryUsage.status[{#JMX_PORT},max]
30
7
30
0
3
B
0
0
0
0
1
0
0
java最大使用内存
0
Tomcat_内存
{#JAVA_NAME} 堆内存使用值:
0
0
java.HeapMemoryUsage.status[{#JMX_PORT},used]
30
7
30
0
3
B
0
0
0
0
1
0
0
java使用内存
0
Tomcat_内存
{#JAVA_NAME} 已加装当前类的数量:
0
0
java.LoadClass.status[{#JMX_PORT},LoadedClassCount]
30
7
30
0
3
0
0
0
0
1
0
0
加载的类
0
Tomcat_类
{#JAVA_NAME} 已加载类总数:
0
0
java.LoadClass.status[{#JMX_PORT},TotalLoadedClassCount]
30
7
30
0
3
0
0
0
0
1
0
0
总共加载过的类个数
0
Tomcat_类
{#JAVA_NAME} 已卸载类的数量:
0
0
java.LoadClass.status[{#JMX_PORT},UnloadedClassCount]
60
7
30
0
3
0
0
0
0
1
0
0
卸载回收类个数
0
Tomcat_类
{#JAVA_NAME} 被挂起的对象的计数:
0
0
java.Memory.status[{#JMX_PORT},ObjectPendingFinalizationCount]
30
7
30
0
3
0
0
0
0
1
0
0
0
Tomcat_内存
{#JAVA_NAME} 非堆内存提交值:
0
0
java.NonHeapMemoryUsage.status[{#JMX_PORT},committed]
60
7
30
0
3
B
0
0
0
0
1
0
0
堆内存提交大小
0
Tomcat_内存
{#JAVA_NAME} 非堆内存最大值:
0
0
java.NonHeapMemoryUsage.status[{#JMX_PORT},max]
60
7
30
0
3
B
0
0
0
0
1
0
0
堆内存最大值
0
Tomcat_内存
{#JAVA_NAME} 非堆内存使用值:
0
0
java.NonHeapMemoryUsage.status[{#JMX_PORT},used]
60
7
30
0
3
B
0
0
0
0
1
0
0
堆内存使用大小
0
Tomcat_内存
{#JAVA_NAME} JVM启动时间:
0
0
java.Runtime.status[{#JMX_PORT},Uptime]
60
7
30
0
3
uptime
0
0
0
0
1
0
0
0
Tomcat_运行时间
{#JAVA_NAME} JVM名称:
0
0
java.Runtime.status[{#JMX_PORT},VmName]
30
7
0
0
4
0
0
0
0
1
0
0
0
Tomcat_运行时间
{#JAVA_NAME} JVM版本:
0
0
java.Runtime.status[{#JMX_PORT},VmVersion]
60
7
0
0
1
0
0
0
0
1
0
0
0
Tomcat_运行时间
{#JAVA_NAME} 系统可打开最大打开文件数:
0
0
java.System.status[{#JMX_PORT},MaxFileDescriptorCount]
60
7
30
0
3
0
0
0
0
1
0
0
0
Tomcat_系统
{#JAVA_NAME} 系统应用当前打开文件数:
0
0
java.System.status[{#JMX_PORT},OpenFileDescriptorCount]
60
7
30
0
3
0
0
0
0
1
0
0
0
Tomcat_系统
{#JAVA_NAME} 系统平均负载:
0
0
java.System.status[{#JMX_PORT},SystemLoadAverage]
60
7
30
0
0
%
0
0
0
0
1
0
0
0
Tomcat_系统
{#JAVA_NAME} 守护程序线程数:
0
0
java.Threading.status[{#JMX_PORT},DaemonThreadCount]
30
7
30
0
3
0
0
0
0
1
0
0
0
Tomcat_线程
{#JAVA_NAME} 线程峰值数:
0
0
java.Threading.status[{#JMX_PORT},PeakThreadCount]
60
7
30
0
3
0
0
0
0
1
0
0
活动线程峰值个数
0
Tomcat_线程
{#JAVA_NAME} 活动线程计数:
0
0
java.Threading.status[{#JMX_PORT},ThreadCount]
60
7
30
0
3
0
0
0
0
1
0
0
运行tomcat的活动线程
0
Tomcat_线程
{#JAVA_NAME} 启动的线程总数:
0
0
java.Threading.status[{#JMX_PORT},TotalStartedThreadCount]
30
7
30
0
3
0
0
0
0
1
0
0
线程总个数
0
Tomcat_线程
{Template for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},used].last()}>({Template for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},max].last()}*0.7)
{#JAVA_NAME} 堆内存使用率超过70%
0
1
0
{Template for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},committed].last()}={Template for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},max].last()}
{#JAVA_NAME} 堆内存提交值达到最大限制.
1
1
0
{Template for Tomcat:java.System.status[{#JMX_PORT},SystemLoadAverage].last()}>50
{#JAVA_NAME} 当前应用占用系统负载大于50%
0
1
0
{Template for Tomcat:java.System.status[{#JMX_PORT},OpenFileDescriptorCount].last()}>({Template for Tomcat:java.System.status[{#JMX_PORT},MaxFileDescriptorCount].last()}*0.7)
{#JAVA_NAME} 当前应用打开文件数已占用系统最大70%
0
1
0
{Template for Tomcat:java.NonHeapMemoryUsage.status[{#JMX_PORT},used].last()}>({Template for Tomcat:java.NonHeapMemoryUsage.status[{#JMX_PORT},max].last()}*0.7)
{#JAVA_NAME} 非堆内存使用率超过70%
0
1
0
堆对象内存状态:{#JAVA_NAME}
900
200
0.0000
100.0000
1
1
0
1
0
0.0000
0.0000
0
0
0
0
0
0
00C800
0
2
0
Template for Tomcat
java.HeapMemoryUsage.status[{#JMX_PORT},committed]
1
0
C80000
0
2
0
Template for Tomcat
java.HeapMemoryUsage.status[{#JMX_PORT},max]
2
0
0000C8
0
2
0
Template for Tomcat
java.HeapMemoryUsage.status[{#JMX_PORT},used]
类状态:{#JAVA_NAME}
900
200
0.0000
100.0000
1
1
0
1
0
0.0000
0.0000
0
0
0
0
0
0
00C800
0
2
0
Template for Tomcat
java.LoadClass.status[{#JMX_PORT},UnloadedClassCount]
1
0
C80000
0
2
0
Template for Tomcat
java.LoadClass.status[{#JMX_PORT},LoadedClassCount]
2
0
0000C8
0
2
0
Template for Tomcat
java.LoadClass.status[{#JMX_PORT},TotalLoadedClassCount]
系统打开文件系统数:{#JAVA_NAME}
900
200
0.0000
100.0000
1
1
0
1
0
0.0000
0.0000
0
0
0
0
0
0
1A7C11
0
2
0
Template for Tomcat
java.System.status[{#JMX_PORT},MaxFileDescriptorCount]
1
0
F63100
0
2
0
Template for Tomcat
java.System.status[{#JMX_PORT},OpenFileDescriptorCount]
2
0
2774A4
0
2
0
Template for Tomcat
java.System.status[{#JMX_PORT},SystemLoadAverage]
线程状态:{#JAVA_NAME}
900
200
0.0000
100.0000
1
1
0
1
0
0.0000
0.0000
0
0
0
0
0
0
00C800
0
2
0
Template for Tomcat
java.Threading.status[{#JMX_PORT},ThreadCount]
1
0
C80000
0
2
0
Template for Tomcat
java.Threading.status[{#JMX_PORT},PeakThreadCount]
2
0
0000C8
0
2
0
Template for Tomcat
java.Threading.status[{#JMX_PORT},TotalStartedThreadCount]
非堆对象内存状态:{#JAVA_NAME}
900
200
0.0000
100.0000
1
1
0
1
0
0.0000
0.0000
0
0
0
0
0
0
1A7C11
0
2
0
Template for Tomcat
java.NonHeapMemoryUsage.status[{#JMX_PORT},used]
1
0
F63100
0
2
0
Template for Tomcat
java.NonHeapMemoryUsage.status[{#JMX_PORT},committed]
2
0
2774A4
0
2
0
Template for Tomcat
java.NonHeapMemoryUsage.status[{#JMX_PORT},max]
然后等5分钟左右,一主机N实例监控tomcat完成,拿走不谢!注意根据实际路径修改!有人说出现导入模板不支持的情况:
第一步:检查key文件脚本路径和自定义键值
第二步:检查/lib下是否有cmdline-jmxclient-0.10.3.jar包
到此如有问题请点个赞,然后留言解答。
name:系统运维工程师 李超!
|
|