在探讨VictoriaMetrics的性能监控基础设施时,我们会深入了解其核心组件vmstorage的独特工作方式。这款高效且开源的工具能够成功地将原始指标数据转化为有序的历史记录,其独特的数据存储与处理机制值得深入剖析。
在数据链路中,vmstorage接收来自agent的数据。vminsert在接收数据后会进行压缩,并将数据包发送至vmstorage。vmstorage则以有序且优化的方式将数据存储在磁盘上,这种结构便于后续快速检索和查询数据。
关于并发读取限制方面,vmstorage在接收数据时会先通过并发读取限制器进行检查。这一限制器可同时处理的数据量最多为CPU核心数的两倍。为确保系统在高负载下的效率,当读取请求超出此限制或排队时间超过一分钟时,超出部分的请求将被拒绝。
在数据块处理方面,vmstorage每次从数据流中读取一个数据块。每个数据块以8字节的头部开始,表示数据块的大小。为了保证数据处理的高效性,数据块大小被严格控制在一定范围内。当数据块验证通过并成功到达时,vmstorage会发送确认信息。
当磁盘空间不足时,vmstorage会自动切换到只读模式,此时会发送“read-only ack”确认信息,而vminsert则会识别该确认并重新发送数据。读取的原始数据块将被解析为结构化的行,这一过程为后续的数据分析和查询提供了基础。
对于大尺寸的数据块,vmstorage会将其分块处理,每次处理的数据量限定为10,000行。这一过程中,多个监控指标如读取失败次数、解析失败的块数等可供用户参考,以评估系统性能。
每条指标数据均包含规范的指标名称、标签(可选)、时间戳和浮点值。为了确保数据存储和查询的一致性,vmstorage会为规范指标名称创建唯一的TSID(时间序列ID)。这一过程包括在内存缓存中查找或创建TSID,并在必要时更新IndexDB。
在处理时间序列的变动率时,VictoriaMetrics特别关注高变动率对系统性能的影响。通过配置相关参数,如每小时和每天可创建的新时间序列数量,系统管理员可以控制这一影响。
获得TSID后,VictoriaMetrics会将相关数据放入名为“raw-row shards”的内存缓冲区。这些缓冲区的数据在满足一定条件时会进行刷新,并被成三种类型的L部分:内存部分、小部分和大部分。这些部分的数据最终将被写入磁盘,并经过刷新和合并等过程以优化存储和查询效率。
默认情况下,vmstorage的去重功能是关闭的,但可通过配置去重窗口来启用。这一功能能识别并删除几乎相同的数据点,从而优化存储并消除冗余。
关于数据的保留策略,用户可以通过设置决定数据在磁盘上的保留时长。系统会定期清理超出保留期的旧数据和分区。企业版还提供了更灵活的保留期设置选项,如基于标签等条件为特定类型数据定义保留期。
在管理磁盘空间方面,vmstorage通过监控可用磁盘空间来确保系统的稳定运行。当磁盘空间低于设定阈值时,系统会自动切换到只读模式以保护数据安全。针对企业版用户,降采样功能可帮助减少存储的样本数量,尤其适用于管理大量旧数据的情况。