Prometheus 代理模式
Prometheus 代理模式
Prometheus 代理模式是 Prometheus 二进制文件中内置的一种操作模式,它具有相同的抓取 API、语义、配置和发现机制;此代理模式禁用 Prometheus 的一些常规功能(TSDB、告警和规则评估),并优化二进制文件以进行抓取和远程写入到远程位置。
Prometheus 远程写入协议将 Prometheus 收集的所有或部分指标转发(流式传输)到远程位置;您可以配置 Prometheus 将一些指标(如果您愿意,可以包含所有元数据和示例!)转发到一个或多个支持远程写入 API 的位置。
通过远程写入,Prometheus 仍然使用拉取模型从应用程序收集指标,这让我们能够了解不同的故障模式。之后,我们批量处理样本和时间序列,并将数据导出、复制(推送)到远程写入端点,从而限制中心点监控未知项的数量。从这种抓取器流式传输数据可以通过将指标数据存储在集中位置来实现全局视图用例。这使得关注点分离成为可能,当应用程序由不同于可观测性或监控管道的团队管理时,这非常有用。
代理模式优化了 Prometheus 以适应远程写入用例。它禁用了查询、告警和本地存储,并将其替换为定制的 TSDB WAL。其他一切保持不变:抓取逻辑、服务发现和相关配置。如果您只想将数据转发到远程 Prometheus 服务器或任何其他符合远程写入协议的项目,它可以作为 Prometheus 的直接替代品。
本质上,它看起来是这样的:
代理模式的优势
- 提高了效率。定制的代理 TSDB WAL 在成功写入后立即删除数据。如果无法连接到远程端点,它会将数据临时持久化到磁盘上,直到远程端点恢复在线。目前,这仅限于两小时的缓冲区,类似于非代理模式的 Prometheus。这意味着无需在内存中构建数据块或维护用于查询的完整索引。本质上,代理模式使用的资源仅是正常 Prometheus 服务器在类似情况下所用资源的一小部分。
- 代理模式使得摄入的水平扩展变得更容易。
代理模式的缺点
- 无本地查询。您无法查询本地 Prometheus 实例。
- 不支持记录规则。您无法预先汇总数据以进行远程写入。规则必须在远程完成。
- 无告警。所有告警都必须由远程系统完成。
如何详细使用代理模式
如果您显示 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 标志以代理模式运行 Prometheus。其余标志要么同时适用于服务器和代理模式,要么仅适用于特定模式。您可以通过检查标志帮助字符串的最后一句话来判断哪个标志适用于哪种模式。"仅与服务器模式一起使用"表示它仅适用于服务器模式。如果您没有看到类似这样的提及,则表示该标志是共享的。
代理模式接受相同的抓取配置,具有相同的发现选项和远程写入选项。它还在端口 9095 上公开了一个 Web UI,该 UI 禁用查询功能,但会像正常的 Prometheus 服务器一样显示构建信息、配置、目标和服务发现信息。