添加zabbix自動發現(監控多tomcat實例)


說明

  何為自動發現?首先我們監控多tomcat實例,如果一個個實例地添加或許可以完成當前需求。但是日后隨着實例的增多,再手動一個個去添加就十分不方便了。這時候需要自動發現這個功能,來幫助我們自動添加監控tomcat實例。本文就以監控tomcat線程為例,來實現這個自動發現的功能。這里zabbix版本為3.0。

創建自動發現腳本

  可以理解為這個腳本能夠打印出當前服務器上所有的tomcat實例名稱。zabbix會定期執行這個腳本,做到自動發現當前所有的tomcat實例,腳本放在zabbix-agent安裝路徑的scripts目錄下。而下一步就是給找到的tomcat實例添加所需要監控的值。下面先看腳本:

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

  執行打印結果如下所示:

# chmod a+x discover_jvm.py 賦予執行權限
# chown zabbix:zabbix discover_jvm.py 添加屬主為zabbix用戶
# ./discover_jvm.py 
{
    "data":[
        {
            "{#APP_NAME}":"app1"
        },
        {
            "{#APP_NAME}":"app2"
        }
    ]
}
這里打印出app1、app2兩個實例,以后要是有其他實例,也能夠同樣打印出來。

創建監控項腳本

  這個腳本的作用是打印出tomcat實例需要監控的項,本例為線程數。該腳本執行需要兩個參數,$1為實例名,$2為監控項名。打印的結果為一個整型的數字。記得跟上面的腳本放在同樣的位置,並賦予執行權限和正確的屬主。

# 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的選擇即可。

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,[*]表示需要變量支持,這里即為$1、$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客戶端。然后在服務端進行驗證:

#驗證獲取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實例的:

  取一個名字,並填上我們之前定義的key,然后保存即可:

  然后創建一個監控項:

  取一個名字,也填上我們之前定義的key,注意這里的#APP_NAME為之前腳本輸出的變量,要填寫一致:

  然后我們創建一個圖像來觀察數據:

  同樣取名字的變量要跟之前一致,並添加數據源為剛剛我們定義的監控項:

  最后可以觀察到圖像:

  當然我們還可以定義一個觸發器,比如大於多少線程就告警,這里就不一一贅述了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM