監控mongo寫個模板其實挺快的,若是公司每一個mongo使用的端口都一致的話,就可直接創建一套模板,而後這個模板連接到各個服務器上便可。但若是公司使用mongo的端口若是不一致的話,那建議使用zabbix的自動發現的功能,自動發現mongo監聽的端口,並對它進行相關數據的收集。python
先看一下效果圖,json
此監控圖是zabbix的篩選功能可能把相關的圖整合到一個頁面裏面去。bash
具體的自動發現實現以下:服務器
探索規則配置如上,機器上的zabbix agent配置以下:ui
UserParameter=mongo.discover,python /usr/local/zabbix/discover_mongo.pycode
其中/usr/local/zabbix/discover_mongo.py爲自動發現的腳本,腳本內容以下:server
#coding:utf-8 import simplejson as json import commands (status, output) = commands.getstatusoutput('''sudo netstat -tlnp|grep 'mongod'|awk '{print $4}'|awk -F':' '{print $(NF)}'|sort -u|grep -v "^28"''') outputs = output.split('\n') ports = [] for port in outputs: ports += [{'{#MONGOPORT}': port}] print json.dumps({'data':ports},sort_keys=True,indent=4)
使用系統命令netstat把監聽的端口篩選出來,而後以json的格式進行輸出。定義到此就能夠自動發現zabbix監聽的端口。教程
注意:netstat通常zabbix用戶沒有權限,須要visudo進行對應的設置,此腳本可能得針對本身的環境進行相對的調整。visudo添加配置以下:utf-8
zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix !requiretty部署
探索完端口後,zabbix server就須要以端口爲其中一個參數向zabbix agent取數據,其中項目原型配置以下:
若是返回的{#MONGOPORT}有多個的話,那監控項目就乘以幾。
其中mongo.status的定義以下(此定義仍是zabbix agent下):
UserParameter=mongo.status[*],sh /usr/local/zabbix/check_mongo.sh -p $1 -k $2 -K $3
使用一個腳本傳入參數來獲取mongo的一些數據收集,後續可直接擴展此腳本(-p表明端口),mongo的serverStatus有多個參數,採集的就用到opcounters等,-k和-K能具體獲取其數值。其中腳本以下:
#!/bin/sh while getopts "p:k:K:" opt do case $opt in p ) mongo_port=$OPTARG;; k ) key1=$OPTARG;; K ) key2=$OPTARG;; ? ) echo 'parameter is wrong!' exit 1;; esac done if [ ! "${mongo_port}" ] || [ ! "${key1}" ] || [ ! "${key2}" ];then echo "parameter is null" exit 1 fi echo "db.serverStatus().${key1}"|mongo --port=${mongo_port}|sed 's/,/\r\n/g'|grep "${key2}" |awk -F':|,|}' '{print $2}'
部署完一個模板,把模板關聯到mongo的機器,就能收集相關的操做信息。在模板上再添加一個圖形原型,以下:
模板應用完若是沒問題就能夠在zabbix的篩選中把mongo集羣的數據匯在一個網頁上進行查看。
Zabbix實戰教程:https://edu.51cto.com/sd/36433