设为首页 收藏本站
查看: 7496|回复: 4

[已解决] zabbix监控同一台主机下的多个tomcat

[复制链接]
累计签到:5 天
连续签到:1 天
发表于 2017-6-7 15:25:08 | 显示全部楼层 |阅读模式
zabbix监控同一台主机下的多个tomcat

**受益于:http://www.iyunv.com/forum.php?mod=viewthread&tid=227674**

>运行环境


```
centos7.3
zabbix3.2
3.0zabbix模板
```
如要使用3.0zabbix模板和下载下面的脚本,请移步到下面的url链接下载(http://www.iyunv.com/forum.php?mod=viewthread&tid=227674
下面的代码在不同的unix系统下有所不同,需要自行根据各自情况进行修改

>要用到的测试代码


```
zabbix_get -s 192.168.239.136 -p 10050  -k "java.jmx.discovery"

java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.239.136:12345 java.lang:type=Memory NonHeapMemoryUsage

java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.239.136:12345 java.lang:type=Runtime Vmname 2>&1 |grep $2 |awk '{print $NF}'
```

>要用到的文件


```
add_service_tomcat.sh
jmx_discovery.sh
catalina-jmx-remote.jar
cmdline-jmxclient-0.10.3.jar
```
上面的add_service_tomcat.sh和jmx_discovery.sh是脚本文件

catalina-jmx-remote.jar和cmdline-jmxclient-0.10.3.jar是两个要使用的jar包

**文件的作用**

add_service_tomcat.sh用于查找各个tomcat,然后往每个tomcat里的catalina.sh里插入端口等代码。还有往zabbx里的zabbix-agentd.conf里也插入自定义监控项代码。

jmx_discovery.sh用于输出json监控清单,可从这里看到每个不同的tomcat在监控的时候,会被生成tomcat实例名字加监控项的名字

>脚本代码

#add_service_tomcat.sh


```
#!/bin/bash
cp /tmp/jmx_discovery.sh  /usr/lib/zabbix/alertscripts/jmx_discovery.sh                             #复制文件,如果zabbix是yum的,那么就用zabbix下的zabbix-server.conf设置的脚本路径
mv /tmp/cmdline-jmxclient-0.10.3.jar /lib/cmdline-jmxclient-0.10.3.jar                 #复制文件

#查找有多少个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=12345   
#配置监控初始端口,ens33这个网口,根据版本不同,自行修改
#$3这个根据系统不同自行修改,$3表示的是ens33网口上的IP
local_ip=`ifconfig ens33 |awk -F '[ :]+' 'NR==2 {print $3}'`                                 #提取主机IP,因为unix版本的关系,取的列号可能都不一样【楼主提醒的】
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

#配置监控初始端口,ens33这个网口,根据版本不同,自行修改
#$3这个根据系统不同自行修改,$3表示的是ens33网口上的IP

local_ip=`ifconfig ens33 |awk -F '[ :]+' 'NR==2 {print $3}'`                 #提取主机IP,因为unix版本的关系,取的列号可能都不一样【楼主提醒的】

cat >> /etc/zabbix/zabbix_agentd.conf <<END                                 
UserParameter=java.jmx.discovery,/usr/lib/zabbix/alertscripts/jmx_discovery.sh
UserParameter=java.Runtime.status
  • ,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Runtime \$2 2>&1 |grep \$2 |awk '{print \$NF}'
    UserParameter=java.Memory.status
  • ,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory \$2 2>&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 /usr/lib/zabbix/alertscripts/jmx_discovery.sh
    rm -rf /tmp/jmx_discovery.sh
    rm -rf /tmp/add_service_tomcat.sh
    rm -rf /tmp/catalina-jmx-remote.jar
    systemctl restart zabbix-agent
    ps -ef|grep java
    下面代码用于从新启动tomcat
    ps -ef|grep java
    ```

    #jmx_discovery.sh


    ```
    #!/bin/bash

    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=12345                                                                                #配置监控初始端口
    i=1
    printf '{"data":[\n'

    for tomcat in $t_datadir                                                                    #输出JSON文件
    do
        #获取tomcat实例的名字
        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
    ```

    >操作步骤


    ```
    操作步骤:
    1、上传 catalina-jmx-remote.jar,cmdline-jmxclient-0.10.3.jar,jmx_discovery.sh 和 add_service_tomcat.sh 到 /tmp/目录下
    2、给 add_service_tomcat.sh 赋执行权限,并执行
    3、zabbix服务端对主机添加模版
    ```

    在zabbix的web端,只需要导入模板(Template for Tomcat)和添加主机、为主机添加模块就可以了。

    >问题

    **1. 在zabbix的web端出现Item does not allow parameters.**

    这是因为web端没有获取到我们输入到/etc/zabbix/zabbix-agentd.conf里面自定义的监控项目。检查你在/etc/zabbix/zabbix-agentd.conf的自定义监控项代码有没有错

    **2.如何在本地测试有没有成功**

    zabbix_get -s 192.168.239.136 -p 10050  -k "java.jmx.discovery"可以获取到json格式的内容

    java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.239.136:12345 java.lang:type=Memory NonHeapMemoryUsage 可以获取到内存信息

    **3.在本地可获取到数据,web端获取不到**

    把web端的host删除,从新添加,然后等待几分钟

    **4.第一次执行脚本失败了,然后再次执行,zabbix-agent就没办法从新启动了**

    因为zabbix-agentd.conf里面最后被写入了代码,从新执行脚本建议先把zabbix-agentd.conf里面先前添加的代码删除还有添加在tomcat里的catalina.sh里的代码也删除掉,再从新执行脚本

    **5.端口问题**

    楼主给的代码,第一个tomcat端口从12345开始的,第二个tomcat端口为12346,逐增加1的,不需要我们担心端口的问题。如果觉得这些端口不安全,自己修改脚本。

    **6.在本地测试时候,获取不到数据**

    确定在zabbix-agentd.conf里设定的自定义项里的key最后带有
  • ,这样才允许传递参数

    比如:UserParameter=java.Runtime.status
  • ,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Runtime \$2 2>&1 |grep \$2 |awk '{print \$NF}'


  • 评分

    参与人数 2金币 +40 经验 +22 收起 理由
    admin + 20 + 2 很给力!
    枫狐狸 + 20 + 20 赞一个!

    查看全部评分


    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-384847-1-1.html 上篇帖子: zabbix微信告警(继6.2日微信升级为企业号解决办法) 下篇帖子: zabbix监控windows应用程序触发重启 监控 主机

    尚未签到

    发表于 2017-6-8 17:17:09 | 显示全部楼层
    不错,支持一下

    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    累计签到:3 天
    连续签到:1 天
    发表于 2017-8-1 12:34:47 | 显示全部楼层
    你有没有重启tomcat 模块,再去获取数据就超时。

    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    尚未签到

    发表于 2018-5-7 16:19:20 | 显示全部楼层
    zabbix_get -s 172.16.123.192(客户端主机ip) -p 12345 -k "jmx["java.lang:type=Threading",ThreadCount]"
    zabbix_get [21391]: Check access restrictions in Zabbix agent configuration

    为什么在客户端主机上直接运行zabbix_get 获取不到数据呢
    端口在监听,防火墙开放了端口,也不存在跨主机
    zabbix_agentd.conf中server配置也添加zabbix server IP,客户端主机IP,和127.0.0.1

    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表