作者: cchouqiang



背景

TiDB是一款真正意义上的分布式数据库,支持混合事务/分析处理(HTAP)工作负载。TiDB数据库监控软件使用的是Prometheus,它是一个开源的监控和警报工具包,Prometheus通过抓取受监控目标上的HTTP端点来收集这些目标的指标。它在本地存储所有抓取的样本,并对这些数据运行规则,以从现有数据中聚合和记录新的时间序列,或生成警报。

当涉及到TiDB和Prometheus时,它们经常一起用于监控和收集有关TiDB集群性能和健康状况的指标。以下是它们通常如何协同工作:

1、指标收集:Prometheus可以配置为抓取TiDB暴露的指标,如服务器状态、查询性能、存储使用情况等。TiDB以Prometheus能够理解的格式导出这些指标。

2、存储和查询:Prometheus将抓取的数据存储在时间序列数据库中,允许随时间高效查询历史数据。

3、告警:Prometheus还支持基于预定义规则的警报。如果某些指标超过指定阈值,它可以提醒操作员或管理员,快速处理出现的问题。

4、可视化:虽然Prometheus本身专注于数据存储和查询,但它经常与Grafana等可视化工具集成。Grafana可以向Prometheus查询数据,并将其显示在仪表板中,从而提供对TiDB性能指标的洞察。



grafana+prometheus常用技巧

TiDB数据库日常运维和故障诊断依赖于监控,本文介绍几种使用prometheus常用的技巧,希望给使用TiDB的用户带来便捷。



技巧一:快速选取特定时间

我们在日常运维中,经常会有这种需求:同时看grafana面板里面的不同监控项,综合几个监控项来排查问题,并且这些监控项不在同一个文件夹下面。如下图所示:

TiDB监控prometheus常用技巧_prometheus

TiDB监控prometheus常用技巧_tidb_02

上图一是Overview面板中的Duration监控项,假如我们发现8点-9点之间有异常,进而排查tikv是否正常,可以通过复制当前页面,找到TiKV-Details面板(上图二),但此时时间段却不是我们想要的。

对于如何选取特定时间段,通常有以下两种方法:

1、我们可以通过修改右上角的时间列,改成特定的时间范围。如下图所示(需要修改4处地方):

TiDB监控prometheus常用技巧_grafana_03

2、另外一种是复制浏览器地址栏中的tso,粘贴到另外一个面板的地址后面,快速跳转到特定时间段。

TiDB监控prometheus常用技巧_prometheus_04

复制浏览器地址栏中最后的那部分内容(8点-9点对应的tso),如上图标红的(&from=1721347200000&to=1721350799000),粘贴到另外一个监控的网址后面,在点击刷新即可:

TiDB监控prometheus常用技巧_node_05



技巧二:监控数据不准?

同样的监控面板,同样的时间段,为何监控数据的最大值不一样呢?如下图所示:

TiDB监控prometheus常用技巧_grafana_06

TiDB监控prometheus常用技巧_node_07

小编这里卖个关子,大家先思考下原因,文章的最后会公布答案。



技巧三:grafana监控列显示不全

我们经常查看blackbox_exporter面板来排查是否有网络延迟问题,但是该监控项显示的不全,看不到谁到谁有网络延迟问题,如下图所示:

TiDB监控prometheus常用技巧_prometheus_08

这是由于grafana的列宽有限,导致无法显示全,可以通过如下方式,将该选项显示全:

TiDB监控prometheus常用技巧_node_09

在grafana界面右上角有个箭头的按钮,找到Legend,把“As Table”选项关闭后,就可以看到完整的监控列。参考上面图片。



技巧四:grafana监控项展现最大/小值

我们经常有这种需求:查看一天中,机器CPU使用的峰值是多少,及出现峰值的时刻。找到CPU使用率的监控项后,我们发现默认只显示current值,如下图所示:

TiDB监控prometheus常用技巧_grafana_10

我们需要找到监控项设置,找到最大值设置的地方,勾选后即可查看,如下图所示:

TiDB监控prometheus常用技巧_tidb_11

根据上图标红的提示,即可找出CPU在某时刻的峰值。但细心的小伙伴可能会发现一个问题,min、max、avg、current并没有显示全,这是因为默认的宽度为250,只需将width的值调大,min、max、avg、current就可以显示全了,如下图所示:

TiDB监控prometheus常用技巧_node_12



技巧五:直接拉取prometheus监控数据

我们可以通过网页访问prometheus的9090端口,直接访问prometheus数据库。通过这种方式获取我们需要的数据,比如:我们如何快速获取TiDB集群所有成员的主机名和IP的数据,TiUP只能获取集群的IP信息,无法获取主机名,那就可以直接访问prometheus中的数据,获取主机名和IP的数据,如下图所示:

TiDB监控prometheus常用技巧_prometheus_13

在浏览器输入prometheus监控地址,在搜索栏中输入“node_uname_info”,然后输出回车,就显示该集群下,所有主机的信息了。



技巧六:表达式修改

我们在日常运维中,经常会遇到一些特殊需求的场景,而grafana面板显示的并不是我们需要的,此时需要我们修改下grafana的表达式来满足我们的需求,例如:统计下集群内流量峰值。

我们grafana面板中默认显示的每台机器的流量情况,如下图所示:

TiDB监控prometheus常用技巧_prometheus_14

修改表达式如下:

sum(irate(node_network_transmit_bytes_total{k8s_cluster="$k8s_cluster", tidb_cluster="$tidb_cluster", device!="lo"}[1m]))

TiDB监控prometheus常用技巧_tidb_15



总结

监控是我们日常运维中的必备武器,利用好监控,让我们的工作更加顺畅。

技巧二中的两张图显示的最大值不一样,原因是采样数据不同,要想得到的数据更精确,需要把max data points调大,默认是一千多,调成10W,显示的数据就会更精确。

TiDB监控prometheus常用技巧_tidb_16