zabbix監控mysql+報警


zabbix監控mysql性能

在Zabbix的監控系統中通常是由Zabbix Server與Zabbix Agent一起配合實現監控,在Zabbix Agent內置了很多監控基礎的監控項。

這些監控項都是CPU, 文件系統, 網絡,磁盤等基礎的監控項,對於自己開發服務的監控,Zabbix提供了良好框架為用戶實現監控和報警,下面將以為MySQL添加監控為例,介紹如何添加自定義監控。

實驗環境

1.NySQL 192.168.2.6 (agent)

2.Zabbix Server 172.30.1.208

角色:Zabbix Agent, Zabbix Server, MySQL, 模板

第一步,監控規划

在創建監控項之前要盡量考慮清楚要監控什么,怎么監控,監控數據如何存儲,監控數據如何展現,如何處理報警等。要進行監控的系統規划需要對Zabbix很了解,這里只是提出監控的需求。

需求一:監控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添加監控腳本。

Trapper工作原理:

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

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的
名字就可以了.

假如我要獲取Mysql Server的版本,我可以這樣定義”UserParameter”:
打開 Zabbix Agent安裝路徑下的 ../etc/zabbix_agentd.conf 配置文件,翻頁到最后頁面,鍵入如下
行:

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/

 


免責聲明!

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



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