目录

一、准备工作【请确保您已完成mysql8.0和zabbix的基础配置】

二、环境准备​​

​​1. 在 MySQL 中创建监控专用用户​

2. 在 Zabbix Agent 上创建安全认证文件​​

​​三、企业级监控脚本与 Key​​

1. 核心状态监控脚本 (mysql_status.sh)​

(1)脚本配置

(2)验证测试

(3)再次验证【成功!】

四、zabbix界面配置

1、配置监控项

2、配置触发器

3、配置公网邮箱报警【本文以qq邮箱为例】

(1)获取授权码

(2)zabbix服务端配置

(3)zabbix界面邮箱报警的相关配置

  1)配置媒介

2)配置admin用户的报警媒介

3)配置动作

4)邮箱报警验证

5)登录邮箱,查看报警邮件

4、企业微信报警

(1)准备工作

(2)创建脚本并测试发送消息

(3)zabbix界面配置

1)创建报警媒介

2)配置用户

3)配置触发器动作【与邮箱报警类似】

4)微信报警验证

5、钉钉报警

(1)准备工作

(2)创建Python脚本

(3)zabbix界面配置【步骤和微信报警类似,不再复述】

五、从配置监控项到三大报警【邮箱报警、微信报警、钉钉报警】总流程已经完毕!下面将展示其他重要的Mysql的重要key,仅展示部分相关脚本代码和最终报警截图,不再展示步骤!!!

=================================================

六、其他key及其相应脚本

1、 InnoDB 性能监控脚本

(1)脚本配置

(2)脚本命令测试【此步骤可省略】

(3)配置/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

(4)zabbix界面配置部分截图

2、 连接与锁监控脚本

  (1)配置脚本

(2)配置/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

未完待续.......


一、准备工作【请确保您已完成mysql8.0和zabbix的基础配置】

[root@zabbix-agent1 ~]# mysql --version
mysql  Ver 8.4.6 for Linux on x86_64 (MySQL Community Server - GPL)
[root@zabbix-agent1 ~]# lsof -i :10050
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 2469 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2469 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2470 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2470 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2471 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2471 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2472 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2472 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2473 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2473 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2474 zabbix    4u  IPv4  43201      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 2474 zabbix    5u  IPv6  43202      0t0  TCP *:zabbix-agent (LISTEN)

二、环境准备​​

​​1. 在 MySQL 中创建监控专用用户​

mysql> CREATE USER 'zbx_monitor'@'192.168.159.200' IDENTIFIED BY 'INK@xiaorebb521';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT, SHOW VIEW ON *.* TO 'zbx_monitor'@'192.168.159.200';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT ON performance_schema.* TO 'zbx_monitor'@'192.168.159.200';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

2. 在 Zabbix Agent 上创建安全认证文件​​

[root@zabbix-agent1 ~]# mkdir -p /var/lib/zabbix
[root@zabbix-agent1 ~]# cd /var/lib/zabbix
[root@zabbix-agent1 zabbix]# vim .my.cnf

[client]
user=zbx_monitor
password=INK@xiaorebb521   #你的数据库密码
socket=/var/lib/mysql/mysql.sock

#如果不知道socket的路径可以用下面的命令查找
[root@zabbix-agent1 zabbix]# grep 'socket' /etc/my.cnf /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 2>/dev/null
/etc/my.cnf:socket=/var/lib/mysql/mysql.sock

[root@zabbix-agent1 zabbix]# chown zabbix:zabbix /var/lib/zabbix/.my.cnf
[root@zabbix-agent1 zabbix]# chmod 600 /var/lib/zabbix/.my.cnf
[root@zabbix-agent1 zabbix]# ls -l /var/lib/zabbix/.my.cnf
-rw------- 1 zabbix zabbix 110  9月  4 14:28 /var/lib/zabbix/.my.cnf

​​三、企业级监控脚本与 Key​​

创建脚本目录并存放所有脚本:

[root@zabbix-agent1 zabbix]# mkdir -p /etc/zabbix/zabbix_agentd.d/scripts/
[root@zabbix-agent1 zabbix]# chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/scripts/
[root@zabbix-agent1 zabbix]# ls -ld /etc/zabbix/zabbix_agentd.d/scripts/
drwxr-xr-x 2 zabbix zabbix 6  9月  4 14:34 /etc/zabbix/zabbix_agentd.d/scripts/
[root@zabbix-agent1 zabbix]# cd /etc/zabbix/zabbix_agentd.d/scripts/

1. 核心状态监控脚本 (mysql_status.sh)​

(1)脚本配置

[root@zabbix-agent1 scripts]# vim mysql_status.sh
#!/usr/bin/env bash

METRIC="$1"
CONF_FILE="/var/lib/zabbix/.my.cnf"

case $METRIC in
    "ping")
        # 检测MySQL存活状态
        if mysqladmin --defaults-file="$CONF_FILE" ping >/dev/null 2>&1; then
            echo 1  # 存活
        else
            echo 0  # 未运行
        fi
        ;;
    "uptime")
        # 获取运行时间
        UPTIME=$(mysqladmin --defaults-file="$CONF_FILE" status 2>/dev/null | 
                 cut -f2 -d":" | cut -f1 -d"T" | tr -d ' ')
        if [ -n "$UPTIME" ] && [[ "$UPTIME" =~ ^[0-9]+$ ]]; then
            echo "$UPTIME"  # 有效数值
        else
            echo 0  # 失败
        fi
        ;;
    *)
        # 获取其他状态变量
        RESULT=$(mysql --defaults-file="$CONF_FILE" -sN -e \
                 "SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = '$METRIC';" 2>/dev/null)
        # 第一个查询失败时尝试备选方案
        if [ -z "$RESULT" ]; then
            RESULT=$(mysql --defaults-file="$CONF_FILE" -sN -e \
                     "SHOW GLOBAL STATUS LIKE '$METRIC';" 2>/dev/null | awk '{print $2}')
        fi
        # 判断结果是否为有效数字
        if [ -n "$RESULT" ] && [[ "$RESULT" =~ ^[0-9]+$ ]]; then
            echo "$RESULT"  # 有效数值
        else
            echo 0  # 失败
        fi
        ;;
esac

#为了方便大家理解,脚本中的命令执行结果如下:
[root@zabbix-agent1 scripts]# mysqladmin --defaults-file=/var/lib/zabbix/.my.cnf ping 
mysqld is alive
[root@zabbix-agent1 scripts]# mysqladmin --defaults-file=/var/lib/zabbix/.my.cnf ping | grep -c alive
1

[root@zabbix-agent1 scripts]# mysqladmin --defaults-file=/var/lib/zabbix/.my.cnf status
Uptime: 398  Threads: 2  Questions: 10  Slow queries: 0  Opens: 136  Flush tables: 3  Open tables: 55  Queries per second avg: 0.025
[root@zabbix-agent1 scripts]#  mysqladmin --defaults-file=/var/lib/zabbix/.my.cnf status | cut -f2 -d":" | cut -f1 -d"T" | tr -d ' '
420


#赋予脚本权限
[root@zabbix-agent1 scripts]# chmod +x mysql_status.sh
[root@zabbix-agent1 scripts]# ls -l 
总用量 4
-rwxr-xr-x 1 root root 761  9月  4 14:36 mysql_status.sh

#注意这里的UserParameter是在/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf不是/etc/zabbix/zabbix_agentd.conf
[root@zabbix-agent1 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh "$1"

#重启zabbix-agent使之生效
[root@zabbix-agent1 ~]# systemctl restart zabbix-agent

(2)验证测试

[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[ping]
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'zbx_monitor'@'localhost' (using password: YES)'
0

【原因是: 登录主机限制与实际不符(博主创建用户时指定了 zabbix-agent-ip即192.168.159.200,但实际从 localhost 登录)。】

调试修改:

mysql> SELECT user, host FROM mysql.user WHERE user = 'zbx_monitor';
+-------------+-----------------+
| user        | host            |
+-------------+-----------------+
| zbx_monitor | 192.168.159.200 |
+-------------+-----------------+
1 row in set (0.00 sec)

mysql> CREATE USER IF NOT EXISTS 'zbx_monitor'@'localhost' IDENTIFIED BY 'INK@xiaorebb521';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT, SHOW VIEW ON *.* TO 'zbx_monitor'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT ON performance_schema.* TO 'zbx_monitor'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

【腾讯元宝】为了确保 MySQL 配置文件(如 /etc/my.cnf)中允许本地 TCP 连接

[root@zabbix-agent1 scripts]# vim /etc/my.cnf
bind-address = 127.0.0.1  # 或 0.0.0.0(允许所有IP)
port = 3306

#重启Mysql使之生效
[root@zabbix-agent1 scripts]# systemctl restart mysqld

(3)再次验证【成功!】

#mysql正常启动

[root@zabbix-agent1 scripts]# mysqladmin --defaults-file=/var/lib/zabbix/.my.cnf ping|grep -c alive
1

[root@zabbix-agent1 scripts]# /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh Threads_connected
1

#服务端通过zabbix_get命令验证
[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[ping]
1

[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[Threads_connected]
1

[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[uptime]
755


#mysql服务关闭
[root@zabbix-agent1 scripts]# systemctl stop mysqld

[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[ping]
0
[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[uptime]
0
[root@zabbix-server ~]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.status[Threads_connected]
0

四、zabbix界面配置

1、配置监控项

2、配置触发器

3、配置公网邮箱报警【本文以qq邮箱为例】

(1)获取授权码

(2)zabbix服务端配置

#zabbix服务端
[root@zabbix-server alertscripts]# yum -y install s-nail
上次元数据过期检查:2:00:39 前,执行于 2025年09月04日 星期四 15时15分44秒。
软件包 s-nail-14.9.22-8.el9.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@zabbix-server alertscripts]# vim /etc/s-nail.rc
#文件最后配置一下内容
set mta=smtps://smtp.qq.com:465
set smtp-auth=login
set from=xxxxxxxxxx@qq.com            #你的qq邮箱
set smtp-auth-user=xxxxxxxxxx@qq.com  #你的qq邮箱
set smtp-auth-password=xxxxxxxxxx     #xxxxxxxxxx是刚刚获得的邮箱授权码
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/


#配置发送邮件的脚本
[root@zabbix-server alertscripts]# pwd
/usr/share/zabbix/alertscripts     #zabbix7.4指定的脚本路径,如果没有创建一个 
[root@zabbix-server alertscripts]# vim mail.sh
#!/bin/sh 
#export.UTF-8
echo "$3" | sed s/'\r'//g | s-nail -s "$2" $1

#赋予执行权限和修改属主、属组
chmod u+x sendmail.sh && chown zabbix.zabbix sendmail.sh 

(3)zabbix界面邮箱报警的相关配置

  1)配置媒介

【模板可以用默认的,也可以自拟,不同的宏可以从官网了解!】

消息模板配置完成添加即可,报警媒介即创建完成!

博主的模板如下:

    名称:Action-Email
    默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
    默认信息:
    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息: {TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{EVENT.ID}
2)配置admin用户的报警媒介

3)配置动作

最后一直点击添加即可!

4)邮箱报警验证

5)登录邮箱,查看报警邮件

4、企业微信报警

(1)准备工作

下载企业微信 ---> 创建自己的企业 ---> 创建企业微信群 ---> 最少添加两个人进公司添加员工进群
---> 在群里添加机器人 ---> 获取机器人的api接口(webhooks-api接口地址)

(2)创建脚本并测试发送消息

[root@zabbix-server alertscripts]# yum install python3-requests -y
上次元数据过期检查:2:37:07 前,执行于 2025年09月04日 星期四 15时15分44秒。
软件包 python3-requests-2.25.1-10.el9.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!

[root@zabbix-server alertscripts]# pwd
/usr/share/zabbix/alertscripts    #必须在该路径下创建脚本,原因前面已提到
[root@zabbix-server alertscripts]# vim wechat.py 

#!/usr/bin/python
import requests
import json
import sys
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=45809a62-48c1-404c-b8af-72dc2dca1d1a"
 #这就是先前的webhook地址
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
    }
    print(requests.post(api_url,json.dumps(json_text),headers=headers).content)

if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)


[root@zabbix-server alertscripts]# chmod +x wechat.py
[root@zabbix-server alertscripts]# chown zabbix.zabbix wechat.py

测试:查看机器人收发消息
[root@zabbix-server alertscripts]# ./wechat.py  "hello"
b'{"errcode":0,"errmsg":"ok"}'

[root@zabbix-server alertscripts]# ./wechat.py  "“漫长岁月后,也许会有那样一个人,独自站在岁月长河上,回首万古,独伴神道”"
b'{"errcode":0,"errmsg":"ok"}'

(3)zabbix界面配置

1)创建报警媒介

2)配置用户

3)配置触发器动作【与邮箱报警类似】

4)微信报警验证

5、钉钉报警

(1)准备工作

创建自己的企业 ---> 创建钉钉群【最少添加两个人进公司添加员工进群】 ---> 在群里添加机器人 ----> 获取机器人的api接囗(webhooks-api接口地址)

(2)创建Python脚本

[root@zabbix-server alertscripts]# pwd
/usr/share/zabbix/alertscripts
[root@zabbix-server alertscripts]# vim dingding.py
[root@zabbix-server alertscripts]# chmod 777 dingding.py && chown zabbix.zabbix dingding.py 
[root@zabbix-server alertscripts]# ll
总用量 16
-rwxr-xr-x 1 root   root    54  9月  4 13:59 apache_start.sh
-rwxrwxrwx 1 zabbix zabbix 749  9月  4 19:31 dingding.py
-rwxr-xr-x 1 zabbix zabbix  71  9月  3 22:43 mail.sh
-rwxr-xr-x 1 zabbix zabbix 529  9月  4 16:20 wechat.py

[root@zabbix-server alertscripts]# ./dingding.py  告警主机  
b'{"errcode":0,"errmsg":"ok"}'
[root@zabbix-server alertscripts]# ./dingding.py  告警主机SOS!!! 
./dingding.py  告警主机SOS./dingding.py  告警主机  ! 
b'{"errcode":0,"errmsg":"ok"}'

【测试成功】

(3)zabbix界面配置【步骤和微信报警类似,不再复述】

报警结果如下:

五、从配置监控项到三大报警【邮箱报警、微信报警、钉钉报警】总流程已经完毕!下面将展示其他重要的Mysql key,仅展示部分相关脚本代码和最终报警截图,不再展示步骤!!!

    ===========================================

六、其他key及其相应脚本

1、 InnoDB 性能监控脚本

(1)脚本配置


[root@zabbix-agent1 scripts]# pwd
/etc/zabbix/zabbix_agentd.d/scripts

[root@zabbix-agent1 scripts]# vim mysql_innodb.sh

#!/bin/bash
# /etc/zabbix/zabbix_agentd.d/scripts/mysql_innodb.sh
# 参数: 监控指标(buffer_pool_hit_rate / buffer_pool_utilization)
METRIC="$1"

# 第一步:先检查 MySQL 服务是否可用(连接测试)
# 用 --connect-timeout 缩短超时时间,避免脚本卡慢;-sN 静默输出(只返回结果)
mysql --defaults-file=/var/lib/zabbix/.my.cnf --connect-timeout=3 -sN -e "SELECT 1" > /dev/null 2>&1
MYSQL_AVAILABLE=$?  # 0=服务可用,非0=服务不可用

# 第二步:根据指标类型计算,服务不可用时统一返回 0
case $METRIC in
    "buffer_pool_hit_rate")
        if [ $MYSQL_AVAILABLE -ne 0 ]; then
            echo 0
            exit 0
        fi
        # 计算命中率:1 - (物理读 / 逻辑读),避免除以0(IFNULL处理)
        HIT_RATE=$(mysql --defaults-file=/var/lib/zabbix/.my.cnf -sN -e "
            SELECT IFNULL(
                1 - (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads') / 
                NULLIF((SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests'), 0), 
                0
            ) * 100;")
        # 保留2位小数(避免输出过长的小数,符合监控美观性)
        printf "%.2f\n" "$HIT_RATE"
        ;;

    "buffer_pool_utilization")
        if [ $MYSQL_AVAILABLE -ne 0 ]; then
            echo 0
            exit 0
        fi
        # 计算使用率:先统一单位为“页数”,再算占比
        UTILIZATION=$(mysql --defaults-file=/var/lib/zabbix/.my.cnf -sN -e "
            SELECT ROUND(
                (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_pages_data') / 
                NULLIF(
                    (SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'innodb_buffer_pool_size') / 
                    (SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'innodb_page_size'), 
                    0
                ) * 100, 
                2  # 保留2位小数,监控更直观
            );")
        echo "$UTILIZATION"
        ;;

    *)
        echo "Unsupported metric: $METRIC"
        exit 1
        ;;
esac

(2)脚本命令测试【此步骤可省略】

#mysql正常运行时:
[root@zabbix-agent1 scripts]# systemctl start mysqld
[root@zabbix-agent1 scripts]# ./mysql_innodb.sh buffer_pool_hit_rate
94.77
[root@zabbix-agent1 scripts]# ./mysql_innodb.sh buffer_pool_utilization
11.73

#mysql失活时:
[root@zabbix-agent1 scripts]# systemctl stop mysqld
[root@zabbix-agent1 scripts]# ./mysql_innodb.sh buffer_pool_hit_rate
0
[root@zabbix-agent1 scripts]# ./mysql_innodb.sh buffer_pool_utilization
0

(3)配置/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf


[root@zabbix-agent1 zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
[root@zabbix-agent1 zabbix_agentd.d]# vim userparameter_mysql.conf
# 基础状态监控
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh "$1"

# InnoDB 性能监控
UserParameter=mysql.innodb[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_innodb.sh "$1"


#重启zabbix-agent
[root@zabbix-agent1 zabbix_agentd.d]# systemctl restart zabbix-agent


#zabbix服务端测试

#mysql人工开启
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.innodb[buffer_pool_hit_rate]
94.84
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.innodb[buffer_pool_utilization]
11.62

#mysql人工关闭
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.innodb[buffer_pool_hit_rate]
0
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.innodb[buffer_pool_utilization]
0

(4)zabbix界面配置部分截图

【理想的表达式应该是 {Template_DB_MySQL:mysql.innodb[buffer_pool_hit_rate].avg(5m)}<95,即最近5分钟的平均值低于95%,触发警告级别的告警,提醒管理员关注。但博主没有找到这个表达式,暂定为一次性测试结果】

2、 连接与锁监控脚本

  (1)配置脚本

[root@zabbix-agent1 scripts]# pwd
/etc/zabbix/zabbix_agentd.d/scripts
[root@zabbix-agent1 scripts]# vim mysql_connections.sh
#!/bin/bash
METRIC="$1"
CONF_FILE="/var/lib/zabbix/.my.cnf"

# 先检测MySQL是否可用(连接测试)
mysql --defaults-file="$CONF_FILE" --connect-timeout=3 -sN -e "SELECT 1" >/dev/null 2>&1
MYSQL_AVAILABLE=$?  # 0=可用,非0=不可用

case $METRIC in
    "max_used_connections")
        # 最大连接使用率:MySQL不可用时返回0
        if [ $MYSQL_AVAILABLE -ne 0 ]; then
            echo 0
        else
            # 计算连接使用率(当前连接数/最大连接数*100)
            mysql --defaults-file="$CONF_FILE" -sN -e "
                SELECT ROUND(
                    (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') / 
                    NULLIF((SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections'), 0) * 100, 
                    2
                );"
        fi
        ;;
    "active_long_running_trx")
        # 长时间活跃事务数:MySQL不可用时返回0
        if [ $MYSQL_AVAILABLE -ne 0 ]; then
            echo 0
        else
            # 统计运行时间>60秒的事务数
            mysql --defaults-file="$CONF_FILE" -sN -e "
                SELECT COUNT(*) FROM performance_schema.events_transactions_current WHERE TIMER_WAIT > 60000000000;"
        fi
        ;;
    *)
        echo "Unsupported metric: $METRIC"
        exit 1
        ;;
esac

(2)配置/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

[root@zabbix-agent1 zabbix_agentd.d]# vim userparameter_mysql.conf 
# 基础状态监控
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh "$1"

# InnoDB 性能监控
UserParameter=mysql.innodb[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_innodb.sh "$1"

# 连接与锁监控
UserParameter=mysql.connections[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_connections.sh "$1"


[root@zabbix-agent1 zabbix_agentd.d]# systemctl restart zabbix-agent

#zabbix服务端测试
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.connections[max_used_connections]
0.66
[root@zabbix-server alertscripts]# zabbix_get -s zabbix-agent1 -p 10050 -k mysql.connections[active_long_running_trx]
0

未完待续.......

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐