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-metrics
从kube-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 适配器的 Horizontal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)