网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Go >

vmagent 源码阅读

时间:2025-09-12 17:47

人气:

作者:admin

标签:

导读:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 读了大约半天的 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. 希望对大家有用。 ????

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信