zabbix监控多JMX端口

I want you zabbix1335,10518字数 2561阅读8分32秒阅读模式

个人很少发表文章,算的上是处女作吧,大家轻喷,高手可以略高,主要是给zabbix新手提供一个简单的思路。下面附上操作步骤:

1. 开启Tomcat JMX功能

CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=10.124.129.241
-Dcom.sun.management.jmxremote.port=8889
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

重启tomcat即可;文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

注:java程序都会提供一个JMX接口去进行采集相关的数据,其他开启方式请参考相关说明,我主要是已tomcat监控为主;文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

2. 编写自动发现端口脚本

[root@localhost scripts]# cat /etc/zabbix/scripts/jmx_discovery.sh
#!/bin/bash
# function:monitor tcp connect status from zabbix
source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
jmx_port_discovery () {
jmx_port=($(cat /etc/zabbix/scripts/java.txt|cut -d "|" -f2))
Tomcat_Name=($(cat /etc/zabbix/scripts/java.txt|cut -d "|" -f1))
printf '{\n'
printf '\t"data":[\n'
for((i=0;i<${#jmx_port[@]};++i))
{
num=$(echo $((${#jmx_port[@]}-1)))
if [ "$i" != ${num} ];then
printf "\t\t{ \n"
printf "\t\t\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"
printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\"},\n"
else
printf "\t\t{ \n"
printf "\t\t \n"
printf "\t\t\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"
printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\"}]}\n"
fi
}
}
case "$1" in
jmx_port_discovery)
jmx_port_discovery
;;
*)
echo "Usage:$0 {jmx_port_discovery}"
;;
esac

编写/etc/zabbix/scripts/java.txt文件,内容如下:文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

[root@localhost scripts]# cat /etc/zabbix/scripts/java.txt
Tomcat_442|8880
Tomcat_8591|8881

注:其实这里有个弊端,不太智能,也就是需要把监控的jmx端口和相关服务名称写到这个文本里去,这里还需要网友提供一个更可靠的方法,还请大家不要栗色指教。文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

3. 编写jmx监控配置文件

[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.conf.d/discovery_java_status.conf
UserParameter=java.jmx.discovery,/etc/zabbix/scripts/jmx_discovery.sh jmx_port_discovery
UserParameter=java.HeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage 2>&1|grep $2|cut -d " " -f2
UserParameter=java.NonHeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1|grep $2|cut -d " " -f2
UserParameter=java.LoadClass.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=ClassLoading $2 2>&1|cut -d " " -f6

4. 进行测试

jmx

zabbix监控多JMX端口 - 01

其实,整体大致就是如此,key都能定义好了,至于模板我相信大家都能写了。(我也是今天才刚刚弄了下,很多也还没有完善)有关不同java的服务,最好是查看一下相关的文档,比如tomcat官方文档。这里大家可以参考一下tomcat自带的模板,下面给大家展示一下效果图:文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

jmx

zabbix监控多JMX端口 - 02

jmx

zabbix监控多JMX端口 - 03

谢谢"北京 - 小易"的分享。文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

 文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/ 文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
I want you
  • 本文由 投稿,于20/01/2016 01:00:31发表
  • 转载请务必保留本文链接:https://www.ttlsa.com/zabbix/zabbix-monitor-mutli-jmx-port/
评论  13  访客  13
    • Jake
      Jake 1

      大神能否共享一下模板啊,我改了半天也没把模板做出来 :cry: 苦恼啊

      • 匿名
        匿名 9

        UserParameter=java.jmx.discovery,/etc/zabbix/scripts/jmx_discovery.sh jmx_port_discovery
        请教一下 这个配置语法的后面为什么要加 jmx_port_discovery?
        java.HeapMemoryUsage.status[*]
        这个 [*] 代表的是什么意思?

          • llc7
            llc7 1

            @ 匿名 因为这个脚本里定义了这个function,执行脚本需要给参数;
            [*]是zabbix服务器传过来的参数,看key怎么定义的

          • 踢翻地球
            踢翻地球 0

            哪位能共享一下模板啊 万分感谢 !

            • 匿名
              匿名 9

              按照你的这个做法。在zabbix_server端使用zabbix_get测试的时候,返回为空值。这个情况怎么弄?

                • llc7
                  llc7 1

                  @ 匿名 返回空值一般是没取到或者key有问题吧。

                • llc7
                  llc7 1

                  实际使用了下,按照这样的原理去监控,一台服务器上jmx端口较多且监控数据较多的话,被监控服务器的性能开销还是挺大的。

                    • 匿名
                      匿名 9

                      @ llc7 测试了一下。手动1秒敲一次命令,大约30秒后CPU使用率就增加了30%,这也不太适合tomcat多的服务器。

                      • yiyezhiqiu
                        yiyezhiqiu 0

                        @ llc7 安装作者写的,item值怎么添加啊?直接添加 java.jmx.discovery 吗??求高手说详细点

                      • 匿名
                        匿名 9

                        实际测试了下,服务器上跑的jmx端口比较多而且每个tomcat需要监控的参数比较多的话,被监控服务器CPU使用率很高。

                        • 浪心无痕
                          浪心无痕 0

                          为什么有的无法提取到数据
                          [root@WEB1 zabbix]# /usr/java/jdk1.7.0_45/bin/java -jar /root/cmdline-jmxclient-0.10.3.jar – 192.168.1.31:10054 Catalina:name=”ajp-bio-8009″,type=GlobalRequestProcessor
                          04/05/2016 14:54:17 +0800 org.archive.jmx.Client Catalina:name=ajp-bio-8009,type=GlobalRequestProcessor is not a registered bean

                            • vinay
                              vinay 9

                              @ 浪心无痕 也遇到同样问题
                              [root@iZ25b4lvm6cZ ~]# java -jar cmdline-jmxclient-0.10.3.jar – 10.44.47.204:12345 Catalina:name=ajp-apr-8009,type=GlobalRequestProcessor
                              12/30/2016 17:05:14 +0800 org.archive.jmx.Client Catalina:name=ajp-apr-8009,type=GlobalRequestProcessor is not a registered bean

                            • 匿名
                              匿名 9

                              其实很多疑问,我不是做运维的,但是这份工作我还得做。没时间看书了啊。写的太简略了

                            评论已关闭!