使用Zabbix + Python對Mysql監控


一、背景介紹

隨着公司業務的變遷,公司的開發數據庫以mysql為主了。mysql服務器層面的監控,例如CPU、內存、硬盤空間等就用zabbix自帶的linux模板即可。數據庫層面zabbix也自帶了一個模板,但是它需要將mysql的密碼寫到my.cnf文件中,這樣不安全,因此決定自己寫一個。原先我寫過一個用python去監控oracle的博客使用zabbix監控oracle數據庫,對於mysql的監控大同小異,只需要簡單改改監控項即可。

二、監控方式

Zabbix服務端的環境為:CentOS 6.10, Zabbix 3.4.15, Python 3.6.8。被監控的mysql 版本為8.0.x。監控采用外部檢查(External Check)的方式,即從zabbix服務端執行python腳本,去查詢被監控的mysql信息。這種方式的好處是監控腳本放在zabbix服務端,后面想修改模板和腳本只需要在zabbix服務端修改一次即可,被監控端不用做任何操作,省心。

三、監控項規划

確定好了監控方式,接下來就開始對監控項進行規划。

1. os層

port:mysql端口是否正常監聽,檢測不到監聽端口,報警
proc:mysqld進程是否存在,檢測不到mysqld進程,報警
以上兩個監控項通過zabbix agent采集信息(需要在被監控機安裝zabbix-agent)

2. db層

主庫和從庫都包括的監控項:
readonly:是否只讀,狀態發生改變時報警
uptime:運行時間,uptime減少表示數據庫發生了重啟,報警
queries:檢查qps
select: 查詢的sql次數
update: 更新的sql次數
delete: 刪除的sql次數
insert: 插入的sql次數
slow_queries: 慢查詢次數
threads_running: 正在運行的線程數,設定100,超過該值報警,根據自己需求適當調整
threads_limit: 線程限制,設定90%,超過該值報警,根據自己需求適當調整

只在從庫有的監控項:
從庫采用自動發現的方式,即執行“show slave status”有結果就表明這個是從庫
slave_io_running:從庫的io線程,如果不為YES,報警
slave_sql_running: 從庫的sql線程,如果不為YES,報警
seconds_behind_master:從庫落后主庫的時間,設定10分鍾,超過該值報警,根據自己需求適當調整

四、實踐

  1. 我假設你已經有了zabbix服務端,因此這里略過如何搭建zabbix。

  2. 在zabbix服務端安裝python3(略),並安裝argparse, inspect, pymysql包。

  3. 將附件中的mysqlmon.py放入/usr/lib/zabbix/externalscripts下,同時賦權限chmod 755 mysqlmon.py,注意修改mysqlmon.py的第一行#!/usr/local/python3/bin/python3,這里要改成你自己的python執行路徑。

  4. 將附件的mysql_template.xml導入到zabbix中(我是基於zabbix 3.4.15寫的模板,其它zabbix版本可能會出現模板導不進去的情況)。
    微信截圖_20211206155400.png

  5. 添加服務器,鏈接到模板Template-Db-Mysql-ExternalCheck-Customize。
    微信截圖_20211206155513.png

  6. 在被監控的mysql中創建監控用戶,用戶只需要有show view, replication client權限即可。
    grant show view, replication client on . to xxx;

  7. 修改主機中的宏(address,username,password填寫被監控mysql的信息)
    微信截圖_20211206154759.png

后面就能看到相關圖形和報警了
微信截圖_20211206173047.png

微信截圖_20211206162033.png

如果想自己添加一個監控項,則只需要在mysqlmon.py添加一個方法,方法名與key的參數名一致即可(下面是一個示例,我用紅框圈出來的地方)
微信截圖_20211206180756.png

微信截圖_20211206173644.png

如果大家在使用過程中碰到了問題以及想添加其它的監控項,歡迎大家在博客下面留言,我后續對這個模板進行改進。

五、附件

下面附件下載都為txt后綴,需要手工修改
mysqlmon.py下載地址
mysql_template.xml下載地址


免責聲明!

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



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