【问题标题】:Aggregate Kubernetes liveness probe responses聚合 Kubernetes 活跃度探测响应
【发布时间】:2021-01-27 22:23:34
【问题描述】:

我的应用程序有一个 /health Http 端点,为 Kubernetes 活动检查探针配置。 API 返回一个包含健康指标的 json。

Kubernetes 只关心返回的 http 状态,但我想将 json 响应存储在 Prometheus 中以进行监控。

Kubernetes 调用 API 后是否可以捕获响应?我不想将功能添加到应用程序本身,而是使用外部组件。

推荐的做法是什么?

【问题讨论】:

    标签: kubernetes kubernetes-pod


    【解决方案1】:

    回答您的问题:

    1. 创建一个边车,每 N 秒调用一次 localhost:port/health 并存储最近的回复。 N 应该等于 prometheus 的抓取间隔才能获得准确的结果。

    2. 然后,sidecar 在 pod 的单独端口上以 /metrics 端点中的度量形式公开最近的回复。您可以使用https://github.com/prometheus/client_python 来实现边车。 Prometheus exporter sidecar其实是一个被广泛使用的模式,尝试搜索一下。

    3. 将 Prometheus 指向为 /metrics 端点提供服务,该端点现在由一个边车提供服务,位于一个单独的端口上。您将需要在 Service 对象中使用一个单独的端口来指向您的边车端口。在这个阶段可以调整抓取间隔,与你的N同步,否则,只需调整Nscrape_config详情请参考:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#service

      如果您需要自动发现 Prometheus 目标,假设您有一堆这样的部署并且它们的数量各不相同 - 请参阅我最近的回答:https://stackoverflow.com/a/64269434/923620

    提出一个更简单的解决方案:

    1. 确保在您的应用中记录您在/health 中返回的所有内容
    2. 实现集中式日志记录(日志聚合):https://kubernetes.io/docs/concepts/cluster-administration/logging/
    3. 使用日志处理器,例如ELK,用于查询/分析结果。

    【讨论】:

    • 谢谢,这些确实是很好的建议,但是,我想避免过多地调用 API。由于 Kubernetes 也调用 API,我想捕捉该事件 - 不确定 Kubernetes 是否可行并以任何方式支持
    • 我认为这个答案仍然是实际的:stackoverflow.com/a/34599554/923620
    • 小心提高 kubelet 的日志级别,因为它将适用于您在集群上运行的所有内容,而不仅仅是这个应用程序 - 日志量可能很大。流行的日志收集器经常收集开箱即用的 kubelet 日志,请参阅github.com/helm/charts/tree/master/stable/fluent-bitsystemdUnit 变量)
    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2018-05-31
    • 2020-02-04
    • 2016-11-26
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多