在Zabbix的監控系統中一般是由Zabbix Server與Zabbix Agent一塊兒配合實現監控,在Zabbix Agent內置了不少監控基礎的監控項。
php
這些監控項都是CPU, 文件系統, 網絡,磁盤等基礎的監控項,對於本身開發服務的監控,Zabbix提供了良好框架爲用戶實現監控和報警,下面將覺得MySQL添加監控爲例,介紹如何添加自定義監控。前端
1.NySQL 192.168.2.6 (agent)java
2.Zabbix Server 172.30.1.208mysql
在建立監控項以前要儘可能考慮清楚要監控什麼,怎麼監控,監控數據如何存儲,監控數據如何展示,如何處理報警等。要進行監控的系統規劃須要對Zabbix很瞭解,這裏只是提出監控的需求。linux
Zabbix Server與Agent之間監控數據的採集主要是經過Zabbix Server主動向Agent詢問某個Key的值,Agent會根據Key去調用相應的函數去獲取這個值並返回給Server端。Zabbix 2.4.7的Agent本並無內置MySQL的監控功能(可是Server端提供了相應的Template配置),因此咱們須要使用Zabbix的User Parameters功能,爲MySQL添加監控腳本。git
被監控主機根據用戶設定的時間間隔按期將數據push到Zabbix Server.這裏主要介紹Agent.github
用戶自定義一個key; 爲命令,該命令用來獲取用戶想要監控的數據,也就是key的值;
定好UserParameter參數後,在爲主機或者模板配置監控項的時候,在」key」中輸入上面自定義的key的
名字就能夠了.sql
假如我要獲取Mysql Server的版本,我能夠這樣定義」UserParameter」:
打開 Zabbix Agent安裝路徑下的 ../etc/zabbix_agentd.conf 配置文件,翻頁到最後頁面,鍵入以下
行:shell
UserParameter=mysql.version,mysql -V
這裏咱們自定義的key名就是"mysql.version"
,命令"mysql -V"
用來獲取Mysql 版本號,其實就是key對
應的值.數據庫
UserParameter參數實現的原理通俗來說,就是咱們先要熟悉Mysql命令,經過Mysql的命令獲取想要的
數據,而後賦值給自定義的key,最後經過Zabbix Server獲取這個值經過圖像等方式展現出來.
下面利用Agent來實現對mysql性能的監控。
受權mysql登陸用戶(agent端):
mysql> grant usage on *.* to zabbix@127.0.0.1 identified by '123456'; mysql> flush privileges;
1.利用UserParameter參數自定義Agent Key。
對於需求一 ,咱們採用mysqladmin這個工具來實現,命令以下:
linux:/etc/zabbix/zabbix-agentd.conf.d # mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping mysqld is alive
若是MySQL狀態正常,會顯示mysqld is alive,不然會提示鏈接不上。對於服務器端,mysqld is alive這樣的句子很差理解,服務器端最好只接收1和0,1表示服務可用,0表示服務不可用。那麼再改進一下這個命令,以下:
linux:/etc/zabbix/zabbix-agentd.conf.d # mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive 1
用戶名和密碼放在命令中對於之後的維護很差,因此咱們在/etc/zabbix/下建立一個包含MySQL用戶名和密碼的配置文件「.my.cnf」,以下:(我這裏沒有這麼作)
[client] user=zabbix host=192.168.2.6 password=123456
linux:/etc/zabbix/zabbix-agentd.conf.d # HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
作完這一步後須要作的就是,將這個監控命令添加到Zabbix Agent中,並與一個Key對應,這樣Zabbox Server就能經過這個Key獲取MySQL的狀態了。咱們使用mysql.ping做爲MySQL狀態的Key。
首先在去除/etc/zabbix/zabbix-agentd.conf中 包含子配置文件路徑的註釋,並修改
Include=/etc/zabbix/zabbix-agentd.conf.d/ (這裏根據本身狀況取名就行,別忘了建立這個目錄)
其次,在etc/zabbix/zabbix_agentd.conf.d/目錄下建立userparameter_mysql.conf文件。在文件中添加以下命令:
linux:/etc/zabbix/zabbix-agentd.conf.d # cat userparameter_mysql.conf UserParameter=mysql.ping,mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive
這個命令中」UserParameter」表示這是一個用戶自定義的腳本;「=」號後是腳本的內容;「mysql.ping」是Key,「,」號後的命令會在Zabbix Server向Agent發起獲取「mysql.ping」這個key的請求時被調用,並將返回值返回給Server。
保存並退出後可使用下面的命令測試是否正常工做。
linux:/etc/zabbix # /usr/sbin/zabbix-agentd -t mysql.ping -c /etc/zabbix/zabbix-agentd.conf.d/userparameter_mysql.conf (正常工做) mysql.ping [t|1]
這裏zabbix_agentd使用方法可參考:
http://www.ttlsa.com/zabbix/zabbix-command-zabbix_agentd/
同時,在Server端也可使用使用zabbix_get命令來測試從Server端獲取指定的Client端的數據,以下:
[root@Zabbixserver alertscripts]# zabbix_get -s192.168.2.6 -p 10050 -k mysql.ping 1
這裏若是操做是跟我同樣,但你是有錯誤的
可能跟你安裝版本不統一有問題。
這裏zabbix_get使用方法可參考: http://www.ttlsa.com/zabbix/zabbix-zabbix_get-get-items/
也能夠參考官網方法:
https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters/extending_agent
而後下載安裝MySQL監控的模板 (我這裏使用腳本監控+zabbix自帶MySQL模板)
https://github.com/yangcvo/zabbix.2.4/
我這裏使用的是zabbix 自帶模板 Template App MySQL
建立主機 192.168.2.6
關聯模板
建立監控項
建立圖形
查看監控圖像
設置報警,建立觸發器,動做(當STATUS=0時,報警)
進行測試
停掉數據庫(測試環境)
linux:~ # /etc/init.d/mysql stop
查看郵件
郵件提示我數據庫STATUS=0 也就是down了
恢復數據庫
linux:~ # /etc/init.d/mysql start
郵件提示我數據庫STATUS=1也就是UP了
zabbix監控mysql性能
經過獲取mysql狀態值將這些狀態值傳遞給服務器並繪製成圖片,這樣能夠觀察mysql的工做狀況,一般須要得到狀態變量有如下
Com_update:mysql執行的更新個數
Com_select:mysql執行的查詢個數
Com_insert:mysql執行插入的個數
Com_delete:執行刪除的個數
Com_rollback:執行回滾的操做個數
Bytes_received:接受的字節數
Bytes_sent:發送的字節數
Slow_queries:慢查詢語句的個數
監控mysql腳本(chk_mysql.sh 在客戶端編寫)
linux:/etc/zabbix # cat chk_mysql.sh
#!/bin/bash # ------------------------------------------------------------------------------- # FileName: check_mysql.sh # Revision: 1.0 # ------------------------------------------------------------------------------- # Copyright: # License: GPL # 用戶名 MYSQL_USER='zabbix' # 密碼 MYSQL_PWD='123456' # 主機地址/IP MYSQL_HOST='127.0.0.1' # 端口 MYSQL_PORT='3306' # 數據鏈接 MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" # 參數是否正確 if [ $# -ne "1" ];then echo "arg error!" fi # 獲取數據 case $1 in Uptime) result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` echo $result ;; Com_update) result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` echo $result ;; Com_select) result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` echo $result ;; Bytes_received) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` echo $result ;; *) echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)" ;; esac
重啓zabbix客戶端
linux:/etc/zabbix # /etc/init.d/zabbix-agentd restart
在userparameter_mysql.conf 增長自定義key
linux:/etc/zabbix # cat zabbix-agentd.conf.d/userparameter_mysql.conf
UserParameter=mysql.ping,mysqladmin -uzabbix -p'123456' -h127.0.0.1 ping | grep -c alive UserParameter=mysql.version,mysql -V UserParameter=mysql.status[*],/etc/zabbix/chk_mysql.sh $1
在zabbix服務器端測試
[root@Zabbixserver alertscripts]# zabbix_get -s 192.168.2.6 -p10050 -k mysql.status[Com_insert] 121354 [root@Zabbixserver alertscripts]# zabbix_get -s 192.168.2.6 -p10050 -k mysql.status[Uptime] 62602
在zabbix客戶端測試是否能獲取到信息
linux:/etc/zabbix/zabbix-agentd.conf.d # zabbix-agentd -tmysql.status[Uptime] -c /etc/zabbix/zabbix-agentd.conf.d/userparameter_mysql.conf mysql.status[Uptime] [t|62325]
建立圖形(步驟就不演示了)
查看圖形
zabbix配置文件詳解
zabbix的配置文件通常有三種:
zabbixserver的配置文件zabbix_server.conf
zabbixproxy的配置文件zabbix_proxy.conf
zabbix_agentd的配置文件zabbix_agentd.conf
1.zabbixserver的配置文件:
NodeID=0 #分佈式節點id號,0表明是獨立服務器,默認是被註釋掉的,不強制配置
ListenPort=10051 #zabbix server的端口,默認是10051,能夠自行修改,
範圍是1024-32767 ,通常默認便可
SourceIP= #鏈接的源ip地址,默認爲空,默認便可
LogFile=/tmp/zabbix_server.log #日誌文件的存放位置
LogFileSize=1 #日誌文件的大小,單位爲MB,當設置爲0時,表示不只行日誌輪詢,
默認設置爲1,默認便可
DebugLevel=3 #指定調試級別,默認便可
PidFile=/tmp/zabbix_server.pid #pid文件的存放位置
DBHost=localhost #數據庫主機名,當設置爲localhost時,鏈接mysql經過sock
DBName=zabbix #指定存放zabbix數據數據庫的名字
DBUser=zabbix #指定鏈接數據庫的用戶名
DBPassword=123456 #用戶鏈接數據庫須要的密碼
DBSocket=/var/lib/mysql/mysql.sock #前文主機設置爲localhost,用戶
鏈接數據庫所用的sock位置,
DBPort=3306 #數據庫的端口號,當用sock鏈接時,可有可無,當經過網絡鏈接時需設置
StartPollers=5 #默認便可
StartIPMIPollers=0 #使用IPMI協議時,用到的參數
StartTrappers=5 #打開的進程數,
StartPingers=1 同上
StartDiscoverers=1
StartHTTPPollers=1
JavaGateway=127.0.0.1 #JavaGateway的ip地址或主機名
JavaGatewayPort=10052 #JavaGateway的端口號
StartJavaPollers=5 #開啓鏈接javagatey的進程數
SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=0 #若是設置爲1,snmp trapper進程就會開啓
ListenIP=0.0.0.0 #監聽來自trapper的ip地址
ListenIP=127.0.0.1
HousekeepingFrequency=1 #zabbix執行Housekeeping的頻率,單位爲hours
MaxHousekeeperDelete=500 #每次最多刪除歷史數據的行
SenderFrequency=30 #zabbix試圖發送未發送的警報的時間,單位爲秒
CacheSize=8M #緩存的大小
CacheUpdateFrequency=60#執行更新緩存配置的時間,單位爲秒數
StartDBSyncers=4
HistoryCacheSize=8M
TrendCacheSize=4M
HistoryTextCacheSize=16M
NodeNoEvents=0
NodeNoHistory=0
Timeout=3
TrapperTimeout=300
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
AlertScriptsPath=/usr/local/zabbix/shell #腳本的存放路徑
FpingLocation=/usr/local/sbin/fping #fping指令的絕對路徑
SSHKeyLocation=
LogSlowQueries=0
TmpDir=/tmp
Include=/usr/local/etc/zabbix_server.general.conf
Include=/usr/local/etc/zabbix_server.conf.d/ #子配置文件路徑
StartProxyPollers=1 #在zabbix proxy被動模式下用此參數
ProxyConfigFrequency=3600#同上
ProxyDataFrequency=1
zabbixagentd的配置文件
啊別必須
PidFile=/tmp/zabbix_agentd.pid #pid文件的存放位置
LogFile=/tmp/zabbix_agentd.log #日誌文件的位置
LogFileSize=1 #當日志文件達到多大時進行輪詢操做
DebugLevel=3 #日誌信息級別
SourceIP= #鏈接的源ip地址,默認爲空,便可
EnableRemoteCommands=0 #是否容許zabbix server端的遠程指令,
0表示不容許,
1表示容許
LogRemoteCommands=0 #是否開啓日誌記錄shell命令做爲警告 0表示不容許,1表示容許
Server=127.0.0.1 #zabbix server的ip地址或主機名,可同時列出多個,須要用逗號隔開
ListenPort=10050 #zabbix agent監聽的端口
ListenIP=0.0.0.0 #zabbix agent監聽的ip地址
StartAgents=3 #zabbix agent開啓進程數
ServerActive=127.0.0.1 #開啓主動檢查
Hostname=Zabbix server#在zabbix server前端配置時指定的主機名要相同,最重要的配置
RefreshActiveChecks=120 #主動檢查刷新的時間,單位爲秒數
BufferSend=5 #數據緩衝的時間
BufferSize=100 #zabbix agent數據緩衝區的大小,當達到該值便會發送全部的數據到zabbix server
MaxLinesPerSecond=100 #zabbix agent發送給zabbix server最大的數據行
AllowRoot=0 #是否容許zabbix agent 以root用戶運行
Timeout=3 #設定處理超時的時間
Include=/usr/local/etc/zabbix_agentd.userparams.conf
Include=/usr/local/etc/zabbix_agentd.conf.d/ #包含子配置文件的路徑
UnsafeUserParameters=0 #是否容許全部字符參數的傳遞
UserParameter= #指定用戶自定義參數
zabbixproxy的配置文件
Server=192.168.70.133 #指定zabbix server的ip地址或主機名
Hostname=zabbix-proxy-1.35 #定義監控代理的主機名,需和zabbix server前端配置時指定的節點名相同
LogFile=/tmp/zabbix_proxy.log #指定日誌文件的位置
PidFile=/tmp/zabbix_proxy.pid #pid文件的位置
DBName=zabbix_proxy #數據庫名
DBUser=zabbix #鏈接數據庫的用戶
DBPassword=123456#鏈接數據庫用戶的密碼
ConfigFrequency=60 #zabbix proxy從zabbix server取得配置數據的頻率
DataSenderFrequency=60 #zabbix proxy發送監控到的數據給zabbix server的頻率