转 zabbix debug and zabbix使用percona插件监控mysql zabbix使用percona插件监控mysql http://www.manongjc.com/article/18964.html Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确 Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现 1.多实例 2. zabbix 自动发现脚本文件mysql_low_discovery.sh 3. 修改ss_get_mysql_stats.php脚本 4. 修改userparameter_percona_mysql.conf 配置文件 5.导入模板 附件:
##########
https://www.cnblogs.com/keithtt/p/8542987.html
1、添加percona仓库。
# yum install -y https://mirrors.tuna.tsinghua.edu.cn/percona/yum/percona-release-latest.noarch.rpm
2、安装插件。
# yum -y install percona-zabbix-templates
# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
3、这个项目是php写的,需要安装php和php-mysql。(这个在官网有说明)
# yum install -y php php-mysql
4、拷贝配置文件到配置目录,并重启zabbix-agent。
# cp -a /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# rm -f /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# service zabbix-agent restart
5、授权监控用户,使其能获取数据。
# mysql -uroot -p
> grant all privileges on *.* to zabbix@localhost identified by 'PASS';
> flush privileges;
> quit;
6、修改程序里面的用户密码,使其能连接到mysql。
# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = 'PASS';
7、修改监控脚本。脚本里面是直接执行mysql命令获取数据的,但是没有指定用户名和密码,导致连不上数据库。为mysql命令加上用户名密码参数即可。
# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -uzabbix -pPASS -e 'SHOW SLAVE STATUSG' 2> /dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '
' ','`
或者更简单一点,直接添加一个mysql的客户端验证配置。
# vim ~zabbix/.my.cnf
[client]
user = zabbix
password = PASS
8、测试脚本是否能获取到数据。
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
16
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jg
0
# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'proc.num[mysqld]'
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'mysql.ping'
1
9、导入模板。在这里踩到坑,安装包提供的插件版本是1.1.8,导入过程中报错。经过一番查询,可以使用1.1.6。
可以从这里下载1.1.6版本的文件:https://www.percona.com/downloads/percona-monitoring-plugins/
按理说,导入模板之后,链接到主机就可以查看到数据了。不过,等了很久一直没数据,又是经过一番查询...
插件创建了一个状态文件,然后从中读取数据,但是这个文件第一次启动的时候所属用户是root,而zabbix的启动用户是zabbix,没有权限读取这个文件,所以页面上一直没有数据。
解决办法很简单,删除这个文件即可,程序会自动创建一个权限正确的新文件。
# rm -f /tmp/localhost-mysql_cacti_stats.txt
10、到这里就可以看到数据了。
补充:
如果把默认端口3306改成了别的端口,也会造成报错读取不到数据。
在/var/lib/zabbix/percona/scripts目录下有两个脚本,经过仔细查看,发现get_mysql_stats_wrapper.sh在指定读取的状态文件时路径是写的是CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
,而在/tmp/目录下是一个带端口的文件localhost-mysql_cacti_stats.txt:3310,这样肯定就读不到了。然后去找文件是在哪里生成的,查看另一个php脚本,果然做了判断处理,端口不是3306的话就在文件名后面加上端口号。
问题找到了,将源码中的判断部分去掉就好了。
# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 3306 ? ":$port" : '');
改成:
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt";
参考:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
https://blog.****.net/liang_operations/article/details/81868668
######sample 3 小bug
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
今天小试了一把Percona Monitoring Plugins for Zabbix模板,自己辛辛苦苦写的那一大堆Python脚本,貌似用这个模板全都覆盖到了。
但是,我也发现最新的版本percona-monitoring-plugins_1.1.8也还是存在一个问题,那就是用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确(一般情况下,两项数据均维持在0)。
经检查相关模板的脚本文件ss_get_mysql_stats.php,发现用于获取Slave Running和Slave Stopped监控项的脚本逻辑有问题。
相关脚本内容为:
$status['slave_lag'] = $row['seconds_behind_master']; ...... $status['slave_running'] = ($row['slave_sql_running'] == 'Yes') ? $status['slave_lag'] : 0; $status['slave_stopped'] = ($row['slave_sql_running'] == 'Yes') ? 0 : $status['slave_lag'];
可见当slave_sql_running为Yes时,slave_running的取值是seconds_behind_master,slave_stopped的取值是0。
当slave_sql_running为No时,slave_running的取值是0,slave_stopped的取值是seconds_behind_master。
这里我将脚本中$status['slave_lag']更改为了1:
$status['slave_lag'] = $row['seconds_behind_master']; ...... $status['slave_running'] = ($row['slave_sql_running'] == 'Yes') ? 1 : 0; $status['slave_stopped'] = ($row['slave_sql_running'] == 'Yes') ? 0 : 1;
修改后监控数据正常了。
############
https://blog.****.net/u011731378/article/details/79092259
1、添加percona仓库。
# yum install -y https://mirrors.tuna.tsinghua.edu.cn/percona/yum/percona-release-latest.noarch.rpm
2、安装插件。
# yum -y install percona-zabbix-templates
# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
3、这个项目是php写的,需要安装php和php-mysql。(这个在官网有说明)
# yum install -y php php-mysql
4、拷贝配置文件到配置目录,并重启zabbix-agent。
# cp -a /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# rm -f /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# service zabbix-agent restart
5、授权监控用户,使其能获取数据。
# mysql -uroot -p
> grant all privileges on *.* to zabbix@localhost identified by 'PASS';
> flush privileges;
> quit;
6、修改程序里面的用户密码,使其能连接到mysql。
# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = 'PASS';
7、修改监控脚本。脚本里面是直接执行mysql命令获取数据的,但是没有指定用户名和密码,导致连不上数据库。为mysql命令加上用户名密码参数即可。
# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -uzabbix -pPASS -e 'SHOW SLAVE STATUSG' 2> /dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '
' ','`
或者更简单一点,直接添加一个mysql的客户端验证配置。
# vim ~zabbix/.my.cnf
[client]
user = zabbix
password = PASS
8、测试脚本是否能获取到数据。
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
16
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jg
0
# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'proc.num[mysqld]'
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'mysql.ping'
1
9、导入模板。在这里踩到坑,安装包提供的插件版本是1.1.8,导入过程中报错。经过一番查询,可以使用1.1.6。
可以从这里下载1.1.6版本的文件:https://www.percona.com/downloads/percona-monitoring-plugins/
按理说,导入模板之后,链接到主机就可以查看到数据了。不过,等了很久一直没数据,又是经过一番查询...
插件创建了一个状态文件,然后从中读取数据,但是这个文件第一次启动的时候所属用户是root,而zabbix的启动用户是zabbix,没有权限读取这个文件,所以页面上一直没有数据。
解决办法很简单,删除这个文件即可,程序会自动创建一个权限正确的新文件。
# rm -f /tmp/localhost-mysql_cacti_stats.txt
10、到这里就可以看到数据了。
补充:
如果把默认端口3306改成了别的端口,也会造成报错读取不到数据。
在/var/lib/zabbix/percona/scripts目录下有两个脚本,经过仔细查看,发现get_mysql_stats_wrapper.sh在指定读取的状态文件时路径是写的是CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
,而在/tmp/目录下是一个带端口的文件localhost-mysql_cacti_stats.txt:3310,这样肯定就读不到了。然后去找文件是在哪里生成的,查看另一个php脚本,果然做了判断处理,端口不是3306的话就在文件名后面加上端口号。
问题找到了,将源码中的判断部分去掉就好了。
# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 3306 ? ":$port" : '');
改成:
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt";
参考:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
https://blog.****.net/liang_operations/article/details/81868668
RES=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l`
if [ "$RES" -ne 2 ]; then
echo 1
else
RES1=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr ' ' ','`
if [ "$RES1" = " Yes, Yes," ]; then
echo 1
else
echo 0
fi
fi
exit