找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5643|回复: 0

数据库慢查询日志监控与告警搭建

[复制链接]

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 2026-8-12 20:37:17 | 显示全部楼层 |阅读模式
数据库慢查询日志监控与告警搭建指南

概述

数据库慢查询日志监控与告警系统可以帮助您及时发现并优化执行效率低下的SQL查询,提升数据库性能。以下是搭建该系统的完整方案。

一、慢查询日志配置

1. MySQL 慢查询配置
  1. -- 查看当前慢查询配置
  2. SHOW VARIABLES LIKE 'slow_query%';
  3. SHOW VARIABLES LIKE 'long_query_time';
  4. -- 设置慢查询阈值(秒),例如5秒
  5. SET GLOBAL slow_query_log = 'ON';
  6. SET GLOBAL long_query_time = 5;
  7. -- 可选:记录未使用索引的查询
  8. SET GLOBAL log_queries_not_using_indexes = 'ON';
  9. -- 慢查询日志文件位置(通常在my.cnf中配置)
  10. -- slow_query_log_file = /var/log/mysql/mysql-slow.log
复制代码

2. PostgreSQL 慢查询配置

  1. postgresql.conf
复制代码
中配置:
  1. log_min_duration_statement = 5000  # 5秒,单位毫秒
  2. log_line_prefix = '%t [%p]: '      # 日志前缀格式
  3. log_directory = 'pg_log'           # 日志目录
  4. log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'  # 日志文件名格式
复制代码

二、慢查询日志收集

方案1: 文件收集(适合小规模)

  • 使用
    1. logrotate
    复制代码
    定期轮转日志文件
  • 通过
    1. rsyslog
    复制代码
    1. filebeat
    复制代码
    收集日志文件


方案2: 使用专用工具

  • Percona Toolkit:
    1. pt-query-digest
    复制代码
    分析MySQL慢查询日志
  • pgBadger: PostgreSQL日志分析工具
  • Promtail/Loki: 轻量级日志收集系统


三、监控与告警系统搭建

方案A: ELK Stack (Elasticsearch, Logstash, Kibana)

  • 使用Filebeat收集慢查询日志
  • Logstash处理并索引到Elasticsearch
  • Kibana创建仪表板和告警


方案B: Prometheus + Grafana

  • 使用
    1. mysqld_exporter
    复制代码
    1. postgres_exporter
    复制代码
    暴露慢查询指标
  • Prometheus收集指标
  • Grafana展示和配置告警


方案C: Zabbix/Nagios

  • 编写脚本定期解析慢查询日志
  • 将关键指标(如慢查询数量、最慢查询等)发送给Zabbix
  • 配置触发器和告警动作


四、告警规则示例

通用告警规则

  • 慢查询数量激增: 短时间内慢查询数量超过阈值
  • 特定慢查询重复出现: 相同SQL模式多次出现
  • 极端慢查询: 查询执行时间超过特定阈值(如60秒)
  • 无索引查询: 频繁出现未使用索引的查询


示例Prometheus告警规则
  1. groups:
  2. - name: slow-query-alerts
  3.   rules:
  4.   - alert: HighNumberOfSlowQueries
  5.     expr: rate(mysql_slow_queries[5m]) > 10
  6.     for: 5m
  7.     labels:
  8.       severity: warning
  9.     annotations:
  10.       summary: "High number of slow queries ({{ $value }}/5m)"
  11.   
  12.   - alert: ExtremelySlowQuery
  13.     expr: mysql_longest_query_time > 60
  14.     for: 1m
  15.     labels:
  16.       severity: critical
  17.     annotations:
  18.       summary: "Extremely slow query detected ({{ $value }}s)"
复制代码

五、优化建议

  • 定期分析慢查询日志:
  • 使用
    1. pt-query-digest
    复制代码
    1. pgBadger
    复制代码
    生成报告
  • 识别高频、高耗时的查询模式
  • 建立基线:
  • 记录正常情况下的慢查询数量和模式
  • 便于识别异常
  • 自动化处理:
  • 对重复出现的慢查询自动生成优化建议
  • 严重问题自动创建工单
  • 可视化:
  • 在Grafana或Kibana中创建慢查询趋势图
  • 展示TOP N慢查询列表


六、维护建议

  • 定期清理和归档旧日志
  • 根据业务变化调整慢查询阈值
  • 定期审查告警规则有效性
  • 建立慢查询优化流程,确保问题得到及时处理


通过以上方案,您可以构建一个完整的数据库慢查询监控与告警系统,及时发现并解决数据库性能问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五云论坛 ( 黔ICP备2022001370号-1|贵公网安备52032102000798号 )

GMT+8, 2026-9-12 17:18 , Processed in 0.074341 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表