▌ 技术引导
TiDB监控告警这套体系别再整那些花里胡哨的东西了,直接上干货。你要是不想在故障发现上浪费时间,监控告警配置得像打仗一样精准。我见过太多人只盯着一堆指标,却不明白怎么去触发告警,结果问题来了,连个提示都没有。监控要用Prometheus抓取指标,TiDB本身的监控指标得从配置文件里直接拉出来,别什么都要靠第三方插件。告警规则得写到Alertmanager里,别用那些冷门的工具,CPU load过高、region数量异常、慢查询都得有对应的告警策略。别问怎么写,直接给出配置命令和参数,别整那些虚头巴脑的。
配置Prometheus的时候,别忘记加上--config.file参数,指向TiDB的监控配置。某些情况下,监控端口没开,或者权限不足,告警会直接失效。换成TiDB的系统变量,比如tidb_status_port,或者直接用环境变量覆盖,这是2025年常用的手段。我之前用过一个工具叫Telegraf,它能自动抓取TiDB的监控数据,但别以为它能帮你搞定所有告警逻辑,还得你自己写规则。
警报规则得写到Prometheus的规则文件里,用YAML格式。alert:、expr:、for:这些字段必须齐全。别拿线上环境当测试场,你要是写错了,整个集群都会被误报干扰。我见过有人把慢查询的阈值设得太低,结果一上线就报个不停,根本没法看。CPU load的阈值应该根据服务器的物理核心数来算,比如8核的话,超过3就报警,否则就是虚标。
告警渠道得用Alertmanager的webhook或者email,别用什么IMAP之类的东西。TiDB里有一个配置项叫status-port,这个端口必须被防火墙放行,否则Prometheus根本连不上。另外,TiDB的监控指标里有个叫region_leader_count的,它能帮你判断leader是否分布均匀,如果某个节点leader太多,那绝对是一个潜在风险。
监控告警不是万能的,它得配合日志分析和人工复核才靠谱。别以为开了监控就万事大吉,你得知道哪些告警是真问题,哪些是正常波动。我在2026年处理过一次集群故障,是region数量异常导致的,但当时监控没报,是因为阈值没设置好。这种经验要总结到配置里,不能只靠老经验。
▌ 技术参考
一 TiDB监控告警是运维同学最头疼的事之一,如果你还在用传统方式,那早该被淘汰了。监控体系必须基于Prometheus,它能提供丰富的指标,比如tidb_server_status、tidb_query_slow等,这些指标是TiDB官方维护的。建议不要使用第三方插件,除非你对它的稳定性有绝对信心。监控接口要配置在TiDB的status-port上,这个端口默认是9090,但建议根据实际环境修改。
二 Prometheus配置文件需要包含TiDB的监控地址,比如http://127.0.0.1:9090/metrics。你可以直接在Prometheus的配置文件中添加job_name: "tidb-monitor",然后指定scrape_configs。注意,TiDB的监控端口可能被防火墙拦截,或者未被正确暴露。如果监控数据抓取失败,先检查端口是否开放,再检查TiDB的配置是否启用了监控接口。配置文件中还有一个参数是scrape_interval,建议设置为10s,确保数据及时性。
三 在写告警规则时,要避免误报,条件必须精确。比如判断CPU load,应该用avg_over_time(cpu_usage{job="tidb-monitor"}[5m]) > 3,在线环境的CPU核心数是关键参数。如果用的是8核服务器,3是合理阈值,如果用的是16核,就要调整。另外,TiDB的慢查询指标是query_slow_count,可以结合duration来判断慢查询是否频繁。如果query_slow_count在10分钟内超过50次,那值得报警了。
四 TiDB的监控指标很多,但不是所有都适合告警。比如region_count、leader_count、store_up{job="tidb-monitor"}这些指标很有用,但一定要配合时间窗口和阈值。你可以在Prometheus的规则文件中定义多个alert规则,每个规则对应一个监控维度。例如,定义一个rule叫"RegionCountHigh",条件是region_count > 1000,持续时间20m。不要用简单的阈值,要结合增长率来判断,比如increase(region_count[5m]) > 50,这样能更准确地识别异常。
五 真正的坑在于监控指标的采集方式。有些指标需要通过TiDB的status接口,比如tidb_query_info,但这些接口有时会因为性能问题导致采集失败。我在2024年踩过一次这样的坑,采集tidb_query_info时过于频繁,导致TiDB响应变慢,甚至出现连接超时。解决方法是调整采集频率,比如在scrape_configs里增加scrape_interval为30s,而不是默认的10s。另外,某些指标需要通过MySQL协议采集,比如query_log,这时候得用TiDB的系统变量来调整日志级别,避免信息过载。
六 Alertmanager的配置是告警输出的关键。你可以设置多个接收渠道,比如email、Slack、Webhook,每个渠道对应一个route。配置文件中有一个参数是route的group_interval,建议设置为30m,避免告警过于频繁。如果某个节点出现异常,Alertmanager会把告警聚合到一个组里,这样能减少干扰。别用默认的email配置,要自己写SMTP参数。比如,relays: ["smtp-relay.example.com:587"],然后配置用户名、密码和发件人地址。
七 告警渠道的配置还要注意认证问题。如果你用的是Webhook,得在Prometheus的alertmanager配置文件里写接收URL,并在TiDB的监控配置中指定webhook地址。比如,在Alertmanager的配置中,添加route: - webhook_configs: - url: http://localhost:9093/api/v1/xxxx,这里xxxx是你自己的webhook路径。别忘记配置basic_auth,因为有些系统要求验证。在webhook_configs里添加basic_auth: username: "admin" password: "123456"。
八 一些告警规则需要特别注意时间窗口。比如判断leader是否分布不均,不要用简单的count,而是用avg_over_time(leader_count[5m])来判断是否出现波动。如果某个节点leader数量突然下降,说明可能有压力或者故障。另一个常见问题是监控指标的聚合方式,比如使用sum而不是avg,这样能更及时地发现异常。比如,判断节点是否离线,可以用sum by (instance) (up{job="tidb-monitor"}) == 0,这时候直接触发告警,不需要等待。
九 在实际部署中,我发现某些监控指标需要通过TiDB的配置文件进行调整。比如,想采集query_log,需要修改tidb-config中的log-level参数,从info改成error或者warning,否则数据量太大,影响性能。别问为什么,这是2026年我亲测的配置策略。另外,在TiDB的配置文件里,有一个参数叫monitoring-enabled,必须设置为true,否则监控数据不会被导出。
十 告警规则的写法要避免歧义。比如,判断慢查询是否频繁,应该用query_slow_count > 50,而不是简单的threshold。另外,要结合时间窗口,比如在10分钟内超过50次,才算是异常。可以使用increase(query_slow_count[10m]) > 50这样的表达式。如果你用的是Prometheus的alertmanager,还需要配置group_kinds,比如用by (alertname),这样能避免同一个告警重复触发。
十一 告警配置要测试。别在生产环境直接上线,先用测试环境验证规则是否合理。比如,设置一个低阈值,观察是否会出现误报。如果某个规则在测试环境中频繁触发,那说明你设置的指标太敏感了。你可以用Prometheus的测试工具,比如curl http://localhost:9090/api/v1/query?query=xxx,来验证指标是否正确。如果指标不正确,那整个告警系统都是摆设。
十二 有些指标需要与其他监控系统配合。比如,TiDB的region数量异常,可能和PD的配置有关,这时候要结合PD的监控数据一起分析。如果PD的region数量突然飙升,那可能是个配置问题。监控系统之间要保持数据一致性,避免出现数据滞后或者不准确。比如,在Prometheus中可以添加多个job,分别抓取TiDB和PD的指标,然后在alertmanager里统一处理。
十三 TiDB的监控指标有时候会因为版本差异导致不一致。比如,2024年更新的TiDB版本新增了一些指标,比如tidb_query_latency,但旧版本可能没有。所以配置文件要根据TiDB的版本做调整,不能一成不变。我之前在测试环境中用的是v6.3.0版本,结果在生产环境上配置的指标不全,导致监控失效。解决方案是先确认TiDB版本,再根据对应版本的文档调整监控配置。
十四 在告警触发后,要确保有对应的处理流程。比如,如果CPU load超过3,运维同学应该立即查看系统日志,判断是否是查询压力过大。如果发现是某个慢查询导致的,可以考虑优化SQL或者调整配置。别把所有责任推给监控系统,它只是一个提醒工具。我在2025年处理过一次CPU load异常,发现是某个SQL语句没有加索引,导致全表扫描,这时候就要手动介入。
十五 有些同学喜欢用可视化工具,比如Grafana,但这不是告警的核心。Grafana可以帮助你更好地理解监控数据,但告警还得靠Prometheus和Alertmanager。如果用Grafana做告警,得配置webhook,然后在Grafana的alerting模块里定义规则。不过这种方式不如Prometheus直接,因为Grafana的告警延迟更高。我见过有人用这种方式,结果误报很多,最后还是得回退到Prometheus。
十六 如果你的TiDB集群规模很大,监控指标可能会不够。这时候可以考虑用TiDB的监控系统来补充,比如TiDB Dashboard。Dashboard的监控数据是基于TiDB的status接口,比Prometheus更细粒度。不过Dashboard不支持自动告警,得结合Prometheus一起用。比如,Dashboard用来展示数据,Prometheus用来监控和告警。这种组合在2025年的生产环境中已经很常见了。
十七 在配置告警时,要避免同一个问题触发多个告警。比如,如果一个节点的CPU load过高,可能会同时触发多个规则,导致信息混乱。这时候要合理设置alertname和group_by参数,确保每个问题只有一个告警。比如,在Prometheus规则里,用by (instance)来分组,这样同一个实例的多个告警会合并。这在2026年的实践中非常重要,否则运维效率会大打折扣。
十八 我见过一些人用Prometheus的自动发现功能来抓取TiDB的监控数据,这样不需要手动配置每个节点。但容易出问题,因为TiDB的监控端口可能不是标准的,比如你是用的自定义端口,那么自动发现的配置可能不准确。这时候建议手动配置每个节点的监控地址,避免遗漏。尤其是在监控数据量大的情况下,自动发现容易导致抓取失败。
十九 其他监控工具比如Zabbix、VictoriaMetrics也可以用,但得注意兼容性。VictoriaMetrics比Prometheus轻量,适合监控大量节点,但它的告警系统不如Prometheus灵活。如果你用的是Zabbix,得配置TiDB的监控模板,但很多模板可能没有更新到2025年的版本,这时候得自己写。维系监控系统的一致性非常重要,否则会引发很多不必要的问题。
二十 在2026年,TiDB的监控体系已经相对成熟,但配置不当依然会导致很多问题。比如,监控规则写得太宽泛,或者数据采集频率不合理,都会影响告警效果。所以一定要根据实际情况微调配置参数,比如CPU核数、节点数量、业务负载。监控系统是一个动态调整的过程,不能一劳永逸。
实战干货 | TiDB监控告警(6分钟读完)
TiDB监控告警这套体系别再整那些花里胡哨的东西了,直接上干货。你要是不想在故障发现上浪费时间,监控告警配置得像打仗一样精准。我见过太多人只盯着一堆指标,却不明白怎么去触发告警,结果问题来了,连个提示都没有。监控要用Prometheus抓取指标,TiDB本身的监控指标得从配置文件里直接拉出来,别什么都要靠第三方插件。告警规则得写到Aler
数据库AI5 次阅读
Related
延伸阅读

VS Code代码评审性能优化:7个完全配置指南 | 全栈必备VS Code指南 · 2026-07-11

Codex多文件编辑怎么用:7个方法Codex智能 · 2026-07-10

缓存设计:DynamoDB,建议收藏数据库 · 2026-07-10

保姆级教程 | PostgreSQL优化:性能优化实战数据库 · 2026-07-10

DeepSeek V4源码解析:趋势预判 | 未来五年预判大模型资讯 · 2026-07-10

建议收藏:VS Code Cursor 性能优化 | 老用户总结VS Code指南 · 2026-07-10