Skip to content

PostgreSQL 告警阈值规范

核心概念

告警阈值规范是数据库监控体系的重要组成部分,用于定义各种监控指标的告警触发条件。合理的告警阈值设置有助于:

  • 及时发现和处理数据库异常情况
  • 避免误告警和漏告警
  • 确保数据库服务的高可用性和稳定性
  • 帮助DBA快速定位问题

告警等级定义

1. 告警等级分类

等级名称定义处理要求
P0紧急数据库服务不可用,直接影响业务立即处理(10分钟内响应)
P1严重数据库性能严重下降,业务受到明显影响优先处理(30分钟内响应)
P2警告数据库出现异常,但暂时不影响业务尽快处理(2小时内响应)
P3注意数据库存在潜在问题,需要关注定期检查(24小时内响应)

2. 告警等级判断标准

  • P0:数据库无法连接、主库宕机、复制中断且数据丢失
  • P1:CPU使用率持续90%以上、内存不足导致OOM风险、连接数达到上限
  • P2:锁等待时间过长、复制延迟持续增加、磁盘空间不足30%
  • P3:索引使用率低、慢查询增加、配置参数不合理

关键指标告警阈值

1. 资源使用率指标

CPU使用率

监控对象告警等级阈值持续时间建议处理方式
数据库主机CPUP1≥ 90%5分钟检查SQL执行计划,优化慢查询
数据库主机CPUP2≥ 80%10分钟关注高CPU进程,分析资源消耗
数据库进程CPUP1≥ 90%5分钟检查当前执行的SQL,终止长时间运行的查询

内存使用率

监控对象告警等级阈值持续时间建议处理方式
数据库主机内存P1≥ 95%5分钟检查内存泄漏,调整shared_buffers等参数
数据库主机内存P2≥ 85%10分钟优化内存使用,考虑升级硬件
数据库进程内存P1≥ 90%5分钟检查连接数,调整work_mem等参数

磁盘空间

监控对象告警等级阈值持续时间建议处理方式
数据目录磁盘P0≤ 5%立即紧急清理空间,扩展磁盘容量
数据目录磁盘P1≤ 10%30分钟清理日志文件,归档历史数据
数据目录磁盘P2≤ 20%1小时规划磁盘扩展,优化存储使用
WAL目录磁盘P0≤ 10%立即检查归档是否正常,清理旧WAL文件

2. 数据库连接指标

监控对象告警等级阈值持续时间建议处理方式
连接数P1≥ 90% of max_connections5分钟检查连接泄漏,调整max_connections参数
连接数P2≥ 80% of max_connections10分钟优化连接池配置,关闭空闲连接
空闲连接数P3≥ 60% of total_connections30分钟配置idle_in_transaction_session_timeout参数

3. 锁和阻塞指标

监控对象告警等级阈值持续时间建议处理方式
锁等待时间P1≥ 60秒立即检查阻塞进程,终止长时间运行的查询
锁等待时间P2≥ 30秒5分钟分析锁竞争原因,优化SQL或索引
阻塞进程数P1≥ 5个立即检查阻塞链,优先处理根因进程
死锁数量P2≥ 1个立即分析死锁日志,优化事务设计

4. 复制相关指标

监控对象告警等级阈值持续时间建议处理方式
复制延迟(字节)P1≥ 1GB5分钟检查网络状况,调整wal_sender_timeout参数
复制延迟(字节)P2≥ 500MB10分钟优化网络带宽,检查备库性能
复制延迟(时间)P1≥ 30分钟5分钟检查备库是否宕机,重启wal_receiver进程
复制状态P0中断立即检查主备连接,重建复制关系

5. SQL性能指标

监控对象告警等级阈值持续时间建议处理方式
慢查询数量P2≥ 10个/分钟10分钟分析慢查询日志,优化SQL执行计划
全表扫描数量P3≥ 50个/分钟30分钟检查缺失索引,添加合适的索引
临时文件数量P2≥ 100个/小时1小时调整work_mem参数,优化SQL查询

6. 其他重要指标

监控对象告警等级阈值持续时间建议处理方式
检查点频率P2≥ 30次/小时1小时调整checkpoint_timeout和checkpoint_completion_target参数
WAL生成速率P2≥ 100MB/分钟10分钟检查是否有大量写入操作,优化事务批量处理
索引使用率P3≤ 50%1天分析索引使用情况,删除无用索引

告警配置最佳实践

1. 配置原则

  • 分级告警:根据问题严重程度设置不同的告警等级
  • 避免误告警:合理设置持续时间阈值,避免瞬时峰值触发告警
  • 告警聚合:对同一类型的告警进行聚合,避免告警风暴
  • 告警抑制:在维护窗口内抑制非紧急告警
  • 告警通知:配置多种通知方式(邮件、短信、钉钉、企业微信等)

2. 配置建议

  • 对于核心业务数据库,建议启用所有P0和P1级别的告警
  • 对于非核心业务数据库,可以只启用P0级别的告警
  • 根据实际业务需求调整告警阈值,避免过多误告警
  • 定期回顾告警历史,优化告警配置

3. 告警响应流程

  1. 告警接收:DBA收到告警通知
  2. 告警确认:验证告警是否真实有效
  3. 问题定位:根据告警信息定位问题原因
  4. 问题处理:采取相应的处理措施
  5. 恢复验证:验证问题是否已解决
  6. 告警关闭:关闭告警,并记录处理过程
  7. 根因分析:分析问题根本原因,制定预防措施

常见问题(FAQ)

Q1:如何设置合适的告警阈值?

A1:告警阈值设置应考虑以下因素:

  1. 数据库硬件配置和性能基线
  2. 业务高峰期和低峰期的差异
  3. 历史性能数据和告警记录
  4. 业务对数据库的依赖程度
  5. DBA团队的响应能力

建议先设置较为宽松的阈值,然后根据实际运行情况逐步调整优化。

Q2:如何避免告警风暴?

A2:可以采取以下措施避免告警风暴:

  1. 设置合理的持续时间阈值,避免瞬时峰值触发告警
  2. 对同一指标的告警进行聚合,设置告警间隔
  3. 在维护窗口内抑制非紧急告警
  4. 对相关联的告警进行分组,只发送最高级别的告警
  5. 配置告警静默规则,避免重复发送相同告警

Q3:告警阈值需要定期调整吗?

A3:是的,告警阈值需要定期调整。原因包括:

  1. 业务量变化导致性能基线改变
  2. 数据库配置参数调整
  3. 硬件升级或变更
  4. 历史告警数据分析结果

建议每季度回顾一次告警配置,根据实际情况进行调整。

Q4:如何验证告警配置的有效性?

A4:可以通过以下方式验证告警配置:

  1. 模拟故障场景,检查是否能正常触发告警
  2. 分析历史告警数据,统计误告警率和漏告警率
  3. 定期进行告警演练,测试DBA团队的响应能力
  4. 收集DBA团队的反馈,优化告警配置

Q5:不同环境的告警阈值应该一致吗?

A5:不同环境的告警阈值可以有所不同:

  • 生产环境:阈值设置较为严格,告警等级划分详细
  • 测试环境:阈值可以适当宽松,重点关注P0和P1级别的告警
  • 开发环境:可以只启用基本的告警,避免过多干扰开发工作

建议根据环境的重要性和使用场景设置不同的告警阈值。