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.界面上创建模版

image

image

 

定义宏变量
{$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]

 

image

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

image

 

公式为: 

100 * last(/mysql57/mysql.status[Threads_connected]) / last(/mysql57/mysql.status[max_connections])

 

QPS 预处理[每秒更改]

TPS 预处理[每秒更改]  

image

 

11.添加模版触发器

image

 

12.主机加入模版

 

image

 

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

image

 

 修改完成后为

image

 

 

posted @ 2026-08-13 15:26  slnngk  阅读(2)  评论(0)    收藏  举报