请求用于MySQL高连接数/连接突增的Zabbix触发器配置方案
Zabbix MySQL连接数告警触发器配置方案
当然有很多开发者和运维同学都配置过这类触发器,我自己也在生产环境里部署过类似规则,分享两个实用的配置思路给你:
一、固定阈值告警(连接数持续过高)
这个场景适合检测连接数长期超出合理范围的情况,核心是监控MySQL的Threads_connected指标:
确认已采集对应监控项:
先确保你的Zabbix已经配置了MySQL监控,Threads_connected这个指标在官方的Template DB MySQL模板里是默认自带的,直接关联模板就能采集。触发器表达式:
last(/MySQL/threads_connected)>{$MYSQL.MAX_CONNECTED}这里的
{$MYSQL.MAX_CONNECTED}是自定义宏,建议设置为MySQL配置中max_connections的70%-80%(比如max_connections是1000,就把宏设为800),既能提前预警,又不会因临时波动误报。优化细节:
- 给触发器加恢复条件:
last(/MySQL/threads_connected)<{$MYSQL.MAX_CONNECTED} and time()>lastchange()+300,意思是连接数降到阈值以下且持续5分钟后再恢复告警,避免状态频繁切换。
- 给触发器加恢复条件:
二、连接突增告警(短时间内连接数暴涨)
这个场景用来检测异常的连接激增(比如爬虫攻击、应用bug导致的连接泄漏),需要用到Zabbix的变化率函数:
两种可选的触发器表达式:
方案一:检测5分钟内连接数的增量总和
delta(/MySQL/threads_connected,300)>{$MYSQL.CONN_SPIKE_THRESHOLD}delta函数会计算过去300秒(5分钟)内Threads_connected的增量总和,比如你可以把阈值宏设为200,代表5分钟内新增200个连接就触发告警。方案二:检测当前连接数与10分钟前的差值
change(/MySQL/threads_connected,600)>{$MYSQL.CONN_SPIKE_THRESHOLD}change函数是用当前值减去600秒(10分钟)前的值,适合检测短时间内的大幅跳变。
优化细节:
- 结合
Threads_running指标做二次判断:比如添加and last(/MySQL/threads_running)>{$MYSQL.MIN_RUNNING_THREADS},过滤掉连接数高但实际运行线程少的闲置连接场景。 - 设置依赖关系:依赖MySQL服务存活的触发器,避免MySQL宕机时触发误报。
- 结合
额外小贴士
- 把这些触发器加到
Template DB MySQL模板里,所有关联的MySQL主机都能直接继承配置,不用重复设置。 - 告警信息里可以加入变量,比如
MySQL连接数突增:当前{ITEM.LASTVALUE},5分钟内新增{DELTA(300)}个连接,方便快速定位问题。
内容的提问来源于stack exchange,提问作者cyber534




