何时使用 Pushgateway
Pushgateway 是一个中间服务,允许您从无法被抓取的作业中推送指标。欲了解详情,请参阅 推送指标。
我应该使用 Pushgateway 吗?
我们仅在某些有限的情况下才推荐使用 Pushgateway。 在常规指标收集时,盲目使用 Pushgateway 而非 Prometheus 常见的拉取(pull)模型会带来几个陷阱
- 当通过单个 Pushgateway 监控多个实例时,Pushgateway 会成为单点故障和潜在的瓶颈。
- 您会失去 Prometheus 通过
up
指标(每次抓取时生成)进行的自动实例健康监控。 - Pushgateway 永远不会忘记推送到它的序列,并将它们永久暴露给 Prometheus,除非这些序列通过 Pushgateway 的 API 手动删除。
当作业的多个实例通过 instance
标签或类似方式在 Pushgateway 中区分它们的指标时,后一点尤其重要。即使原始实例被重命名或移除,该实例的指标也将保留在 Pushgateway 中。这是因为 Pushgateway 作为指标缓存的生命周期与向其推送指标的进程的生命周期是根本分离的。与 Prometheus 常见的拉取式监控形成对比:当一个实例消失时(无论是故意的还是意外的),其指标也会随之自动消失。而使用 Pushgateway 时,情况并非如此,您现在必须手动删除任何陈旧指标,或自行自动化此生命周期同步过程。
通常,Pushgateway 唯一有效的用例是捕获服务级批处理作业的结果。 “服务级”批处理作业是指与特定机器或作业实例在语义上无关的作业(例如,为整个服务删除多个用户的批处理作业)。此类作业的指标不应包含机器或实例标签,以将特定机器或实例的生命周期与推送的指标解耦。这减少了 Pushgateway 中管理陈旧指标的负担。另请参阅 监控批处理作业的最佳实践。
替代策略
如果入站防火墙或 NAT 阻止您从目标拉取指标,请考虑将 Prometheus 服务器也移到网络屏障之后。我们通常建议将 Prometheus 服务器运行在与被监控实例相同的网络中。否则,请考虑使用 PushProx,它允许 Prometheus 穿透防火墙或 NAT。
对于与机器相关的批处理作业(例如自动安全更新 cronjob 或配置管理客户端运行),请使用 Node Exporter 的 textfile 收集器而不是 Pushgateway 来暴露生成的指标。