添加zabbix自动发现(监控多tomcat实例)

说明

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

建立自动发现脚本

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

# 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=(',',':'))

  执行打印结果以下所示:json

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

建立监控项脚本

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

# 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的选择便可。bash

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,[*]表示须要变量支持,这里即为$一、$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客户端。而后在服务端进行验证:app

#验证获取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实例的:
python2.7

  取一个名字,并填上咱们以前定义的key,而后保存便可:
jvm

  而后建立一个监控项:
线程

  取一个名字,也填上咱们以前定义的key,注意这里的#APP_NAME为以前脚本输出的变量,要填写一致:

  而后咱们建立一个图像来观察数据:

  一样取名字的变量要跟以前一致,并添加数据源为刚刚咱们定义的监控项:

  最后能够观察到图像:

  固然咱们还能够定义一个触发器,好比大于多少线程就告警,这里就不一一赘述了。

相关文章
相关标签/搜索