zabbix监控tomcat多实例(自动发现,主动模式)

zabbix监控tomcat多实例(自动发现,主动模式)

实验背景

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

  • 创建发现服务器上面运行tomcat的 tomcat目录名称的脚本

脚本可以自动发现tomcat的目录名称(一般自定义),设置脚本成监控项,zabbix会定期执行这个监控项,自动发现当前服务器上所有tomcat实例,笔者脚本默认放在zabbix配置文件目录下的scripts(笔者zabbix,yum安装,scripts需手动创建)目录下,脚本如下:

# cat tomcat_name_discovery.py
#!/usr/bin/env python 
# -*- coding: UTF-8 -*-
import os
import subprocess
import simplejson as json

TOMCAT_HOME="/data/tomcats"

# TOMCAT_NAME 自定义项目运行的tomcat的目录名称

#TOMCAT_NAME="/bin/find 'TOMCAT_HOME' -name 'server.xml' | sort -n | uniq -c | awk -F'/' '{print $4}'"
TOMCAT_NAME="/bin/find /data/tomcats -name 'server.xml' | sort -n | uniq -c | awk -F'/' '{print $4}'"

#t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
t=subprocess.Popen(TOMCAT_NAME,shell=True,stdout=subprocess.PIPE).communicate()[0]

tomcats=[]

for tomcat in t.split('\n'):
    if len(tomcat) != 0:
        tomcats.append({'{#TOMCAT_NAME}':tomcat})

# 打印出zabbix可识别的json格式
print json.dumps({'data':tomcats},sort_keys=True,indent=4,separators=(',',':'))
  • 本地执行脚本查看获取到的tomcat实例
# 安装pip,并安装simplejson模块,笔者最小化安装的CentOS7默认没有安装所用到的python模块
yum install python-pip -y && pip install simplejson 
pip install --upgrade pip # 顺手更新下pip

# 获取当前服务器tomcat实例
[root@ecs-09 scripts]# python tomcat_name_discovery.py 
{
    "data":[
        {
            "{#TOMCAT_NAME}":"tomcat-7081"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7082"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7083"
        }
    ]
}
  • 创建监控项脚本

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

[root@ecs-09 scripts]# cat tomcat_status_monitor.sh 
#!/bin/bash
######################################
# Usage: tomcat project status monitor
#
# Changelog:
# 2018-05-10 shaonbean@qq.com create
######################################
# config zabbix sudo
# echo "zabbix ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/zabbix 

TOMCAT_NAME=$1
status=$2

TOMCAT_PID=`/usr/bin/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
     /usr/bin/sudo ${jstack} -l ${TOMCAT_PID} | grep http | grep -v grep | wc -l
     ;;

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


# 监控项可以在case部分添加多个,具体参考jstack --help,jstack pid获取的信息,
# 配置jstack环境变量,
ln -s /usr/java/jdk1.7.0_80/bin/jstack /usr/local/sbin/jstack 

zabbix客户端配置

  • 在客户端配置文件中添加自定义的监控项key,示例如下:
[root@ecs-09 scripts]# cd /etc/zabbix/zabbix_agentd.d/
[root@ecs-09 zabbix_agentd.d]# cat userparameter_tomcat.conf 
# 变量1的key定义为:tomcat.name.discovery, 是脚本自动发现的tomcat实例名称,获取途径是执行tomcat_name_discovery.py

UserParameter=tomcat.name.discovery, /etc/zabbix/scripts/tomcat_name_discovery.py

# 变量2的key自定义为:tomcat.status.thread_num, [*]表示需要变量支持,$1,$2(脚本中$2,即tomcat的监控项自定义,监控项可添加),获取途径执行:tomcat_status_monitor.sh

UserParameter=tomcat.status.thread_num[*], /etc/zabbix/scripts/tomcat_status_monitor.sh $1 $2
  • 添加完成后重启zabbix-agent,并在客户端验证(笔者客户端使用的是zabbix主动模式,如果zabbix是被动模式,验证步骤可到zabbix服务端进行)
# 验证获取tomcat.name.discovery的key值 
[root@ecs-09 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k tomcat.name.discovery # zabbix_get记得yum安装一下
{
    "data":[
        {
            "{#TOMCAT_NAME}":"tomcat-7081"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7082"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7083"
        }
    ]
}

# 验证获取tomcat.status.thread_num 的key值
[root@ecs-09 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k tomcat.status.thread_num[tomcat-7081,thread.num] 
4
[root@ecs-09 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k tomcat.status.thread_num[tomcat-7082,thread.num]
4

zabbix界面添加自动发现模板

模板下载:https://github.com/wh211212/zabbix

  • 创建发现规则


    这里写图片描述
  • 添加监控项

这里写图片描述

-设置trigger告警


这里写图片描述
  • 添加图形展示
这里写图片描述
  • 查看


    这里写图片描述
  • 模拟tomcat实例停掉,假死,查看告警触发

这里写图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 7,955评论 0 37
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的...
    天之蓝色阅读 2,522评论 0 16
  • 创业邦上有个专题,叫融资清单,每天更新,比如8月7日融资清单: 很多都是现在已经接触到的创业公司,比如8月6日爱回...
    永远的候鸟阅读 466评论 0 1
  • 昨天和一个朋友聊天,发生了一些不愉快,把我气成了一只河豚! 他和我说,他计划三五年后去上海。我就问他为何要等3年,...
    伊酱阅读 158评论 0 0