使用 zabbix 自動發現監控 MySQL

MySQL 編程語言 腳本語言 PHP 達人科技 2017-06-05

介紹

使用 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: [email protected]:59980

相關推薦

推薦中...