Zabbix对JAVA的jvm线程和内存做自定义脚本监控

Zabbix对JAVA的jvm线程和内存做自定义脚本监控

目的

公司需要对业务的Tomcat进程监控jvm内存以及线程,为后续优化做数据支撑。主要想知道:
1)业务低谷期资源使用情况。
2)业务高峰期资源使用情况。
思路
1)查看JVM内存使用jstart命令。查看JAVA线程jstack命令。
2)为减少工作量,在代理端脚本处理数据切割,缺点是CPU资源占用偏高(约5%)
3)zabbix获取脚本执行结果。
4)图像报表显示

本次注意事项

使用zabbix对JVM监控时遇到几个问题:

  1. zbabix自定义键值 ,zabbix的自定义键值,是需要将配置和脚本放在目标主机的zabbix_agent,需要重复复制脚本以及配置文件,并且需要重启zabbix_agent
  2. 获取到无效PID ,使用ps -ef|grep $JAVA_solename时,命令行执行时由于grep命令即起即停不会有grep的进程PID,但脚本中会过滤出grep命令的PID;
  3. 统一主机需要监控多个JAVA程序,zabbix模板如何降低工作量 ,zabbix的模板只能监控一个java进程,而为了降低工作量已经使用用户自定义宏参数$JAVA_solename,其他的JAVA进程怎么办,由于JAVA进程的数量不固定,无法写死几个宏参数,这里我使用的是复制模板,我司环境主机最多不会超过6个JAVA进程,故复制了6份监控模板;
  4. awk切割的$2与脚本参数$2冲突,脚本中切割数据$2冲突,需要将$2初始化,awk切割才可以生效。

zabbix键值配置

zabbix配置文件
加入zabbix_agent/conf/zabbix_agentd/中

jvm.conf

UserParameter=tomcat.jvm_[*],/bin/bash /tmp/tomcat_jvm.sh $1 $2

jstack_info.conf

UserParameter=tomcat.jstack_info_[*],/bin/bash /tmp/tomcat_jstack_info.sh $1 $2

脚本文件
/tmp/tomcat_jvm.sh
脚本参数$1是java的名称,$2是执行jstat的众多数据中需要取的数值。

[root@localhost sbin]# jstat -gc 32356
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
6656.0 7168.0  0.0   2912.0 684032.0 481881.8 1398272.0  1200891.1  134656.0 128537.8 15360.0 14356.6   3489   44.722   7      6.171   50.893
#!/bin/bash
javaPort=$1
javaPS=`ps -ef|grep $javaPort|grep -v 'grep '|grep -v 'tomcat_jvm.sh'`
javaPID=`echo $javaPS|awk '{print $2}'`
jstatName=(`jstat -gc $javaPID|head -n1`)
jstatKey=(`jstat -gc $javaPID|tail -n1`)
B=0
for A in ${jstatName[*]} ;do
if [ $A == $2 ];then
echo ${jstatKey[$B]}
fi
let B++
done

/tmp/tomcat_jstack_info.sh
脚本参数$1是java的名称,$2是执行jstack 安装进程状态过滤的状态名称。

#!/bin/bash
javaPort=$1
javaPS=`ps -ef|grep $javaPort|grep -v 'grep '|grep -v 'tomcat_jstack_info.sh'`
javaPID=`echo $javaPS|awk '{print $2}'`
if [ $2 == "TOTAL" ]; then
        echo `jstack $javaPID|grep "java.lang.Thread.State"|wc -l`
else 
        echo `jstack $javaPID|grep "java.lang.Thread.State"|grep $2|wc -l`
fi

测试键值

本地测试键值是否生效:
进入zabbix_agent重启zabbix_agent

cd zabbix_agent/sbin/
ps -ef|grep  zabbix|awk '{print $2}'|xargs kill -9
./zabbix_agentd
[root@localhost sbin]# ./zabbix_agentd -t tomcat.jstack_info_[lmdmweb-8081,TOTAL]
tomcat.jstack_info_[lmdmweb-8081,TOTAL]       [t|216]
[root@localhost sbin]#./zabbix_agentd -t tomcat.jvm_[lmdmweb-8081,EC]
tomcat.jvm_[lmdmweb-8081,EC]                  [t|681472.0]

创建zabbix监控模板

使用宏参数,定义java的唯一名称,对应脚本中利用ps -ef|grep寻找PID
在这里插入图片描述
添加监控项
众多监控数据中取自己需要的数据,数据含义详情,自行百度
jstat本次取值为EC,EU
jstack本次取值为WAITING、RUNNABLE、BLOCKED、TOTAL
在这里插入图片描述

创建图像

在这里插入图片描述
在这里插入图片描述

复制模板

导出模板
在这里插入图片描述
全部替换模板中的

模板名称: <template>JAVA_JVM_Shell</template>  --> <template>JAVA_JVM_Shell_2</template>
宏参数名称:$JAVANAME  -->$JAVANAME_2
宏参数默认值(可选):<value>soleName</value>--><value>soleName_2</value>

重复以上操作
在这里插入图片描述

添加监控

安装主机中java的数量添加监控模板数量
在这里插入图片描述
修改模板中宏参数,参数是java的唯一过滤名称
一定要是唯一名称
在这里插入图片描述

结果查看

最新数据

在这里插入图片描述
图表
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值