zabbix监控tomcat多实例(自动发现)
young / / / 阅读量

环境及背景

一台服务器运行两个个java api接口,需要监控tomcat 服务状态很多监控项的情况下一个个添加很烦,笔者使用自动发现功能,已监控tomcat线程为例。
系统CentOS6.10,zabbix 4.0.x

脚本编写及测试

zabbix安装省略
创建发现服务器上面运行tomcat的 tomcat目录名称的脚本
脚本可以自动发现tomcat的目录名称(一般自定义),设置脚本成监控项,zabbix会定期执行这个监控项,自动发现当前服务器上所有tomcat实例,脚本默认放在/web/data/zabbix-4.0/share/zabbix/alertscripts目录下,脚本如下:

#!/usr/bin/python2
#Usage: discover tomcat_app
#Last Modified:
 
import subprocess
import json

args="find /web/soft/tomcat* -name 'catalina.properties' | sort -n | uniq | awk -F'/' '{print $4}'"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]

apps=[]

for app in t.split('\n'):
    if len(app) != 0:
        apps.append({'{#TOMCAT_NAME}':app})
print json.dumps({'data':apps},indent=4,separators=(',',':'))

执行脚本查看获取到的tomcat实例:

[zabbix@localhost alertscripts]$ ./discover_jvm.py 
{
    "data":[
        {
            "{#TOMCAT_NAME}":"tomcat7-8080"
        },
        {
            "{#TOMCAT_NAME}":"tomcat7-8081"
        }
    ]
}

创建监控项脚本
脚本作用打印出tomcat实例需要监控的监控项,本文以tomcat线程数为例,脚本执行需要两个参数,$1为tomcat实例名,$2为tomcat监控项。所有脚本记得赋权

#!/bin/bash
# Usage: tomcat project status monitor
# config zabbix sudo

TOMCAT_NAME=$1
status=$2

TOMCAT_PID=`ps -ef | grep "$TOMCAT_NAME" | grep "[o]rg.apache.catalina.startup.Bootstrap start" | grep -v grep | awk '{print $2}'`

jstack=`which jstack`

case $status in
     thread.num)

     # use jstack --help
      ${jstack} -l ${TOMCAT_PID} | grep http | grep -v grep | wc -l
     ;;

     *)
     echo "Usage: $0 {TOMCAT_NAME status[thread.num]}"
     exit 1
     ;;
esac

执行脚本查看tomcat7-8081的线程数:

[zabbix@localhost alertscripts]$ ./app_status.sh tomcat7-8080 thread.num
104 (tomcat默认线程4个(不知道干什么的)+初始等待进程100)

zabbix客户端配置

在客户端配置文件中添加自定义的监控项key:

#允许所有字符的参数传递给用户定义的参数
UnsafeUserParameters=1
UserParameter=custom.discover.jvm_app,/web/data/zabbix-4.0/share/zabbix/alertscripts/discover_jvm.py
UserParameter=custom.app.thread_num[*],/web/data/zabbix-4.0/share/zabbix/alertscripts/app_status.sh $1 $2

添加完成后重启zabbix-agent并在服务端验证
验证获取custom.discover.jvm_app的key值

[zabbix@localhost alertscripts]$ /web/data/zabbix-4.0/bin/zabbix_get -s 192.168.121.254 -p10050 -k custom.discover.jvm_app
{
    "data":[
        {
            "{#TOMCAT_NAME}":"tomcat7-8080"
        },
        {
            "{#TOMCAT_NAME}":"tomcat7-8081"
        }
    ]
}

验证获取custom.app.thread_num (tomcat7-8080)的key值

[zabbix@localhost alertscripts]$ /web/data/zabbix-4.0/bin/zabbix_get -s 192.168.121.254 -p10050 -k custom.app.thread_num["tomcat7-8080",thread.num]
104

zabbix界面添加自动发现模板

创建发现规则

创建监控项

创建自定义图表

支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章