TiDB 可观测性最佳实践

TiDB 介绍

TiDB,由 PingCAP 公司自主研发的开源分布式关系型数据库,是一款创新的 HTAP 数据库产品,它融合了在线事务处理(OLTP)和在线分析处理(OLAP)的能力,支持水平扩容和缩容,确保金融级的高可用性。TiDB 的实时 HTAP 特性使其能够同时高效处理高速事务和复杂分析查询,同时,它还是一个云原生的分布式数据库,兼容 MySQL 协议和生态,为用户提供一站式的 OLTP、OLAP 和 HTAP 解决方案,非常适合对高可用性、强一致性有较高要求以及需要处理大规模数据的应用场景。

对 TiDB 进行可观测和监控是确保数据库健康、稳定运行的关键,它允许实时跟踪性能指标,及时发现并解决潜在问题,从而优化性能和资源使用。这种监控还有助于预防故障、提升可靠性、保障数据安全、支持合规性要求、增强用户体验,并为业务决策提供洞察。此外,它支持有效的容量规划、成本控制和自动化运维,使得数据库管理更加高效和经济。简而言之,可观测和监控是维护TiDB高性能、高可用性和数据一致性的基础,对于满足业务需求和保障系统稳定性至关重要。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

数据采集

前置条件

已经安装好 TiDB,安装方式可以参考:TiDB 数据库快速上手指南

以下采集流程,均按照 TiDB 在单机上模拟部署生产环境集群方式进行采集。TiDB 各组件(共 4 个组件)均已暴露 metrics,协议为 http。

实例 个数 IP 配置
TiKV 3 10.0.1.1:20812 10.0.1.1:20811 10.0.1.1:20810 实际生成环境会将TiKV部署在多台服务器上,端口默认20810。本测试环境TiKV部署在一台服务器上为避免端口和目录冲突指定了多个端口
TiDB 1 10.0.1.1:10080 默认端口 全局目录配置
PD 1 10.0.1.1:2379 默认端口 全局目录配置
TiFlash 1 10.0.1.1:8234 10.0.1.1:20292 默认端口 全局目录配置

配置采集器

进入 DataKit 安装目录下的 conf.d/db 目录,复制 TiDB.conf.sample 。示例如下:

1、TiDB 指标采集

复制配置文件:

bash 复制代码
  cd /usr/local/datakit/conf.d/prom/
  cp prom.conf.sample tidb_prom.conf

调整配置文件:

ini 复制代码
# {"version": "1.61.0", "desc": "do NOT edit this line"}

[[inputs.prom]]
  ## Exporter URLs.
  urls = ["http://10.0.1.1:10080/metrics"]
...
  ## Collector alias.
  source = "tidb_prom"
...
  [inputs.prom.tags]
    # some_tag = "some_value"
     tidb_cluster="test"

2、PD 指标采集

复制配置文件:

bash 复制代码
 cd /usr/local/datakit/conf.d/prom/
 cp prom.conf.sample tidb_pd_prom.conf

调整配置文件:

ini 复制代码
# {"version": "1.61.0", "desc": "do NOT edit this line"}

[[inputs.prom]]
  ## Exporter URLs.
  urls = ["http://10.0.1.1:2379/metrics"]
  ## Collector alias.
  source = "tidb_pd_prom"
...
  ## Customize tags.
  [inputs.prom.tags]
     tidb_cluster="test"
...

3、TiKV指标采集

复制配置文件:

bash 复制代码
 cd /usr/local/datakit/conf.d/prom/
 cp prom.conf.sample tidb_tikv_prom.conf

调整配置文件:

ini 复制代码
# {"version": "1.61.0", "desc": "do NOT edit this line"}

[[inputs.prom]]
  ## Exporter URLs.
  urls = ["http://10.0.1.1:20810/metrics", "http://10.0.1.1:20811/metrics", "http://10.0.1.1:20812/metrics"]
...
  ## Collector alias.
  source = "tidb_tikv_prom"
...
  ## Customize tags.
  [inputs.prom.tags]
     tidb_cluster="test"
...

4、TiFlash 指标采集

复制配置文件:

bash 复制代码
  cd /usr/local/datakit/conf.d/prom/
  cp prom.conf.sample tidb_tiflash_prom.conf

调整配置文件:

ini 复制代码
# {"version": "1.61.0", "desc": "do NOT edit this line"}

[[inputs.prom]]
  ## Exporter URLs.
  urls = ["http://10.0.1.1:8234/metrics", "http://10.0.1.1:20292/metrics"]
  ## Collector alias.
  source = "tidb_tiflash_prom"
...
  ## Customize tags.
  [inputs.prom.tags]
     tidb_cluster="test"
...

上述配置文件中 urls、source、tidb_cluster 需要修改,其他部分按需修改。

主要参数说明:

  • urls:prometheus 指标地址,这里填写对应组件暴露出来的指标 url
  • source:采集器别名,建议做区分
  • interval:采集间隔
  • measurement_prefix: 指标集前缀,方便管理分类
  • tls_open:TLS 配置
  • metric_types:指标类型,不填,代表采集所有指标,建议按需填写,涉及到时间线
  • tags_ignore: 忽略不需要的 tag
  • inputs.prom.tags_rename.mapping\]:tag 重命名,如果遇到 tag 与 filed 重名,则需要重命名 tag ,否则整个指标都无法进行采集。

重启 DataKit

重启 DataKit

关键指标

TiDB 指标

Metric Description
executor_statement_total 各类型SQL语句执行次数
server_handle_query_duration_seconds SQL查询处理耗时分布(P99/P95等)
session_transaction_duration_seconds 事务执行耗时分布
tikvclient_txn_cmd_duration_seconds TiKV事务命令处理耗时(Get/Prewrite等)
server_connections 当前活跃数据库连接数
server_query_total 每秒查询量(QPS)
server_execute_error_total SQL执行错误数
ddl_worker_operations DDL操作执行状态
auto_id_qps 自增ID分配速率
memory_usage TiDB内存使用量(包括查询内存)

TiKV 指标

Metric Description
raftstore_region_count Leader Region数量
raftstore_region_count 总Region数量
storage_async_request_duration_seconds 存储引擎请求耗时(读/写)
grpc_msg_duration_seconds gRPC消息处理耗时(KvGet/KvScan等)
cop_scan_keys Coprocessor扫描的Key数量
scheduler_context_total 调度器处理的请求上下文数量
engine_size_bytes RocksDB各层数据量大小
raft_propose_wait_duration_seconds Raft提案等待耗时
snapshot_keys 快照处理的Key数量
server_report_failure_msg_total TiKV节点异常报告次数

PD 指标

Metric Description
tso_role PD节点角色(Leader/Follower)
cluster_status 集群总存储容量
cluster_status 当前已用存储容量
regions_status Region状态统计(miss/extra/offline等)
hotspot_status 热点Region分布(读写热点)
scheduler_region_heartbeat Region心跳上报速率
client_request_handle_requests_duration_seconds PD处理客户端请求耗时(分类型统计)
grpc_server_handling_seconds PD gRPC请求处理耗时
schedule_operator_total 调度器生成的Operator数量
region_heartbeat_latency_seconds Region心跳延迟

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 "TiDB", 选择 "TiDB监控视图",点击 "确定" 即可添加视图。

监控器(告警)

TiDB 重载最新的 Schema 信息失败次数过多

TiDB 重载最新的 Schema 信息失败的总次数。如果在 10 分钟之内重载失败次数超过 10 次,则报警。

TiDB 的 P99 请求的响应时间过长

TiDB 处理请求的延时。99% 的请求的响应时间都应在 1 秒之内,否则报警。

TiDB 访问 TiKV 错误重试的次数过多

TiDB 访问 TiKV 发生错误时发起重试的次数。如果在 10 分钟之内重试次数多于 10 次,则报警。

TiDB 中等待执行的 DDL 任务的数量过多

如果 TiDB 中等待执行的 DDL 任务的数量大于 5,则报警。

PD_etcd_write_disk_latenc

fsync 操作延迟大于 1s,代表 etcd 写盘慢,这很容易引起 PD leader 超时或者 TSO 无法及时存盘等问题,从而导致整个集群停止服务。

TiDB 集群空间占用超过 80%

集群空间占用超过 80%。

TiKV_raft_log_lag

这个值偏大,表明 Follower 已经远远落后于 Leader,Raft 没法正常同步了。可能的原因是 Follower 所在的 TiKV 卡住或者挂掉了。

总结

TiDB 作为一款高性能的分布式数据库,通过观测云平台进行统一采集和监控其关键指标,对于维护系统性能和稳定性至关重要。监控指标如缓存命中率、内存使用情况和延迟等,为我们提供了洞察数据库行为和性能的窗口。这些指标的实时追踪不仅帮助我们优化缓存策略,提高效率,还能识别性能瓶颈,预防和快速响应故障,确保系统的高可用性。

相关推荐
Sirius Wu9 小时前
TiDB 深度解析与 K8S 实战指南
容器·kubernetes·tidb
PingCAP2 天前
PingCAP“一号员工”唐刘:回顾我与 TiDB 的十年成长之旅
数据库·tidb
转转技术团队3 天前
告别人工搬运!TiDB/MySQL双库同步工具如何为业务提效100%?
mysql·tidb·测试
MiniFlyZt8 天前
分布式数据库TiDB:架构、核心特性与生产实践(分库分表)
java·数据库·分布式·spring cloud·微服务·tidb
PingCAP8 天前
从单一到多活,麦当劳中国的数据库架构迁移实战
数据库·tidb
XMYX-015 天前
TiDB 部署指南(单机模式)& CentOS 7 安装 MariaDB 教程
centos·tidb·mariadb
PingCAP18 天前
从 DB-Engines 排名攀升看 TiDB 全球突破之路
数据库·人工智能·tidb
PingCAP19 天前
Dify 基于 TiDB 的数据架构重构实践
数据库·人工智能·tidb
李迟21 天前
TiDB 数据库8.1版本编译及部署
数据库·tidb