【发布时间】:2021-01-27 22:23:34
【问题描述】:
我的应用程序有一个 /health Http 端点,为 Kubernetes 活动检查探针配置。 API 返回一个包含健康指标的 json。
Kubernetes 只关心返回的 http 状态,但我想将 json 响应存储在 Prometheus 中以进行监控。
Kubernetes 调用 API 后是否可以捕获响应?我不想将功能添加到应用程序本身,而是使用外部组件。
推荐的做法是什么?
【问题讨论】:
我的应用程序有一个 /health Http 端点,为 Kubernetes 活动检查探针配置。 API 返回一个包含健康指标的 json。
Kubernetes 只关心返回的 http 状态,但我想将 json 响应存储在 Prometheus 中以进行监控。
Kubernetes 调用 API 后是否可以捕获响应?我不想将功能添加到应用程序本身,而是使用外部组件。
推荐的做法是什么?
【问题讨论】:
回答您的问题:
创建一个边车,每 N 秒调用一次 localhost:port/health 并存储最近的回复。 N 应该等于 prometheus 的抓取间隔才能获得准确的结果。
然后,sidecar 在 pod 的单独端口上以 /metrics 端点中的度量形式公开最近的回复。您可以使用https://github.com/prometheus/client_python 来实现边车。 Prometheus exporter sidecar其实是一个被广泛使用的模式,尝试搜索一下。
将 Prometheus 指向为 /metrics 端点提供服务,该端点现在由一个边车提供服务,位于一个单独的端口上。您将需要在 Service 对象中使用一个单独的端口来指向您的边车端口。在这个阶段可以调整抓取间隔,与你的N同步,否则,只需调整N。 scrape_config详情请参考:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#service
如果您需要自动发现 Prometheus 目标,假设您有一堆这样的部署并且它们的数量各不相同 - 请参阅我最近的回答:https://stackoverflow.com/a/64269434/923620
提出一个更简单的解决方案:
/health 中返回的所有内容
【讨论】:
systemdUnit 变量)