vmagent 源码阅读
作者:张富春(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
[*]这里其实不合理,我提了一个 issue
[*]在经过 -remoteWrite.streamAggr.dedupInterval 这里配置的这么长的时间后, aggregation 的结果会被发送到 remoteWrite URL
[*]也就是说:vmagent可以作为一种前置计算的能力,可以以 A 频率采集 exporter 数据,然后做各种 Aggregation 计算,然后以 B 频率发送到存储群集
[*]remoteWrite.url 与 aggregation 的配置是数组:因此,可以配置非常多的 aggregation 来做不同维度的数据加工,并最终存储在不同的后端里(当然也可以是同一个)
Have Fun. 希望对大家有用。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]