2021-10-29,对普罗米修斯代理的初步支持被合并了,它将被纳入普罗米修斯v2.32版本中!这个功能的历史有点长。
这项功能的历史有点长:
- 2020-03-18,我们发布了Grafana Agent,这是Prometheus的一个子集,不需要TSDB来发送远程写入的指标。
- 2020-12-17,Prometheus团队举行了一次开发峰会,他们同意在Prometheus官方项目中涵盖类似Grafana Agent的功能。
- 2021-01-27,我发表了一份关于我们如何通过将Grafana Agent代码上移来实现这一目标的提案。
- 2021-05-05,向上游移动Grafana Agent代码的初始PR被打开。
- 2021-10-29,该PR被合并到Prometheus的主分支。
我们花了一点时间才走到今天,但我很高兴我们能够使用Grafana Agent代码在prometheus/prometheus仓库中实现类似代理的功能。Prometheus的维护者Bartłomiej Płotka在他的公告博文中写道,Agent模式能够使摄取的水平可扩展性更加容易,使其成为 "CNCF生态系统中某些部署的游戏改变者"。
当我们在2020年首次宣布Grafana Agent时,我们有一个单一的目标:成为Prometheus的云优化子集,使用相同的经过战斗考验的Prometheus代码。这通过将Prometheus缩减为 "代理模式 "来实现--重复使用所有Prometheus的代码,除了任何依赖TSDB的代码。
这给了它一些独特的权衡。在使用与Prometheus兼容的远程写终端时,你会使用更少的内存和存储,但你会在本地失去依赖TSDB的功能,如查询、记录规则和警报。
19个版本之后,很多东西都发生了变化!此后,我们增加了对称为集成的嵌入式Prometheus出口商的支持,为运营商托管Grafana Agent作为服务的可扩展模式,对Grafana Loki兼容的日志的支持,以及最后对Grafana Tempo的OTLP跟踪支持。
今天,我想说Grafana Agent现在作为一个项目有三个主要目标:
- 成为一个有主见的开源遥测堆栈的最佳伴侣。Prometheus用于度量,Grafana Loki用于日志,而Grafana Tempo用于追踪。这三个项目有很多共同点,而且配合得非常好。
- 启用新的用例(人们使用Grafana Agent转发遥测数据的方式),以实现第一个目标。主机过滤模式和没有存储的普罗米修斯概念都是这方面的例子。
- 与更广泛的生态系统分享经过验证的用例,以加强整个开源观察能力。当我们与Prometheus分享我们的SigV4支持时,我们已经做到了这一点,而Prometheus Agent是另一个例子。
我不会假装第一个目标并不模糊。"最佳 "是主观的,尽管我认为它是由性能、兼容性和启用的用例组合来衡量的。启用的用例会延续到第二个目标,这也是我认为该项目对用户、维护者和贡献者来说最令人兴奋的地方。
异步协作
当然,我们并不声称自己是创新的主宰者,并勇敢地处理无人支持的用例。像OpenTelemetry Collector这样的项目同时也在支持类似的Prometheus Agent用例。基于此,你可能想知道两个类似的解决方案平行存在是否有意义。
我想说的是,开源能够实现我想称之为 "异步合作 "的东西。这个想法是,多个项目可以通过平行地探索多种方法来共同工作。这种并行化最终导致了更强大的解决方案,使每个人都受益。异步协作更明显地被称为 "竞争",但我想在这里给它一个独特的术语,以证明它对可观测性生态系统的好处。
异步协作允许项目从多个角度缩小解决一个问题的范围,允许更快地迭代到一个更成熟的方法。现在,Grafana Agent和OpenTelemetry Collector采取了不同的权衡方法,现在知道它们是否有融合的未来还为时过早。只要它们平行存在,这两个解决方案就可以平行迭代,并从另一个解决方案中吸取教训。
这种类型的合作是只有开源和开放标准才能做到的,我坚信与今天从单一的方法开始相比,它能带来更好的未来。
什么时候贡献?
当然,异步合作只有在有某种目的的情况下才有价值,无论是通过代码捐赠还是将两个不同的想法转换为一个新的想法。一旦循环结束,通过支持更广泛的社区的更广泛的用例,两个项目都会变得更强大。
我相信普罗米修斯代理是最近最大的代码捐赠途径的例子。在过去的20个月里,我们已经为Prometheus证明了代理概念(即Grafana代理的无TSDB核心)。随着概念的证明,现在是结束循环并将其移到上游的最佳时机。鉴于Grafana代理的度量代码完全依赖于Prometheus的其他代码,将代码专门移到Prometheus项目中是有意义的。
Prometheus正式支持代理用例,为新的代理特定功能打开了大门,这些功能以前可能没有意义。这些功能也可能最终进入Grafana Agent,从而加强两个项目。
你也可以想象,结束一个异步协作周期会带来更多的周期。现在Prometheus和Grafana Agent都有机会平行地探索新的用例。
接下来的步骤
现在Prometheus Agent已经合并了,第一步是奉献我们的时间来帮助它变得像Grafana Agent一样稳定。
接下来,我们要帮助与那些可以从中受益的项目分享代码。例如,Thanos(用于Thanos Ruler)目前使用的是Grafana Agent度量代码的副本,现在可以改为使用官方的上游解决方案。
当然,我们也会更新Grafana Agent,使用Prometheus Agent的代码,这样就只有一个代码库了。
最后,我们将围绕我们已经确定的可以与Prometheus Agent共享的其他特定代理用例展开讨论。
参与进来!
鉴于Grafana Agent的严格定义范围,我一直喜欢把它想成是实现新用例的完美家园,这些用例有一天会让更多的人受益。
我非常欢迎任何人贡献他们的想法和用例,并帮助我们尽可能多地启动生态系统的异步协作周期。如果你想参与进来,请把你的想法作为一个问题提交到Grafana代理仓库,在我们Slack的公共#agent频道上与我们交谈,或者加入我们每月的社区电话会议。
当然,Prometheus自己的开发者社区也值得在此大加赞赏。如果你有兴趣为普罗米修斯代理贡献你自己的想法、问题或代码,请访问他们的仓库。同样,如果你对支持OpenTelemetry的代理用例感兴趣,他们的资源库包含一个贡献指南,以帮助你开始。