Prometheus Agent 模式
Prometheus Agent 是内置于 Prometheus 二进制文件中的运行模式,具有相同的抓取 API、语义、配置和发现机制;此 agent 模式禁用了 Prometheus 的部分常规功能(TSDB、告警和规则评估),并针对抓取和远程写入到远程位置进行了优化。
Prometheus Remote Write 协议将 Prometheus 收集的全部或部分指标转发(流式传输)到远程位置;你可以配置 Prometheus 将一些指标(如果需要,包含所有元数据和 exemplar!)转发到一个或多个支持 Remote Write API 的位置。
通过 Remote Write,Prometheus 仍然使用拉取模型从应用程序获取指标,这使我们能够理解那些不同的故障模式。之后,我们对样本和序列进行批处理,并将数据导出、复制(推送)到 Remote Write 端点,限制了中心点所面临的监控未知因素数量。
从这样的抓取器流式传输数据,通过允许你将指标数据存储在集中位置来实现全局视图用例。这实现了关注点分离,当不同团队管理应用程序和可观测性或监控管道时非常有用。
Agent 模式针对 remote write 用例优化了 Prometheus。它禁用了查询、告警和本地存储,并替换为自定义的 TSDB WAL。其他一切保持不变:抓取逻辑、服务发现和相关配置。如果你只想将数据转发到远程 Prometheus 服务器或任何其他兼容 Remote Write 的项目,它可以作为 Prometheus 的直接替代品。
本质上,它看起来像这样:
Agent 模式的优势
- 提高效率。自定义的 Agent TSDB WAL 在成功写入后立即删除数据。如果无法到达远程端点,它会暂时将数据持久化到磁盘,直到远程端点恢复在线。目前这仅限于两小时的缓冲区,与非 agent Prometheus 类似。这意味着不需要在内存中构建数据块或维护完整的查询索引。从本质上讲,Agent 模式使用的资源只是普通 Prometheus 服务器在类似情况下使用资源的一小部分。
- Agent 模式实现了更容易的水平扩展采集能力。
Agent 模式的劣势
- 无本地查询。你无法查询本地 Prometheus 实例。
- 不支持记录规则。你无法预聚合数据用于发送到 remote write。规则必须在远程完成。
- 无告警。所有告警必须由远程系统完成。
如何详细使用 Agent 模式
如果你查看 Prometheus 的帮助输出(--help 标志),你应该会看到大致如下内容:
usage: prometheus [<flags>]
The Prometheus monitoring server
Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man).
(... other flags)
--storage.tsdb.path="data/"
Base path for metrics storage. Use with server mode only.
--storage.agent.path="data-agent/"
Base path for metrics storage. Use with agent mode only.
(... other flags)
--[no-]agent Run Prometheus in 'Agent mode'.
使用 --agent 标志以 Agent 模式运行 Prometheus。其余标志要么适用于服务器和 Agent 两种模式,要么仅适用于特定模式。你可以通过检查标志帮助字符串的最后一句来查看哪个标志适用于哪种模式。"Use with server mode only" 表示仅适用于服务器模式。如果没有看到此类提示,则表示该标志是共享的。
Agent 模式接受相同的抓取配置,具有相同的发现选项和 remote write 选项。它还在端口 9095 上暴露一个 Web UI,查询功能被禁用,但会像普通 Prometheus 服务器一样显示构建信息、配置、目标和服务发现信息。