vmagent 源码阅读

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


读了大约半天的 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. 希望对大家有用。 😃

posted on 2025-09-12 17:47  ahfuzhang  阅读(62)  评论(0)    收藏  举报