蝙俚
2025-10-1 19:10:56
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
- cnblogs博客
- zhihu
- Github
- 公众号:一本正经的瞎扯
读了大约半天的 vmagent 的代码,为了确定一些特定的用法的实现逻辑。
增加了很多中文注释,并且把代码提交到了:https://github.com/ahfuzhang/VictoriaMetrics_cluster_v1.96.0/tree/dev/comment_vmagent
通过 github.com/ahfuzhang/VictoriaMetrics_cluster_v1.96.0/app/vmagent/main.go 这个文件开始,可以看到 vmagent 初始化等部分的详细注释。
下面用一句话表达的模式,来总结源码阅读的心得:
- -promscrape.config=xx.yaml 这个配置项感觉是 vmagent 最重要的配置项
- 配置项可以填写文件路径,也可以用 http://xxx 提供一个下载地址。文档里面没提可以使用 http,从代码里面发现了这一点。
- 这个配置文件决定了:
- 多久抓一轮 exporter 中的 metrics 数据
- 抓取的 exporter 的列表
- 如果配置文件中的某个 job,使用了 kubernetes_sd_configs 的方式来寻找 exporter
- 部署在 k8s 中时,通常使用 k8s 中的名字来归拢一组 pod
- vmagent 会根据环境变量,定位到 k8s api server 的地址
- 每个 job 创建一个协程,每隔 5 秒通过 k8s api server 查询 name 对应的多个 exporter 的 ip:port
- scrape_interval 这个参数只能来自 yaml 配置文件,无法从其他地方修改。
- 如果有多种 scrape_interval 配置的需求,只能部署不同的群集来支持
- -remoteWrite.XX 这一系列的参数是第二重要的:具体见 here
- 这个系列的参数都是数组。一个参数重复出现多次是,第 N 次出现,就对应着数组下标 N-1
- 这些数组参数包括了(非常多):
- -remoteWrite.url=vminsert 的地址
- -remoteWrite.streamAggr.config=xx.yaml
- vmagent 有 time series 的 aggregation 的能力,具体见:here
- 每个 -remoteWrite.url 对应着一个 aggregation 的计算对象
- 每个 aggregation 下面又存在多个 rule
- 在没有配置 aggregation 的情况下:
- time series 会冗余发送到多个 -remoteWrite.url 上面。
- 除非配置 aggregation,否则多个 -remoteWrite.url 的行为是一致的
- 可以通过配置文件在 -remoteWrite.streamAggr.config 命令行参数中进行配置,也可以通过 -remoteWrite.streamAggr.xx 的系列参数进行配置。
- 每个 scrape_interval 的间隔,vmagent 会抓取所有 exporter 的 time series 数据,然后进入 aggregation 的计算逻辑
- aggregation 会进行典型的 relabel / 降采样 / 汇总 等计算
- 当配置 streamAggrDropInput=true 并且 streamAggrKeepInput=false 的时候,会只留下 aggregation 后的结果,而丢弃原始的 time series
- 在经过 -remoteWrite.streamAggr.dedupInterval 这里配置的这么长的时间后, aggregation 的结果会被发送到 remoteWrite URL
- 也就是说:vmagent可以作为一种前置计算的能力,可以以 A 频率采集 exporter 数据,然后做各种 Aggregation 计算,然后以 B 频率发送到存储群集
- remoteWrite.url 与 aggregation 的配置是数组:因此,可以配置非常多的 aggregation 来做不同维度的数据加工,并最终存储在不同的后端里(当然也可以是同一个)
Have Fun. 希望对大家有用。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|