本文档风哥主要介绍TiDB监控体系与组件,包括TiDB监控体系的概念、TiDB监控组件介绍、TiDB监控架构、TiDB监控系统规划、Prometheus配置与部署、Grafana配置与面板、TiDB Dashboard使用等内容,风哥教程参考TiDB官方文档监控告警相关内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 TiDB监控体系的概念
TiDB监控体系是一个完整的监控解决方案,用于监控TiDB集群的运行状态、性能指标和异常情况。TiDB监控体系基于Prometheus和Grafana构建,提供了丰富的监控指标和可视化面板,帮助运维人员实时了解集群的运行状态。学习交流加群风哥微信: itpux-com
- 基于Prometheus和Grafana
- 提供丰富的监控指标
- 实时可视化面板
- 支持告警配置
- 集成TiDB Dashboard
1.2 TiDB监控组件介绍
TiDB监控体系主要由以下组件组成:
- Prometheus:时序数据库,用于存储监控指标数据
- Grafana:可视化工具,用于展示监控指标
- AlertManager:告警管理组件,用于处理和发送告警
- TiDB Dashboard:TiDB自带的管理控制台,集成了监控、诊断等功能
- Node Exporter:收集主机指标
- Blackbox Exporter:用于监控网络连通性
1.3 TiDB监控架构
TiDB监控架构采用分层设计,主要包括数据采集、存储、展示和告警四个层次:
1. 数据采集层:
– TiDB、TiKV、PD等组件的内置exporter
– Node Exporter收集主机指标
– Blackbox Exporter监控网络连通性
2. 数据存储层:
– Prometheus时序数据库
– 长期存储(可选)
3. 数据展示层:
– Grafana可视化面板
– TiDB Dashboard
4. 告警处理层:
– AlertManager
– 告警渠道配置(邮件、短信、微信等)
风哥提示:
Part02-生产环境规划与建议
2.1 TiDB监控系统规划
TiDB监控系统规划要点:
– 小型集群(3-5节点):单Prometheus实例
– 中型集群(6-10节点):单Prometheus实例,增加存储
– 大型集群(10+节点):Prometheus高可用部署
# 监控系统位置规划
– 独立部署:监控系统与TiDB集群分离
– 资源隔离:确保监控系统不影响集群性能
– 网络带宽:确保监控数据传输流畅
# 监控数据保留
– 短期数据:7-14天
– 长期数据:使用远程存储方案
2.2 TiDB监控资源配置
TiDB监控系统资源配置建议:
– CPU:2-4核
– 内存:8-16GB
– 磁盘:100-500GB(根据保留时间调整)
# Grafana资源配置
– CPU:1-2核
– 内存:2-4GB
– 磁盘:50-100GB
# Node Exporter资源配置
– CPU:0.1-0.5核
– 内存:100-500MB
2.3 TiDB监控告警策略
TiDB监控告警策略建议:
- 告警级别:紧急、严重、警告、信息
- 告警渠道:邮件、短信、微信、企业微信、Slack等
- 告警频率:避免告警风暴,设置合理的告警间隔
- 告警抑制:设置合理的告警抑制规则
- 告警分组:按组件、按主机分组
Part03-生产环境项目实施方案
3.1 Prometheus配置与部署
3.1.1 Prometheus安装
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ cd prometheus-2.45.0.linux-amd64
# 启动Prometheus
$ ./prometheus –config.file=prometheus.yml
# 查看Prometheus状态
$ curl http://localhost:9090/metrics
# 输出示例
# HELP prometheus_build_info A metric with a constant ‘1’ value labeled by version, revision, branch, and goversion from which Prometheus was built.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch=”HEAD”,goversion=”go1.20.5″,revision=”e9761e6″,version=”2.45.0″} 1
# HELP prometheus_tsdb_head_samples_appended_total Total number of samples appended to the head.
# TYPE prometheus_tsdb_head_samples_appended_total counter
prometheus_tsdb_head_samples_appended_total 12345
3.1.2 Prometheus配置文件
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
– static_configs:
– targets:
– localhost:9093
rule_files:
– “alerts/*.yml”
scrape_configs:
# TiDB组件监控学习交流加群风哥QQ113257174
– job_name: ‘tidb’
static_configs:
– targets: [‘192.168.1.10:10080’, ‘192.168.1.11:10080’]
– job_name: ‘tikv’
static_configs:
– targets: [‘192.168.1.20:20180’, ‘192.168.1.21:20180’, ‘192.168.1.22:20180’]
– job_name: ‘pd’
static_configs:
– targets: [‘192.168.1.30:2379’, ‘192.168.1.31:2379’, ‘192.168.1.32:2379’]
– job_name: ‘tiflash’
static_configs:
– targets: [‘192.168.1.40:20292’, ‘192.168.1.41:20292’]
# 主机监控
– job_name: ‘node’
static_configs:
– targets: [‘192.168.1.10:9100’, ‘192.168.1.11:9100’, ‘192.168.1.20:9100’, ‘192.168.1.21:9100’, ‘192.168.1.22:9100’, ‘192.168.1.30:9100’, ‘192.168.1.31:9100’, ‘192.168.1.32:9100’, ‘192.168.1.40:9100’, ‘192.168.1.41:9100’]
3.2 Grafana配置与面板
3.2.1 Grafana安装
$ wget https://dl.grafana.com/oss/release/grafana-10.0.3.linux-amd64.tar.gz
# 解压
$ tar -xzf grafana-10.0.3.linux-amd64.tar.gz
$ cd grafana-10.0.3
# 启动Grafana
$ ./bin/grafana-server
# 查看Grafana状态
$ curl http://localhost:3000
# 输出示例
…
3.2.2 Grafana数据源配置
# 2. 点击左侧菜单”Configuration” -> “Data sources”
# 3. 点击”Add data source”
# 4. 选择”Prometheus”
# 5. 配置Prometheus URL:http://localhost:9090
# 6. 点击”Save & Test”
# 配置成功输出
Data source is working
3.2.3 导入TiDB监控面板
# 2. 输入面板ID:7666(TiDB Overview)
# 3. 选择数据源为Prometheus
# 4. 点击”Import”
# 导入其他面板
– TiKV:7667
– PD:7668
– TiFlash:10525
– Node Exporter:1860
3.3 TiDB Dashboard使用
TiDB Dashboard是TiDB自带的管理控制台,集成了监控、诊断等功能。
http://192.168.1.10:2379/dashboard
# 登录TiDB Dashboard
– 用户名:root
– 密码:(默认为空,生产环境建议设置密码)
# TiDB Dashboard功能
1. 集群概览:查看集群整体状态
2. 监控面板:查看详细的监控指标
3. 拓扑图:查看集群拓扑结构
4. SQL分析:分析慢SQL
5. 日志搜索:搜索集群日志
6. 集群管理:执行集群操作
7. 诊断报告:生成诊断报告
Part04-生产案例与实战讲解
4.1 TiDB监控系统搭建实战
以下是在生产环境中搭建TiDB监控系统的完整步骤:
$ hostnamectl set-hostname monitor.fgedu.net.cn
$ ip addr add 192.168.1.50/24 dev eth0
$ systemctl restart network
# 步骤2:安装Prometheus
$ cd /tidb/app
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ mv prometheus-2.45.0.linux-amd64 prometheus
# 步骤3:安装AlertManager
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
$ tar -xzf alertmanager-0.25.0.linux-amd64.tar.gz
$ mv alertmanager-0.25.0.linux-amd64 alertmanager
# 步骤4:安装Grafana
$ wget https://dl.grafana.com/oss/release/grafana-10.0.3.linux-amd64.tar.gz
$ tar -xzf grafana-10.0.3.linux-amd64.tar.gz
$ mv grafana-10.0.3 grafana
# 步骤5:安装Node Exporter
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
$ tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz
$ mv node_exporter-1.6.0.linux-amd64/node_exporter /tidb/app/bin/
# 步骤6:配置系统服务
$ cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
ExecStart=/tidb/app/prometheus/prometheus --config.file=/tidb/app/prometheus/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
$ cat > /etc/systemd/system/alertmanager.service << EOF
[Unit]
Description=AlertManager
After=network.target
[Service]
Type=simple
ExecStart=/tidb/app/alertmanager/alertmanager --config.file=/tidb/app/alertmanager/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
$ cat > /etc/systemd/system/grafana-server.service << EOF
[Unit]
Description=Grafana Server
After=network.target
[Service]
Type=simple
ExecStart=/tidb/app/grafana/bin/grafana-server --homepath=/tidb/app/grafana
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
$ cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/tidb/app/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 步骤7:启动服务
$ systemctl daemon-reload
$ systemctl enable prometheus alertmanager grafana-server node_exporter
$ systemctl start prometheus alertmanager grafana-server node_exporter
# 步骤8:验证服务状态
$ systemctl status prometheus alertmanager grafana-server node_exporter
# 输出示例
● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-09 10:00:00 CST; 5min ago
Main PID: 12345 (prometheus)
Tasks: 10
Memory: 256.0M
CPU: 10%
CGroup: /system.slice/prometheus.service
└─12345 /tidb/app/prometheus/prometheus --config.file=/tidb/app/prometheus/prometheus.yml
● alertmanager.service - AlertManager
Loaded: loaded (/etc/systemd/system/alertmanager.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-09 10:00:00 CST; 5min ago
Main PID: 12346 (alertmanager)
Tasks: 5
Memory: 64.0M
CPU: 2%
CGroup: /system.slice/alertmanager.service
└─12346 /tidb/app/alertmanager/alertmanager --config.file=/tidb/app/alertmanager/alertmanager.yml
● grafana-server.service - Grafana Server
Loaded: loaded (/etc/systemd/system/grafana-server.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-09 10:00:00 CST; 5min ago
Main PID: 12347 (grafana-server)
Tasks: 15
Memory: 128.0M
CPU: 5%
CGroup: /system.slice/grafana-server.service
└─12347 /tidb/app/grafana/bin/grafana-server --homepath=/tidb/app/grafana
● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-09 10:00:00 CST; 5min ago
Main PID: 12348 (node_exporter)
Tasks: 3
Memory: 16.0M
CPU: 1%
CGroup: /system.slice/node_exporter.service
└─12348 /tidb/app/bin/node_exporter
4.2 TiDB监控系统使用案例
以下是TiDB监控系统的使用案例:
4.2.1 查看集群概览
http://192.168.1.50:3000
# 查看TiDB Overview面板
– 集群状态:健康
– QPS:1000
– 延迟:1ms
– 错误率:0%
# 查看TiKV面板
– 存储使用:500GB/1TB
– 读写延迟:0.5ms/1ms
– 并发请求:1000
# 查看PD面板
– 集群状态:健康
– 调度:正常
– 存储容量:1TB
4.2.2 使用TiDB Dashboard
http://192.168.1.10:2379/dashboard
# 查看集群拓扑
– TiDB节点:2个
– TiKV节点:3个
– PD节点:3个
– TiFlash节点:2个
# 分析慢SQL
1. 点击”SQL分析” -> “慢查询历史”
2. 查看慢SQL列表
3. 分析执行计划
4. 优化SQL语句
# 生成诊断报告
1. 点击”诊断报告” -> “生成报告”
2. 等待报告生成
3. 查看报告内容
4. 按照建议进行优化
4.3 TiDB监控告警配置实战
以下是TiDB监控告警配置的实战步骤:
$ cat > /tidb/app/alertmanager/alertmanager.yml << EOF global: resolve_timeout: 5m smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@fgedu.net.cn' 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' routes: - match: severity: critical receiver: 'email' receivers: - name: 'email' email_configs: - to: 'admin@fgedu.net.cn' send_resolved: true EOF # 步骤2:配置TiDB告警规则 $ mkdir -p /tidb/app/prometheus/alerts $ cat > /tidb/app/prometheus/alerts/tidb.yml << EOF groups: - name: tidb rules: - alert: TiDBDown expr: up{job="tidb"} == 0 for: 5m labels: severity: critical annotations: summary: "TiDB down" description: "TiDB instance {{ labels.instance }} is down" - alert: TiDBHighQPS expr: sum(rate(tidb_server_qps[5m])) by (instance) > 10000
for: 5m
labels:
severity: warning
annotations:
summary: “TiDB high QPS”
description: “TiDB instance {{ labels.instance }} has high QPS: {{ value }}”
– alert: TiDBHighErrorRate
expr: sum(rate(tidb_server_errors_total[5m])) by (instance) / sum(rate(tidb_server_qps[5m])) by (instance) > 0.01
for: 5m
labels:
severity: warning
annotations:
summary: “TiDB high error rate”
description: “TiDB instance {{ labels.instance }} has high error rate: {{ value }}”
EOF
# 步骤3:重新加载Prometheus配置
$ curl -X POST http://localhost:9090/-/reload
# 步骤4:测试告警
$ curl -X POST http://localhost:9093/api/v1/alerts -d ‘[{
“labels”: {
“alertname”: “TestAlert”,
“severity”: “critical”,
“instance”: “test.fgedu.net.cn”
},
“annotations”: {
“summary”: “Test alert”,
“description”: “This is a test alert”
}
}]’
# 步骤5:查看告警状态
$ curl http://localhost:9093/api/v1/alerts
# 输出示例
{
“status”: “success”,
“data”: {
“alerts”: [
{
“status”: “firing”,
“labels”: {
“alertname”: “TestAlert”,
“instance”: “test.fgedu.net.cn”,
“severity”: “critical”
},
“annotations”: {
“description”: “This is a test alert”,
“summary”: “Test alert”
},
“startsAt”: “2026-04-09T02:00:00Z”,
“endsAt”: null,
“generatorURL”: “”
}
]
}
}
Part05-风哥经验总结与分享
5.1 TiDB监控系统最佳实践
TiDB监控系统最佳实践:
- 独立部署:监控系统应独立部署,避免影响TiDB集群性能
- 资源充足:确保监控系统有足够的CPU、内存和磁盘资源
- 高可用:对于重要的生产环境,建议部署高可用的Prometheus
- 合理配置:根据集群规模和业务需求,合理配置监控参数
- 定期维护:定期清理监控数据,确保监控系统的稳定性
- 告警优化:根据实际情况调整告警阈值,避免告警风暴
- 备份配置:备份监控系统的配置文件,以便快速恢复
5.2 TiDB监控常见问题处理
## 1. Prometheus内存使用过高
– 原因:监控指标过多,保留时间过长
– 处理:
– 调整scrape_interval,增加采集间隔
– 调整storage.tsdb.retention.time,减少数据保留时间
– 增加Prometheus内存配置
## 2. Grafana面板加载缓慢
– 原因:面板指标过多,查询复杂
– 处理:
– 优化面板查询,减少指标数量
– 增加Grafana内存配置
– 使用变量和模板,减少重复查询
## 3. 告警不触发
– 原因:告警规则配置错误,Prometheus无法采集到指标
– 处理:
– 检查告警规则配置
– 检查Prometheus采集配置
– 使用Prometheus表达式浏览器测试告警规则
## 4. 告警风暴
– 原因:告警阈值设置过低,集群故障导致大量告警
– 处理:
– 调整告警阈值
– 配置告警抑制规则
– 按组件分组告警
## 5. 监控数据丢失
– 原因:Prometheus磁盘空间不足,网络中断
– 处理:
– 监控Prometheus磁盘使用情况
– 配置适当的磁盘空间
– 确保网络连接稳定
5.3 TiDB监控性能优化建议
TiDB监控系统性能优化建议:
- 合理设置采集间隔:根据指标重要性,设置不同的采集间隔
- 使用标签筛选:合理使用标签,减少查询范围
- 优化查询语句:使用聚合函数,减少数据传输量
- 定期清理数据:设置合理的数据保留时间,定期清理过期数据
- 使用远程存储:对于长期数据,使用远程存储方案
- 监控系统自身:监控监控系统的运行状态
- 使用缓存:对于频繁查询的指标,使用缓存
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
