介紹 使用 zabbix 的 low-level 自動發現功能完成單主機多埠的監控, 詳見low_level_discovery, 整體上監控類似 percona 的 zabbix 監控插件, 不過使用 mymonitor.pl 替換了腳本 ss_get_mysql_stats.php, 而且配置 ...
介紹
使用 zabbix 的 low-level 自動發現功能完成單主機多埠的監控, 詳見low_level_discovery, 整體上監控類似 percona 的 zabbix 監控插件, 不過使用 mymonitor.pl
替換了腳本 ss_get_mysql_stats.php
, 而且配置有點不同.
具體代碼及配置詳見: zabbix_mysql
1. 結構說明:
zabbix_mysql/ |-- README.md |-- bin | |-- get_mysql_stats_wrapper.sh # 對 mymonitor.pl 運行結果的一個封裝腳本, 預設 5 分鐘運行一次 | |-- mymonitor.pl # 等同 ss_get_mysql_stats.php 腳本 | `-- mysql_port.pl # 自動發現 MySQL 埠的腳本, 返回 json 格式的輸出 |-- install.sh # 安裝腳本 `-- templates |-- userparameter_discovery_mysql.conf # zabbix_agent 配置參數 `-- zabbix_mysql_multiport.xml # zabbix_server 端模板
mymonitor.pl
腳本依賴以下模塊:
perl-DBI perl-DBD-mysql
監控需要的許可權包括: PROCESS, SUPER, REPLICATION SLAVE
, 在 mysql_port.pl
腳本中通過 netstat
命令獲取運行 MySQL 的埠, 腳本以 zabbix 用戶(或普通用戶)啟動, 為避免許可權問題, 腳本 install.sh 預設執行 chmod +s /bin/netstat
命令.
mymonitor.pl 腳本預設以 monitor/monitor
用戶及口令的方式連接 MySQL 獲取狀態, 可以在腳本的初始處修改預設密碼, 或者在運行時指定--user
和--password
相關參數信息, 也可以在 /home/mysql/.my.cnf
指定用戶信息, 詳細可參見 perldoc mymonitor.pl
get_mysql_stats_wrapper.sh
腳本預設讀取 mymonitor.pl
生成的文件以響應 zabbix 的請求, 預設5分鐘一次; 同時因為需要頻繁(預設1分鐘)檢測 slave 運行狀態, 需要提供 MySQL 登錄信息, 以便 slave 的檢測.
2. 安裝說明
在 agent 端操作:
# git clone https://github.com/chenzhe07/zabbix_mysql.git /usr/local/zabbix_mysql # bash /usr/local/zabbix_mysql/install.sh 192.168.1.2
192.168.1.2
為內網 ip 地址, 這裡考慮到可能存在多個內網ip, 所以沒有自動獲取, 需要用戶手動添加.
在 server 端操作:
import templates/zabbix_mysql_multiport.xml using Zabbix UI(Configuration -> Templates -> Import),
and Create/edit hosts by assigning them “MySQL” group and linking the template “MySQL_zabbix” (Templates tab).
導入模板, 並將模板加到待監控的機器里.
3. 測試
# perl mymonitor.pl --host 10.0.0.10 --port 3300 --items hv hv:36968 # perl mymonitor.pl --host 10.0.0.10 --port 3300 --items kx kx:1070879944 # php ss_get_mysql_stats.php --host 10.0.0.10 --port 3300 --items hv hv:36968 # php ss_get_mysql_stats.php --host 10.0.0.10 --port 3300 --items kx kx:1070911408 # zabbix_get -s 10.0.0.10 -p 10050 -k "MySQL.Bytes-received[3300]" 472339244134
其它特性
較新的版本增加了 innodb 事務, 鎖, 長語句運行檢測:
item throttle max_duration if > 100s, then trigger an alarm waiter_count if > 10, then trigger an alarm idle_blocker_duration if > 200s, then trigger an alarm
如下測試:
# zabbix_get -s cz-test2 -p 10050 -k "MySQL.max_duration[3301]" max_duration:longest transaction active seconds: max time: 18, thread_id: 4838781, user: root@10.0.21.5:59980