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配置
TiKV310.0.1.1:20812 10.0.1.1:20811 10.0.1.1:20810实际生成环境会将TiKV部署在多台服务器上,端口默认20810。本测试环境TiKV部署在一台服务器上为避免端口和目录冲突指定了多个端口
TiDB110.0.1.1:10080默认端口 全局目录配置
PD110.0.1.1:2379默认端口 全局目录配置
TiFlash110.0.1.1:8234 10.0.1.1:20292默认端口 全局目录配置
配置采集器

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

1、TiDB 指标采集

复制配置文件:

  cd /usr/local/datakit/conf.d/prom/cp prom.conf.sample tidb_prom.conf

调整配置文件:

# {"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 指标采集

复制配置文件:

 cd /usr/local/datakit/conf.d/prom/cp prom.conf.sample tidb_pd_prom.conf

调整配置文件:

# {"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指标采集

复制配置文件:

 cd /usr/local/datakit/conf.d/prom/cp prom.conf.sample tidb_tikv_prom.conf

调整配置文件:

# {"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 指标采集

复制配置文件:

  cd /usr/local/datakit/conf.d/prom/cp prom.conf.sample tidb_tiflash_prom.conf

调整配置文件:

# {"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 ,否则整个指标都无法进行采集。
  • [inputs.prom.tags] :设置 tag,应用于当前 metrics 的所有指标
重启 DataKit

重启 DataKit。

关键指标

TiDB 指标
MetricDescription
executor_statement_total各类型SQL语句执行次数
server_handle_query_duration_secondsSQL查询处理耗时分布(P99/P95等)
session_transaction_duration_seconds事务执行耗时分布
tikvclient_txn_cmd_duration_secondsTiKV事务命令处理耗时(Get/Prewrite等)
server_connections当前活跃数据库连接数
server_query_total每秒查询量(QPS)
server_execute_error_totalSQL执行错误数
ddl_worker_operationsDDL操作执行状态
auto_id_qps自增ID分配速率
memory_usageTiDB内存使用量(包括查询内存)
TiKV 指标
MetricDescription
raftstore_region_countLeader Region数量
raftstore_region_count总Region数量
storage_async_request_duration_seconds存储引擎请求耗时(读/写)
grpc_msg_duration_secondsgRPC消息处理耗时(KvGet/KvScan等)
cop_scan_keysCoprocessor扫描的Key数量
scheduler_context_total调度器处理的请求上下文数量
engine_size_bytesRocksDB各层数据量大小
raft_propose_wait_duration_secondsRaft提案等待耗时
snapshot_keys快照处理的Key数量
server_report_failure_msg_totalTiKV节点异常报告次数
PD 指标
MetricDescription
tso_rolePD节点角色(Leader/Follower)
cluster_status集群总存储容量
cluster_status当前已用存储容量
regions_statusRegion状态统计(miss/extra/offline等)
hotspot_status热点Region分布(读写热点)
scheduler_region_heartbeatRegion心跳上报速率
client_request_handle_requests_duration_secondsPD处理客户端请求耗时(分类型统计)
grpc_server_handling_secondsPD gRPC请求处理耗时
schedule_operator_total调度器生成的Operator数量
region_heartbeat_latency_secondsRegion心跳延迟

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “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 作为一款高性能的分布式数据库,通过观测云平台进行统一采集和监控其关键指标,对于维护系统性能和稳定性至关重要。监控指标如缓存命中率、内存使用情况和延迟等,为我们提供了洞察数据库行为和性能的窗口。这些指标的实时追踪不仅帮助我们优化缓存策略,提高效率,还能识别性能瓶颈,预防和快速响应故障,确保系统的高可用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用FreeRTOS解决单片机串口异步打印

单片机串口异步打印 文章目录 单片机串口异步打印前言设计思路准备队列创建完整代码 总结 前言 🌊在单片机开发中串口的异步打印异步打印允许单片机在执行其他任务的同时进行打印操作,无需等待打印完成后再继续执行后续代码,避免了在多处调用…

代码颜色模式python

1. CMYK(印刷场景) 例子:某出版社设计书籍封面时,使用 Adobe Illustrator 绘制图案。 红色封面的 CMYK 值可能为:C0, M100, Y100, K0(通过洋红和黄色油墨混合呈现红色)。印刷前需将设计文件转…

HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(二、元服务与应用APP签名打包步骤详解)

在HarmonyOS应用开发过程中,发布应用到应用市场是一个重要的环节。没经历过的童鞋,首次对HarmonyOS的应用签名打包上架可能感觉繁琐。需要各种秘钥证书生成和申请,混在一起分不清。其实搞清楚后也就那会事,各个文件都有它存在的作…

【BotSharp框架示例 ——实现聊天机器人,并通过 DeepSeek V3实现 function calling】

BotSharp框架示例 ——实现聊天机器人,并通过 DeepSeek V3实现 function calling 一、一点点感悟二、创建项目1、创建项目2、添加引用3、MyWeatherPlugin项目代码编写4、WeatherApiDefaultService项目代码编写5、WebAPI MyWeatherAPI 的项目代码编写6、data文件夹中…

百度CarLife实现手机车机无缝互联

百度CarLife是百度推出的智能车联网解决方案,通过手机与车机互联技术,为用户提供安全便捷的车载互联网服务体验。 CarLife 实现手机与车机屏幕的无缝互联,让应用内容同步至车载系统,减少驾驶过程中操作手机的频率,提升…

基于STM32的虚线绘制函数改造

改造前: uint16_t DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { // GUI_DrawLine( x1, y1, x2, y2); // return 1;int16_t deltaX, deltaY;int16_t error, stepErrorLT, stepErrorGE;int16_t stepX, stepY;int16_t steep;int16_t…

Java高频面试之并发编程-10

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:ThreadLocalMap 怎么解决 Hash 冲突的? ThreadLocalMap 是 ThreadLocal 的核心实现,它采用 开放…

AI应用实战:Excel表的操作工具

有个小需求是这样的,需要在一份数据表里,将1000多个客户的月报数据分别单独截图存档,有客户需要的时候就要发给客户,截图下来的也是以客户为命名,这样查找时也比较容易匹配上。 在没有写工具之前,以往财务…

使用 DoH 查询域名 —— 以 core.tantanapp.com 为例的实战分析

前言 在现代 iOS 应用中,为了确保 DNS 查询的隐私和完整性,我们可以使用 DoH(DNS over HTTPS) 来查询域名信息。 本文将以 https://cloudflare-dns.com/dns-query?namecore.tantanapp.com&typeA 为例,通过 Postm…

Python----卷积神经网络(卷积为什么能识别图像)

一、卷积的概念 卷积是一种数学运算,通常用于信号处理和图像分析。在卷积神经网络中,卷积操作用于提取输入数据(如图像)中的特征。通过将输入数据与卷积核(滤波器)进行卷积运算,CNN能够识别图像…

linux FTP服务器搭建

FTP服务器搭建 系统环境:ubuntu 搭建方式:win系统下通过ssh连接ubuntu,搭建FTP服务 一、ssh连接 ssh -p 端口 用户名IP ssh -p 22 ubuntu192.168.1.109 密码:ubuntu123456 二、安装配置FTP服务器 1、安装 sudo apt install v…

语音合成之十韵律之美:TTS如何模拟语音的节奏和语调

韵律之美:TTS如何模拟语音的节奏和语调 1. 引言:韵律在语音合成中的重要性1.1 追求自然的TTS:超越可懂度1.2 定义韵律:语音的音乐1.3 韵律为何重要:传递意义、情感与自然度 2. TTS韵律建模的基础技术2.1 利用文本&…

基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献

Title 题目 Guided ultrasound acquisition for nonrigid image registration usingreinforcement learning 基于强化学习的用于非刚性图像配准的引导式超声采集 01 文献速递介绍 超声成像通常用于引导手术和其他医疗程序,在这些过程中,临床医生会持…

数据库中DDL、DML、DCL的区别是什么?

数据库中DDL、DML、DCL的区别是什么? 在数据库的使用过程中,SQL(结构化查询语言)常常被用来执行不同的操作,主要分为三类:DDL(数据定义语言)、DML(数据操纵语言&#xf…

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成 一、背景介绍 每天有2000万条聊天消息,一年下来几千万亿海量数据。为应对这种规模的数据存储和处理需求,本文将从以下几…

Vim 中替换字符或文本

在 Vim 中替换字符或文本可以使用 替换命令(substitute),其基本语法为: :[range]s/old/new/[flags]1. 基本替换 命令说明:s/foo/bar/替换当前行的第一个 foo 为 bar:s/foo/bar/g替换当前行的 所有 foo 为 bar:%s/foo/bar/g替换 …

当传统美术馆遇上数字革命:观众体验将迎来哪些颠覆性变革?

当数字科技与艺术创作深度交织,美术馆与艺术机构正经历前所未有的颠覆性浪潮。这是否宣告传统展览空间已正式跨入数字媒介主导的新纪元?投影映射与虚拟现实技术不断突破物理限制,画布与雕塑的边界在光影与代码中逐渐消融。这场革命不仅重构了…

内容/社区APP增长:用Deeplink让用户分享的内容“一键直达”

对于内容平台和互动社区APP而言,优质内容的自发传播是用户增长和活跃度提升的核心驱动力之一。用户发现一篇深度好文、一个精彩视频或是一个引人入胜的讨论帖,自然而然地想要分享给好友。然而,这个看似简单的分享动作,却往往在触达…

Uniapp:vite.config.js全局配置

目录 一、基本概述二、配置自动引入插件一、基本概述 vite.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 vite 的编译选项 二、配置自动引入插件 在项目命令行终端中执行如下代码 npm install unplugin-auto-import…

JavaScript 与 Java 学习笔记

一、JavaScript 简介 1. 定义 浏览器脚本语言:主要用于实现网页交互功能(鼠标点击、键盘输入响应等) 服务器端扩展:通过 Node.js 运行时环境可进行后端开发 2. 核心特点 动态性:可实时修改 DOM 结构(增…