阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

添加Zabbix自动发现(监控多Tomcat实例)

120次阅读
没有评论

共计 2476 个字符,预计需要花费 7 分钟才能阅读完成。

说明

何为自动发现?首先我们监控多 tomcat 实例,如果一个个实例地添加或许可以完成当前需求。但是日后随着实例的增多,再手动一个个去添加就十分不方便了。这时候需要自动发现这个功能,来帮助我们自动添加监控 tomcat 实例。本文就以监控 tomcat 线程为例,来实现这个自动发现的功能。这里 zabbix 版本为 3.0。
添加 Zabbix 自动发现(监控多 Tomcat 实例)

创建自动发现脚本

可以理解为这个脚本能够打印出当前服务器上所有的 tomcat 实例名称。zabbix 会定期执行这个脚本,做到自动发现当前所有的 tomcat 实例,脚本放在 zabbix-agent 安装路径的 scripts 目录下。而下一步就是给找到的 tomcat 实例添加所需要监控的值。下面先看脚本:

# cat discover_jvm.py
#!/usr/bin/Python2.7 
#Usage: discover tomcat_app
#Last Modified:
 
import subprocess
import json

#args 为自己定义查找项目名字的方式,由于各自部署方式的不同,这里需要根据实际情况来写命令。
args="find /opt/app/applications -name'catalina.properties'| sort -n | uniq | awk -F'/''{print $5}'"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]

apps=[]

for app in t.split('\n'):
    if len(app) != 0:
        apps.append({'{#APP_NAME}':app})
# 打印出 zabbix 可识别的 json 格式 
print json.dumps({'data':apps},indent=4,separators=(',',':'))

执行打印结果如下所示:

# chmod a+x discover_jvm.py 赋予执行权限 
# chown zabbix:zabbix discover_jvm.py 添加属主为 zabbix 用户 
# ./discover_jvm.py 
{
    "data":[{
            "{#APP_NAME}":"app1"
        },
        {
            "{#APP_NAME}":"app2"
        }
    ]
}
这里打印出 app1、app2 两个实例,以后要是有其他实例,也能够同样打印出来。

创建监控项脚本

这个脚本的作用是打印出 tomcat 实例需要监控的项,本例为线程数。该脚本执行需要两个参数,$1 为实例名,$2 为监控项名。打印的结果为一个整型的数字。记得跟上面的脚本放在同样的位置,并赋予执行权限和正确的属主。

# cat app_status.sh 
#!/bin/bash
#Usage: tomcat_app status
#Last Modified:

app=$1
status=$2
pid=`ps -ef | grep "$app" | grep -v grep | grep -v "$0"| awk '{print $2}'`

case $status in
    thread.num)
        /opt/programs/jdk1.7.0_67/bin/jstack "$pid" | grep http | wc -l
        ;;
    *)
        echo "Usage:$0 {app_name status[thread.num]}" 
        exit 1
        ;;
esac

# 执行 
#./app_status.sh app_name thread.num

日后如果需要添加新的监控项,只需修改上面的脚本,改变 $2 的选择即可。

zabbix 客户端配置

在客户端配置文件中添加自定义监控的 key,其实就是给我们监控选项取个名字,然后如何获取这个值。示例如下:

# 变量 1 的 key 为 custom.discover.jvm_app,为自动发现的 tomcat 实例名,获取方式即为执行 dicover_jvm 脚本 
UserParameter=custom.discover.jvm_app,/opt/programs/bd-zabbix-agentd_3.0.4/scripts/discover_jvm.py
# 变量 2 的 key 为 custom.app.thread_num,[*] 表示需要变量支持,这里即为 $1、$2(本例中 $2 的意义不同,监控项就不同)获取方式为执行 app_status.sh 脚本 
UserParameter=custom.app.thread_num[*],/opt/programs/bd-zabbix-agentd_3.0.4/scripts/app_status.sh $1 $2

修改完后重启 zabbix 客户端。然后在服务端进行验证:

# 验证获取 custom.discover.jvm_app 的 key 值 
zabbix-server_3.0.4/bin/zabbix_get -s 10.205.51.22 -p 20050 -k custom.discover.jvm_app
# 验证获取 custom.app.thread_num 的 key 值 
./zabbix_get -s 10.205.51.22 -p 20050 -k custom.app.thread_num[app1,thread_num]
如果正确的话,就会返回在客户端执行脚本一样的结果。

zabbix 界面添加自动发现模版

为了便于后面更多的主机添加此监控,这里就创建一个模板来进行配置。首先创建一个发现规则,该规则就是用来自动发现 tomcat 实例的:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

取一个名字,并填上我们之前定义的 key,然后保存即可:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

然后创建一个监控项:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

取一个名字,也填上我们之前定义的 key,注意这里的 #APP_NAME 为之前脚本输出的变量,要填写一致:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

然后我们创建一个图像来观察数据:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

同样取名字的变量要跟之前一致,并添加数据源为刚刚我们定义的监控项:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

最后可以观察到图像:
添加 Zabbix 自动发现(监控多 Tomcat 实例)

当然我们还可以定义一个触发器,比如大于多少线程就告警,这里就不一一赘述了。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-09/146877.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计2476字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中