1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG132-TiDB监控与告警最佳实践

fgedu.net.cn

目录

一、基础概念

1.1 监控定义

监控是指对TiDB集群的运行状态、性能指标和健康状况进行实时监测和记录的过程。通过监控,运维人员可以及时发现集群的异常情况,确保系统的稳定运行。

1.2 告警定义

告警是指当监控指标达到预设阈值时,系统自动发送通知的机制。告警可以帮助运维人员及时发现和处理潜在问题,避免系统故障。

1.3 监控组件

  • Prometheus:开源的监控系统,用于收集和存储监控指标
  • Grafana:开源的数据可视化工具,用于展示监控数据
  • AlertManager:告警管理工具,用于处理和发送告警
  • TiDB Dashboard:TiDB官方的可视化管理工具
  • Node Exporter:收集服务器级别的监控指标
  • Blackbox Exporter:用于监控网络服务的可访问性

二、规划建议

2.1 监控架构规划

  • 监控层次:服务器级别、集群级别、应用级别
  • 监控指标:系统指标、TiDB指标、TiKV指标、PD指标
  • 存储规划:监控数据的存储和保留期
  • 高可用:监控系统的高可用设计

2.2 告警策略规划

  • 告警级别:紧急、严重、警告、信息
  • 告警阈值:根据业务需求设置合理的阈值
  • 告警渠道:邮件、短信、电话、即时通讯工具
  • 告警抑制:避免告警风暴
  • 告警恢复:当问题解决后自动恢复告警

2.3 监控指标规划

  • 系统指标:CPU、内存、磁盘、网络
  • TiDB指标:QPS、响应时间、连接数、慢查询
  • TiKV指标:操作延迟、磁盘I/O、内存使用
  • PD指标:集群状态、调度情况
  • 应用指标:业务QPS、响应时间、错误率

三、实施方案

3.1 监控系统部署

使用TiUP部署监控组件

# 生成监控拓扑文件
tiup cluster template > monitor-topology.yaml

# 编辑拓扑文件
# 添加监控节点配置

# 部署监控集群
tiup cluster deploy tidb-monitor v7.5.0 monitor-topology.yaml --user root -p

# 启动监控集群
tiup cluster start tidb-monitor

# 查看监控集群状态
tiup cluster status tidb-monitor
Cluster type: monitor
Cluster name: tidb-monitor
Cluster version: v7.5.0

ID                Role          Host          Ports       Status  Data Dir                     Deploy Dir
--                ----          ----          -----       ------  --------                     ----------
192.168.1.18:9090  prometheus    192.168.1.18  9090        Up      /tidb/data/prometheus        /tidb/deploy/prometheus-9090
192.168.1.18:3000  grafana       192.168.1.18  3000        Up      -                            /tidb/deploy/grafana-3000
192.168.1.18:9093  alertmanager  192.168.1.18  9093        Up      /tidb/data/alertmanager      /tidb/deploy/alertmanager-9093
192.168.1.18:9100  node_exporter 192.168.1.18  9100        Up      -                            /tidb/deploy/node_exporter-9100

3.2 监控配置

Prometheus配置

风哥提示:

# 查看Prometheus配置
cat /tidb/deploy/prometheus-9090/conf/prometheus.yml

# 配置示例
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'tidb'
    static_configs:
      - targets: ['192.168.1.13:10080', '192.168.1.14:10080']

  - job_name: 'tikv'
    static_configs:
      - targets: ['192.168.1.15:20180', '192.168.1.16:20180', '192.168.1.17:20180']

  - job_name: 'pd'
    static_configs:
      - targets: ['192.168.1.10:2379', '192.168.1.11:2379', '192.168.1.12:2379']

  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100', '192.168.1.12:9100', '192.168.1.13:9100', '192.168.1.14:9100', '192.168.1.15:9100', '192.168.1.16:9100', '192.168.1.17:9100', '192.168.1.18:9100']

# 重启Prometheus
tiup cluster restart tidb-monitor --node 192.168.1.18:9090

告警规则配置

# 查看告警规则
cat /tidb/deploy/prometheus-9090/conf/rules/tidb.rules.yml

# 配置示例
groups:
- name: tidb-alerts
  rules:
  - alert: TiDBServerDown
    expr: up{job="tidb"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "TiDB Server Down"
      description: "TiDB server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: TiKVServerDown
    expr: up{job="tikv"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "TiKV Server Down"
      description: "TiKV server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: PDServerDown
    expr: up{job="pd"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "PD Server Down"
      description: "PD server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: HighCPUUsage
    expr: avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU Usage"
      description: "CPU usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: HighMemoryUsage
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High Memory Usage"
      description: "Memory usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: HighDiskUsage
    expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High Disk Usage"
      description: "Disk usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: SlowQueries
    expr: rate(tidb_server_slow_query_total[5m]) > 10
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Slow Queries"学习交流加群风哥QQ113257174
      description: "TiDB server {{ $labels.instance }} has more than 10 slow queries per minute."

  - alert: HighQPS
    expr: sum(rate(tidb_server_qps[5m])) by (instance) > 10000
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High QPS"
      description: "TiDB server {{ $labels.instance }} has QPS above 10000 for more than 5 minutes."

# 重启Prometheus
tiup cluster restart tidb-monitor --node 192.168.1.18:9090

AlertManager配置

# 查看AlertManager配置
cat /tidb/deploy/alertmanager-9093/conf/alertmanager.yml

# 配置示例
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alertmanager@example.com'
  smtp_auth_username: 'alertmanager'
  smtp_auth_password: 'password'
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
  wechat_api_corp_id: 'corpid'
  wechat_api_corp_secret: 'corpsecret'

route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'wechat'
  routes:
  - match:
      severity: critical
    receiver: 'email'
    continue: true

receivers:
- name: 'email'
  email_configs:
  - to: 'admin@example.com'
    send_resolved: true

- name: 'wechat'
  wechat_configs:
  - corp_id: 'corpid'
    to_party: '1'
    agent_id: '1000001'
    api_secret: 'api_secret'
    message: '{{ template "wechat.default.message" . }}'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'cluster', 'service']

# 重启AlertManager
tiup cluster restart tidb-monitor --node 192.168.1.18:9093

3.3 Grafana配置

访问Grafana

# 访问Grafana
# 地址:http://192.168.1.18:3000
# 默认用户名:admin,密码:admin

# 导入TiDB面板
# 面板 > 导入 > 输入面板ID:12048(TiDB Overview)
# 面板 > 导入 > 输入面板ID:12049(TiKV Overview)
# 面板 > 导入 > 输入面板ID:12050(PD Overview)
# 面板 > 导入 > 输入面板ID:12051(Node Exporter Full)

# 配置数据源
# 配置 > 数据源 > 添加数据源 > Prometheus
# URL:http://192.168.1.18:9090
# 保存并测试

创建自定义面板

# 创建自定义面板
# 面板 > 新建面板 > 添加查询
# 查询示例:sum(rate(tidb_server_qps[5m])) by (instance)
# 图形类型:Graph
# 保存面板到仪表板

四、实战案例

4.1 监控系统部署与配置

场景:企业需要部署TiDB监控系统,实现对集群的实时监控和告警。

步骤1:部署监控集群

# 生成监控拓扑文件
tiup cluster template > monitor-topology.yaml

# 编辑拓扑文件
# 添加监控节点配置

# 部署监控集群
tiup cluster deploy tidb-monitor v7.5.0 monitor-topology.yaml --user root -p

# 启动监控集群
tiup cluster start tidb-monitor

# 查看监控集群状态
tiup cluster status tidb-monitor
Cluster type: monitor
Cluster name: tidb-monitor
Cluster version: v7.5.0

ID                Role          Host          Ports       Status  Data Dir                     Deploy Dir
--                ----          ----          -----       ------  --------                     ----------
192.168.1.18:9090  prometheus    192.168.1.18  9090        Up      /tidb/data/prometheus        /tidb/deploy/prometheus-9090
192.168.1.18:3000  grafana       192.168.1.18  3000        Up      -                            /tidb/deploy/grafana-3000
192.168.1.18:9093  alertmanager  192.168.1.18  9093        Up      /tidb/data/alertmanager      /tidb/deploy/alertmanager-9093
192.168.1.18:9100  node_exporter 192.168.1.18  9100        Up      -                            /tidb/deploy/node_exporter-9100

步骤2:配置告警规则

# 编辑告警规则文件
cat > /tidb/deploy/prometheus-9090/conf/rules/tidb.rules.yml << EOF
groups:
- name: tidb-alerts
  rules:
  - alert: TiDBServerDown
    expr: up{job="tidb"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "TiDB Server Down"
      description: "TiDB server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: TiKVServerDown
    expr: up{job="tikv"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "TiKV Server Down"
      description: "TiKV server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: PDServerDown
    expr: up{job="pd"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "PD Server Down"
      description: "PD server {{ $labels.instance }} has been down for more than 5 minutes."

  - alert: HighCPUUsage
    expr: avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU Usage"
      description: "CPU usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: HighMemoryUsage
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High Memory Usage"
      description: "Memory usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: HighDiskUsage
    expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High Disk Usage"
      description: "Disk usage on {{ $labels.instance }} is above 80% for more than 5 minutes."

  - alert: SlowQueries
    expr: rate(tidb_server_slow_query_total[5m]) > 10
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Slow Queries"
      description: "TiDB server {{ $labels.instance }} has more than 10 slow queries per minute."

  - alert: HighQPS
    expr: sum(rate(tidb_server_qps[5m])) by (instance) > 10000
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High QPS"
      description: "TiDB server {{ $labels.instance }} has QPS above 10000 for more than 5 minutes."
EOF

# 重启Prometheus
tiup cluster restart tidb-monitor --node 192.168.1.18:9090

步骤3:配置AlertManager

# 编辑AlertManager配置文件
cat > /tidb/deploy/alertmanager-9093/conf/alertmanager.yml << EOF
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alertmanager@example.com'
  smtp_auth_username: 'alertmanager'
  smtp_auth_password: 'password'

route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: 'admin@example.com'
    send_resolved: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'cluster', 'service']
EOF

# 重启AlertManager
tiup cluster restart tidb-monitor --node 192.168.1.18:9093

步骤4:验证监控系统

# 访问Grafana
# 地址:http://192.168.1.18:3000

# 导入TiDB面板
# 面板 > 导入 > 输入面板ID:12048(TiDB Overview)
# 面板 > 导入 > 输入面板ID:12049(TiKV Overview)
# 面板 > 导入 > 输入面板ID:12050(PD Overview)

# 查看监控数据
# 验证各组件的监控指标是否正常显示

# 测试告警
# 模拟TiDB节点故障,验证告警是否触发

五、经验总结

5.1 监控与告警最佳实践

  • 全面监控:监控服务器、集群和应用的各个层面
  • 合理设置告警阈值:根据业务需求设置合理的告警阈值
  • 多渠道告警:配置多种告警渠道,确保及时收到通知
  • 告警抑制:避免告警风暴,提高告警的有效性
  • 定期检查:定期检查监控系统的运行状态
  • 监控数据存储:合理规划监控数据的存储和保留期
  • 可视化面板:创建直观的可视化面板,便于快速了解系统状态

5.2 监控指标优先级

  • 关键指标:集群状态、节点健康状况、服务可用性
  • 性能指标:QPS、响应时间、资源利用率
  • 业务指标:业务QPS、错误率、用户体验
  • 预测指标:资源使用趋势、容量规划

5.3 常见问题与解决方案

问题 原因 解决方案
监控数据丢失 Prometheus存储不足、配置错误 增加存储容量,检查配置
告警风暴 告警阈值设置不当、级联故障 调整告警阈值,配置告警抑制
告警延迟 网络延迟、AlertManager配置不当 检查网络连接,优化AlertManager配置
监控系统性能差 Prometheus配置不当、资源不足 优化Prometheus配置,增加资源
监控指标不完整 配置错误、采集器故障 检查配置,重启采集器

5.4 监控与告警检查清单

检查项 配置要求 状态
监控系统部署 成功部署Prometheus、Grafana、AlertManager □
数据源配置 正确配置Prometheus数据源 □
告警规则 配置合理的告警规则 □
告警渠道 配置多种告警渠道 □
监控面板 导入并配置TiDB相关面板 □
监控数据存储 合理规划监控数据存储 □
告警测试 定期测试告警机制 □
监控系统高可用 配置监控系统的高可用 □

更多视频教程www.fgedu.net.cn

© 2024 TiDB数据库培训文档

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息