Prometheus 如何知道 Pod 何时崩溃?

Posted

技术标签:

【中文标题】Prometheus 如何知道 Pod 何时崩溃?【英文标题】:How does Prometheus know when a pod crashed? 【发布时间】:2018-12-26 20:36:16 【问题描述】:

据我了解,我们可以通过 Prometheus 设置警报规则,以便在 pod 崩溃时检测并发出警报。

我想了解 Prometheus 本身如何知道 Pod 何时崩溃或卡在挂起状态。

它在尝试从 pod 的 http 端点端口抓取指标时是否知道这一点?

Prometheus 是否从 Kubernetes 获取 pod 状态信息?

我问这个的原因是因为我想设置 Prometheus 来监控我已经部署的现有 Pod。如果 pod 不断崩溃或卡在挂起状态,我想收到警报。而且我想知道 Prometheus 是否可以检测到这些警报,而无需对现有 pod 中的代码进行任何修改。

【问题讨论】:

【参考方案1】:

prometheus 提取指标和健康状况的常用方法是使用抓取(通过 http 端点是最常见的)。由于 pod 可以有多个容器,因此最好抓取正在运行的容器的 http 端点。

如果prometheus没有从这个endpoint收到好的响应,就可以判断容器down了。

Prometheus 本身不执行警报,您通常将其委托给警报管理器。

【讨论】:

等等。如果 Pod 没有带有 HTTP 端点的容器,Prometheus 无法确定 Pod 状态?由于 Kubernetes 已经公开了 pod 状态,因此看起来相当倒退。我理解需要 http 端点来收集指标,但是对于 pod 状态,这有点奇怪。 哦,抱歉,对于 pod 状态,您可以使用 kube-state-metrics,prometheus 也可以抓取。 github.com/kubernetes/kube-state-metrics/blob/master/README.md。我认为 kube-state-metrics 是 heapster 的替代品。【参考方案2】:

使用sum(kube_pod_container_status_waiting_reason) by (reason)获取所有容器等待原因(如果有)

【讨论】:

【参考方案3】:

kube-state-metricskube-apiserver 收集有关 kubernetes 对象(例如 pod、部署等)状态的信息。它包含在prometheus-operator 中。要回答您的问题,您无需启动 pod 即可抓取其状态指标,您将直接从 apiserver 收集这些信息(通过 scaping kube-state-metrics 端点)。

要通过 kube-state-metrics check 检查哪些 pod 级别的指标可供您使用:https://github.com/kubernetes/kube-state-metrics/blob/master/docs/pod-metrics.md

根据上面的答案,您可以使用kube_pod_container_status_waiting_reason 指标,或者如果您只想提醒阈值而不管原因,您可以使用kube_pod_container_status_waiting

【讨论】:

以上是关于Prometheus 如何知道 Pod 何时崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus pod crashlooping 错误“打开存储失败”

Prometheus 查询以获取 kubernetes pod 中的 CPU 和内存使用情况

如何获取在 prometheus 中运行的 pod 数量

如何基于 Prometheus alert 运行 pod

使用 Prometheus 适配器的 Horizo​​ntal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)

Prometheus 查询 Kubernetes pod 正常运行时间