添加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爲以前腳本輸出的變量,要填寫一致:

  而後咱們建立一個圖像來觀察數據:

  一樣取名字的變量要跟以前一致,並添加數據源爲剛剛咱們定義的監控項:

  最後能夠觀察到圖像:

  固然咱們還能夠定義一個觸發器,好比大於多少線程就告警,這裏就不一一贅述了。

相關文章
相關標籤/搜索