zabbix監(jiān)控tomcat多實例(自動發(fā)現(xiàn),主動模式)

zabbix監(jiān)控tomcat多實例(自動發(fā)現(xiàn),主動模式)

實驗背景

筆者同一臺服務(wù)器運行三個java api接口,需要監(jiān)控tomcat 服務(wù)狀態(tài),很多監(jiān)控項的情況下一個個添加很煩,筆者使用自動發(fā)現(xiàn)功能,已監(jiān)控tomcat線程為例。系統(tǒng)CentOS7,zabbix 3.0.x

  • 創(chuàng)建發(fā)現(xiàn)服務(wù)器上面運行tomcat的 tomcat目錄名稱的腳本

腳本可以自動發(fā)現(xiàn)tomcat的目錄名稱(一般自定義),設(shè)置腳本成監(jiān)控項,zabbix會定期執(zhí)行這個監(jiān)控項,自動發(fā)現(xiàn)當(dāng)前服務(wù)器上所有tomcat實例,筆者腳本默認(rèn)放在zabbix配置文件目錄下的scripts(筆者zabbix,yum安裝,scripts需手動創(chuàng)建)目錄下,腳本如下:

# 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=(',',':'))
  • 本地執(zhí)行腳本查看獲取到的tomcat實例
# 安裝pip,并安裝simplejson模塊,筆者最小化安裝的CentOS7默認(rèn)沒有安裝所用到的python模塊
yum install python-pip -y && pip install simplejson 
pip install --upgrade pip # 順手更新下pip

# 獲取當(dāng)前服務(wù)器tomcat實例
[root@ecs-09 scripts]# python tomcat_name_discovery.py 
{
    "data":[
        {
            "{#TOMCAT_NAME}":"tomcat-7081"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7082"
        },
        {
            "{#TOMCAT_NAME}":"tomcat-7083"
        }
    ]
}
  • 創(chuàng)建監(jiān)控項腳本

腳本作用打印出tomcat實例需要監(jiān)控的監(jiān)控項,本文以tomcat線程數(shù)為例,腳本執(zhí)行需要兩個參數(shù),$1為tomcat實例名,$2為tomcat監(jiān)控項。所有腳本記得賦權(quán)

[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


# 監(jiān)控項可以在case部分添加多個,具體參考jstack --help,jstack pid獲取的信息,
# 配置jstack環(huán)境變量,
ln -s /usr/java/jdk1.7.0_80/bin/jstack /usr/local/sbin/jstack 

zabbix客戶端配置

  • 在客戶端配置文件中添加自定義的監(jiān)控項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, 是腳本自動發(fā)現(xiàn)的tomcat實例名稱,獲取途徑是執(zhí)行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的監(jiān)控項自定義,監(jiān)控項可添加),獲取途徑執(zhí)行:tomcat_status_monitor.sh

UserParameter=tomcat.status.thread_num[*], /etc/zabbix/scripts/tomcat_status_monitor.sh $1 $2
  • 添加完成后重啟zabbix-agent,并在客戶端驗證(筆者客戶端使用的是zabbix主動模式,如果zabbix是被動模式,驗證步驟可到zabbix服務(wù)端進(jìn)行)
# 驗證獲取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界面添加自動發(fā)現(xiàn)模板

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

  • 創(chuàng)建發(fā)現(xiàn)規(guī)則


    這里寫圖片描述
  • 添加監(jiān)控項

這里寫圖片描述

-設(shè)置trigger告警


這里寫圖片描述
  • 添加圖形展示
這里寫圖片描述
  • 查看


    這里寫圖片描述
  • 模擬tomcat實例停掉,假死,查看告警觸發(fā)

這里寫圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Zabbix簡介 Zabbix官方網(wǎng)站Zabbix中文文檔 本文系統(tǒng)環(huán)境是CentOS7x86_64, Zabbi...
    Zhang21閱讀 8,356評論 0 37
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,692評論 19 139
  • 1.寫在前面 本文主要介紹的是zabbix的編譯安裝過程,包含它的基礎(chǔ)環(huán)境LNMP,雖然zabbix官方一般推薦的...
    天之藍(lán)色閱讀 2,671評論 0 16
  • 創(chuàng)業(yè)邦上有個專題,叫融資清單,每天更新,比如8月7日融資清單: 很多都是現(xiàn)在已經(jīng)接觸到的創(chuàng)業(yè)公司,比如8月6日愛回...
    永遠(yuǎn)的候鳥閱讀 551評論 0 1
  • 昨天和一個朋友聊天,發(fā)生了一些不愉快,把我氣成了一只河豚! 他和我說,他計劃三五年后去上海。我就問他為何要等3年,...
    伊醬閱讀 225評論 0 0

友情鏈接更多精彩內(nèi)容