sentinel统计数据的持久化和查询

上一章 中我们了解到 dashboard 会定时从应用系统中拉取统计数据进行「实时监控」展示。那么 sentinel 是如何将大量的统计数据进行分类存储并且加快查询的呢?

sentinel 在运行过程会定期将统计数据(metrics)写入磁盘,在写入统计数据的会额外组织一份索引(idx)文件,用于加速统计数据的查询。接下来我们将通过一些图例来深入了解该流程。

统计数据的写入

在开始了解 metrics 的写入流程前,我们先介绍一下 metrics 的文件结构以及内容的组织形式吧。

文件格式

sentinel metrics 文件的默认存储于 ${userHome}/log/csp 目录下。文件命名规则为 ${appName}-metrics.log.${yyyy-MM-dd}.${number},文件通过 appName 进行项目区分,通过日期进行时间区分。文件大小超过上限后(默认 50M)重新创建新的文件,文件名以数字(依次递增)进行区分。

文件类型分为两种:

  • 记录实际 metric 数据的文件,我们将其称之为 metrics 文件
  • 用于记录 metrics 文件中数据偏移量的文件,我们将其称之为 idx 文件(比 metrics 文件名多一个 .idx 后缀),

每个 metrics 文件对应一个 idx 文件

在这里插入图片描述
metrics 文件内部每一行记录一条统计数据,数据格式为:

timestamp | yyyy-MM-dd HH:mm:ss | resourceName | passQps | blockQps | successQps | exceptionQps | qt | occupiedPassQps | concurrency | resource classification
在这里插入图片描述

idx 文件内部记录了指定时间(单位:秒)对应的 metrics 文件数据的偏移量,比如第 1718325266 秒的 metrics 数据记录在对应 metrics 文件的 1 位置。

这样看起来 idx 文件有点像是一个简单的索引文件。是的,如果 idx 文件很大的情况下,我们甚至可以再创建一种 .idx.idx 文件类型,用于加速 idx 文件的访问 😃

在这里插入图片描述

写入流程

其实从上面的文件设计中我们也就大概了解了 metrics 数据的写入流程了。当发生 metrics 数据写入时:

  1. 先将当前时间下 metrics 文件的偏移量记录到 idx 文件中
  2. 然后再将 metrics 数据写入到 metrics 文件里
    在这里插入图片描述

读取统计数据

通过上面的介绍,那 metrics 文件的查询逻辑也就不难理解啦。当需要查询指定时间范围内的 metrics 数据时,应该需要先定位数据对应的位置:

  1. 按照顺序(文件名中的数字升序顺序)遍历文件夹中的所有 idx 文件,直到找到指定时间对应的数据位置(offset)
    1. 迭代 idx 文件内容,比对查询时间和记录时间,如果大于记录时间,则查找下一秒的记录。如果整个文件都没有匹配到指定时间的记录,则查询下一个文件
    2. 重复上一步骤,直到查询时间和记录时间一致,返回记录时间对应的偏移量(offset)
  2. 从对应的 metrics 文件的指定偏移量(offset)读取数据,反序列化成 metrics 对象进行返回
    在这里插入图片描述

总结

在本章我们学习了 sentinel 如何写入并查询统计(metrics)数据。

其在 metrics 文件之外,额外维护了一个 idx 文件。用来快速定位指定时间对应的数据位置(偏移量),从而避免迭代所有 metrics 文件,加快了统计数据的查询速度。

文章编写不易,如有帮助,欢迎 star:github 地址gitee 地址

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentinel框架提供了多种持久化方式来存储和管理规则配置和统计数据。其中,Sentinel支持通过Nacos进行配置中心的持久化。通过引用中提到的SentinelAutoConfiguration类和SentinelDataSourceHandler类,我们可以了解到在Sentinel框架中,SentinelAutoConfiguration类注入了SentinelDataSourceHandler用于处理数据源。引用中提到,如果要修改Nacos的地址,可以通过添加参数`-Dnacos.addr=localhost:8848`来指定Nacos的地址。这意味着Sentinel可以将规则和配置信息存储在Nacos中,实现持久化。同时,引用提到,需要将sentinel-datasource-nacos依赖的scope去掉,并添加nacos支持,从而使得Sentinel能够与Nacos集成并进行持久化。综上所述,Sentinel可以通过Nacos进行持久化,将规则和配置信息存储在Nacos中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【sentinelSentinel规则的持久化](https://blog.csdn.net/u022812849/article/details/131206976)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【微服务】(十四)—— Sentinel 规则持久化](https://blog.csdn.net/a6470831/article/details/124438593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值