分散式監控系統Zabbix--完整安裝記錄(7)-使用percona監控MySQL

散盡浮華發表於2017-01-06

 

前面已經介紹了分散式監控系統Zabbix-3.0.3-完整安裝記錄(2)-新增mysql監控,但是沒有提供可以直接使用的Key,太過簡陋,監控效果不佳。要想更加仔細的監控Mysql,業內同學們都會選擇採用Percona Monitoring Plugins監控MySQL。Percona有比較詳細的監控Mysql的模版以及指令碼,它提升了在高負載情況下的InnoDB的效能、為運維人員提供一些非常有用的效能診斷工具;另外它有更多的引數和命令來控制伺服器行為。廢話不多說,下面記錄下使用Percona Monitoring Plugins監控MySQL的操作過程:

被監控主機的zabbix的部署路徑是/data/zabbix。
[root@open ~]# ll /data/zabbix/
total 28
drwxr-xr-x 2 zabbix zabbix 4096 Jul 19 10:24 bin
drwxr-xr-x 3 zabbix zabbix 4096 Sep  5 14:12 etc
drwxr-xr-x 2 zabbix zabbix 4096 Jul 19 10:24 lib
drwxr-xr-x 2 zabbix zabbix 4096 Jul 19 10:24 logs
drwxr-xr-x 2 zabbix zabbix 4096 Jul 19 10:24 monitor_scripts    //這個是存放監控指令碼的目錄
drwxr-xr-x 3 zabbix zabbix 4096 Jul 19 10:24 sbin
drwxr-xr-x 4 zabbix zabbix 4096 Jul 19 10:24 share
 
被監控主機的mysql路徑是/usr/local/mysql
[root@open ~]# ps -ef|grep mysql
root      9170  8258  0 11:23 pts/0    00:00:00 grep mysql
root     19000     1  0 Sep01 ?        00:00:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/data/mysql.pid
mysql    19776 19000  0 Sep01 ?        00:07:26 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql/ --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql//lib/plugin --user=mysql --log-error=/data/mysql/data/mysql-error.log --pid-file=/data/mysql/data/mysql.pid --socket=/usr/local/mysql/var/mysql.sock --port=3306
 
 
如下是在zabbix被監控機上的操作:
1)需要安裝php指令碼執行環境
percona監控zabbix的指令碼是使用PHP寫的,所以需要準備好php執行環境,這裡直接選擇用yum安裝就可以滿足要求了:
[root@open ~]# yum install -y php php-mysql
 
確保被監控主機沒有安裝percona相關軟體,如果有就解除安裝掉!
[root@open ~]# rpm -qa|grep percona                         
[root@open ~]#
 
2)下載官方percona模版  (https://www.percona.com/downloads/percona-monitoring-plugins/)
直接下載:https://pan.baidu.com/s/1c1IE7zq      提取密碼:trp5
[root@open ~]# wget https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm
[root@open ~]# rpm -ivh percona-zabbix-templates-1.1.6-1.noarch.rpm
 
[root@open ~]# ll /var/lib/zabbix/percona
total 8
drwxr-xr-x 2 root root 4096 Sep  5 14:35 scripts
drwxr-xr-x 2 root root 4096 Sep  5 14:35 templates
[root@open ~]# ll /var/lib/zabbix/percona/scripts 
total 64
-rwxr-xr-x 1 root root  1251 Jan 11  2016 get_mysql_stats_wrapper.sh
-rwxr-xr-x 1 root root 59640 Jan 11  2016 ss_get_mysql_stats.php
[root@open ~]# ll /var/lib/zabbix/percona/templates
total 284
-rw-r--r-- 1 root root  18866 Jan 11  2016 userparameter_percona_mysql.conf
-rw-r--r-- 1 root root 269258 Jan 11  2016 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml
 
如上,安裝percona後會在/var/lib/zabbix/percona生成2個目錄,其中:
/var/lib/zabbix/percona/scripts是監控指令碼目錄
/var/lib/zabbix/percona/templates是監控mysql的xml模版目錄
然後把/var/lib/zabbix/percona/templates/目錄下的模版檔案zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6_1.xml複製出來,在zabbix的管理介面import匯入進去。
--------------------------------------------------------------------------------------------------------------------------------------------------
但是在匯入此模板的時候,可能會報如下錯誤:
Import failed
Details
Invalid XML tag "/zabbix_export/date":"YYYY-MM-DDThh:mm:ssZ" is expected.  (標籤無效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 預計)
 
經過核查,這個原因是模版錯誤,是因為percona官方上1.1.6還是zabbix2.0的版本模版,所以需要跟新上來匹配zabbix3.0的模版規範,而且這個zabbix模版還是直接copy的cacti模版,比較粗糙,
用more檢視就可以看到裡面都是cacti的內容,可見percona官網對zabbix也不是很重視嘛,至少不如cacti那樣重視的,如下所示:
 
處理辦法:修改配置模版載入成功
在原來的zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6_1.xml之上進行修改,改完後就可以import匯入進去了!!!!
修改好的新模版檔案下載地址是:https://pan.baidu.com/s/1i5j8IJ7    提取密碼:ab8a
--------------------------------------------------------------------------------------------------------------------------------------------------
 
將percona的兩個指令碼放到被監控主機的/data/zabbix/monitor_scripts目錄下
[root@open ~]# mv /var/lib/zabbix/percona/scripts/* /data/zabbix/monitor_scripts/
 
3)新增引數支援
在被監控機器上將userparameter_percona_mysql.conf拷貝到zabbix_agent的對應配置目錄下
[root@open ~]# rsync -avpgolr /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /data/zabbix/etc/zabbix_agentd.conf.d/
[root@open ~]# sed -i 's#/var/lib/zabbix/percona/scripts/#/data/zabbix/monitor_scripts/#g' /data/zabbix/etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf
 
注意修改客戶端機器的zabbix_agentd.conf檔案,增加Include 把userparameter_percona_mysql.conf 所在的目錄增加進去:
[root@open ~]# cat /data/zabbix/etc/zabbix_agentd.conf|grep Include 
### Option: Include
Include=/data/zabbix/etc/zabbix_agentd.conf.d/
# Include=/usr/local/etc/zabbix_agentd.userparams.conf
# Include=/usr/local/etc/zabbix_agentd.conf.d/
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
 
4)修改監控指令碼  
修改/data/zabbix/monitor_scripts/get_mysql_stats_wrapper.sh指令碼
-----------------------------------注意----------------------------------
若mysql沒有使用默埠3006,比如mysql使用的是3317。則還需要修改如下指令碼檔案,記住不要在這裡被坑了!改埠號碼檔案:
1-> 這裡要先建好這個檔案,否則會報rm許可權錯誤
[root@open ~]# touch /tmp/localhost-mysql_cacti_stats.txt:3317
[root@open ~]# chown -R zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt:3317
 
2-> 修改埠指令碼
[root@open ~]# vim /data/zabbix/monitor_scripts/get_mysql_stats_wrapper.sh
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt "
換成:
CACHEFILE="/tmp/$HOST-mysql_zabbix_stats.txt:3317"
  
TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
換成:
TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_zabbix_stats.txt:3317`
 
如果mysql使用的是預設的3306埠,那麼就不用修改埠了(即將上面的:3317去掉)!
--------------------------------------------------------------------------
 
修改mysql執行命令路徑(如下指令碼,可以監控到mysql的主從同步狀態)
[root@open ~]# vim /data/zabbix/monitor_scripts/get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
換成:
RES=`/usr/local/mysql/bin/mysql -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` 
 
然後修改/data/zabbix/monitor_scripts/ss_get_mysql_stats.php指令碼,這裡主要修改使用者名稱密碼:
[root@open ~]# vim /data/zabbix/monitor_scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbixmysql';
$mysql_pass = 'mysql@12345678';
$mysql_port = 3306;
 
登陸mysql建立監控要用的賬號(授予的許可權,最後手動登入驗證下)
[root@open ~]# mysql -p123456
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbixmysql'@'localhost' IDENTIFIED BY "mysql@12345678";      
Query OK, 0 rows affected (0.03 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
5)修改被監控主機的zabbix許可權,並重啟zabbix_agent服務
最後記得重啟下zabbix_agent(重啟前要保證zabbix的配置檔案和監控指令碼的許可權正確,否則就會採集不到監控資料)
[root@open ~]# chown -R zabbix.zabbix /data/zabbix
[root@open ~]# chmod -R 755 /data/zabbix/monitor_scripts/*
[root@open ~]# /etc/init.d/zabbix_agentd restart
 
另外,要新增zabbix的sudo許可權
[root@open ~]# cat /etc/sudoers
......
zabbix ALL=(ALL) NOPASSWD: /sbin/blockdev
#Defaults requiretty                          //如果有這個配置項,那麼就註釋掉這個。沒有的話就忽略
 
6)測試下監控項
在客戶端zabbix-agentd測試下:
[root@open ~]# /usr/bin/php -q /data/zabbix/monitor_scripts/ss_get_mysql_stats.php --host localhost --items gg
gg:6
[root@open ~]#
 
在伺服器zabbix-server測試下(172.29.16.30是被監控主機的ip地址):
[root@zabbix ~]# /data/zabbix/bin/zabbix_get -s 172.29.16.30 -p 10050 -k "MySQL.Threads-connected"
1
[root@zabbix ~]# /data/zabbix/bin/zabbix_get -s 172.29.16.30 -p 10050 -k "MySQL.Handler-commit"  
3
---------------------------------------------注意------------------------------------------------
如果對zabbix_server本機進行測試(即zabbix_server本機也作為zabbix_agent),那麼-s後的ip要用zabbix_server本機的內網ip(即要和zabbix_agent配置檔案裡配置的地址一致),而不能使用127.0.0.1
否則會報錯:Check access restrictions in Zabbix agent configuration error(這個命令只能在zabbix的server端使用,如果在agent端使用就會提示這個錯誤:)

接著在zabbix的web監控介面裡新增被監控主機,選擇新增"Percona MySQL Server Template"模板,如下

最後就來看下percona外掛監控mysql的效果圖了(可以看出percona mysql的監控項有很多):

相關文章