zabbix監控mysql+報警

zabbix監控mysql性能

在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 Agent, Zabbix Server, MySQL, 模板

第一步,監控規劃

在建立監控項以前要儘可能考慮清楚要監控什麼,怎麼監控,監控數據如何存儲,監控數據如何展示,如何處理報警等。要進行監控的系統規劃須要對Zabbix很瞭解,這裏只是提出監控的需求。linux

需求一:監控MySQL的狀態,當狀態發生異常,發出報警;
需求二:監控MySQL的操做,並用圖表展示;
第二步,使用自定義腳本監控擴展Agent。

Zabbix Server與Agent之間監控數據的採集主要是經過Zabbix Server主動向Agent詢問某個Key的值,Agent會根據Key去調用相應的函數去獲取這個值並返回給Server端。Zabbix 2.4.7的Agent本並無內置MySQL的監控功能(可是Server端提供了相應的Template配置),因此咱們須要使用Zabbix的User Parameters功能,爲MySQL添加監控腳本。git

Trapper工做原理:

被監控主機根據用戶設定的時間間隔按期將數據push到Zabbix Server.這裏主要介紹Agent.github

Agent工做原理:

  • Agent 安裝在被監控主機上,按期主動的監控本機的資源和應用,而後將數據進行處理髮送給ZabbixServer. Agent工做方式又分爲Passive Check 和 Active Check。
  • Passive Check: Zabbix Server 發起數據索取請求,Agent響應對應的數據.
  • Active Check: Agent首先從Zabbix Server 檢索監控項列表,而後按期將對應的數據主動的發送到.Zabbix ServerZabbix Agent 自己預約義了一些監控類型,而對於沒有預約義的須要管理員自行定義.所以,Zabbix提供了」UserParameter」參數,以方便用戶根據本身的需求自定義想要獲取的數據.

「UserParameter」 語法:

UserParameter=<key>,<command>

用戶自定義一個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;

 

agent

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的頻率

 

能夠參考http://blog.yangcvo.me/2014/09/29/%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7/Zabbix/zabbix%E7%9B%91%E6%8E%A7MySQL-%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9B%91%E6%8E%A7%E9%A1%B9/

相關文章
相關標籤/搜索