zabbix监控mysql 5.7模版制作-修正
环境:
OS:Centos 7
zabbix server:7.0.29 docker compose部署
zabbix agent:7.0.29 普通方式部署,非docker
被监控的mysql:5.7
1.创建监控账号
在被监控的机器上创建账号
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'zabbix'@'%' identified by 'zabbix';
2.定义好获取mysql数据脚本
在被监控机器上操作
mkdir -p /etc/zabbix/scripts
vi /etc/zabbix/scripts/mysql_status.sh
[root@dev-dbmaster-13 scripts]# more mysql_status.sh
#!/bin/bash
MYSQL_USER="zabbix"
MYSQL_PASS="zabbix"
MYSQL_PORT=3306
MYSQL_SOCK="/home/mysql57/data/mysql.sock"
case $1 in
ping)
# 判断mysql是否存活,返回1正常,0异常
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -e "select 1;" >/dev/null 2>&1
if [ $? -eq 0 ];then
echo 1
else
echo 0
fi
;;
tps)
# 获取 show global status 状态值
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -e "SHOW GLOBAL STATUS WHERE Variable_name IN ('Com_
commit','Com_rollback')" 2>/dev/null| awk 'NR>1 {sum += $2} END {print sum}'
;;
qps)
# 获取主从延迟
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -e "SHOW GLOBAL STATUS WHERE Variable_name IN ('Com_
select','Com_insert','Com_update','Com_delete')" 2>/dev/null| awk 'NR>1 {sum += $2} END {print sum}'
;;
Threads_connected|Threads_running)
# 获取 show global status 状态值
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -N -e "show global status like '$1';" 2>/dev/null| a
wk '{print $2}'
;;
Seconds_Behind_Master)
# 获取主从延迟
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -N -e "show slave status\G" 2>/dev/null |grep Second
s_Behind_Master|awk '{print $2}'
;;
max_connections)
# 获取 show global status 状态值
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -N -e "show variables like '$1';" 2>/dev/null | awk
'{print $2}'
;;
*)
echo "unsupported"
exit 1
;;
esac
注意这里mysql命令需要写上绝对路径,zabbix server是使用zabbix账号执行的 不写绝对路径的话 可能找不到mysql这个命令
若数据库是自动提交事务的话,计算TPS采用下面的计算方式可能比较准确
tps)
# 获取 show global status 状态值
/home/mysql57/bin/mysql -u"${MYSQL_USER}" -p"${MYSQL_PASS}" -S ${MYSQL_SOCK} -e "SHOW GLOBAL STATUS WHERE Variable_name IN ('Com_
insert','Com_update','Com_delete')" 2>/dev/null| awk 'NR>1 {sum += $2} END {print sum}'
;;
3.修改脚本权限
在被监控机器上操作
chmod +x /etc/zabbix/scripts/mysql_status.sh
chown zabbix:zabbix /etc/zabbix/scripts/mysql_status.sh
# 防止其他用户读取密码
chmod 700 /etc/zabbix/scripts/mysql_status.sh
4.添加配置项
vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
输入如下内容:
UserParameter=mysql.status[*],/etc/zabbix/scripts/mysql_status.sh $1
5.在被监控的mysql机器上测试脚本
#测试存活
/etc/zabbix/scripts/mysql_status.sh ping
#测试当前连接数
/etc/zabbix/scripts/mysql_status.sh Threads_connected
#测试qps
/etc/zabbix/scripts/mysql_status.sh qps
#测试tps
/etc/zabbix/scripts/mysql_status.sh tps
6.重启zabbix agent
systemctl stop zabbix-agent
systemctl start zabbix-agent
systemctl status zabbix-agent
7.在被监控端测试看是否可以获取到数据
# 测试mysql存活
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[ping]"
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[ping]"
# 获取连接数
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[Threads_connected]"
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[Threads_running]"
# tps/qps
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[tps]"
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[qps]"
#最大链接数 max_connections
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t "mysql.status[max_connections]"
8.在zabbix服务端尝试获取数据
手工获取具体的值
docker exec -it zabbix-server zabbix_get -s 192.168.1.13 -k mysql.status[Threads_connected]
docker exec -it zabbix-server zabbix_get -s 192.168.1.13 -k mysql.status[max_connections]
9.界面上创建模版


定义宏变量
{$MYSQL.CONN.MAX.WARN} ##已经链接的链接数,对应 Threads_connected
{$MYSQL.CONN.RUNNING.WARN} ##当前正在运行的链接数,对应 Threads_running
{$MYSQL.PINGFLAG} ##存活状态 对应 ping
{$MYSQL.SLAVE.LAG.WARN} ##从库延迟 对应 Seconds_Behind_Master
{$MYSQL.QPS.WARN} ##QPS
{$MYSQL.TPS.WARN} ##TPS
{$MYSQL.CONN.UTILIZATION.WARN} 链接利用率
10.模版里配置监控项目
mysql-服务存活状态 mysql.status[ping]
mysql-已链接线程数 mysql.status[Threads_connected]
mysql-活跃线程数 mysql.status[Threads_running]
mysql-QPS mysql.status[qps] + 预处理[每秒更改]
mysql-TPS mysql.status[tps] + 预处理[每秒更改]
mysql-从库延迟(秒) mysql.status[Seconds_Behind_Master]
mysql-最大链接数 mysql.status[max_connections]

连接利用率是计算出来的,配置如下

公式为:
100 * last(/mysql57/mysql.status[Threads_connected]) / last(/mysql57/mysql.status[max_connections])
QPS 预处理[每秒更改]
TPS 预处理[每秒更改]

11.添加模版触发器

12.主机加入模版

13.计算指标需要单独处理
监控项的值是通过计算出来的 需要做下特殊处理

修改完成后为

浙公网安备 33010602011771号