You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Prometheus实现Kubernetes服务宕机告警方案咨询

Kubernetes内部服务宕机告警的PromQL方案(基于kube-prometheus-stack)

核心思路

Kubernetes的Service是虚拟转发对象,所谓"服务宕机"本质是后端无可用Endpoint(无就绪Pod绑定到该Service),或所有关联Endpoint无法提供服务。以下是针对不同场景的实用PromQL表达式:

场景1:Service无可用后端(最直接)

当Service关联的所有Pod都未就绪/不存在时触发告警:

kube_service_status_available == 0

说明:该指标来自kube-state-metrics(kube-prometheus-stack默认集成),值为1表示Service有至少一个就绪Endpoint,0则表示无可用后端。

场景2:Service后端Endpoint数量为0(排除ExternalName类型)

如果需要过滤掉本身无后端的ExternalName类型Service:

kube_service_spec_external_name == "" AND kube_service_status_selector_present == 1 AND kube_endpoint_addresses == 0

说明:

  • kube_service_spec_external_name == "":排除ExternalName类型服务
  • kube_service_status_selector_present == 1:仅针对通过selector自动关联Pod的服务
  • kube_endpoint_addresses:统计Service关联的Endpoint总数

场景3:Service后端Pod存在但全部未就绪

如果需要区分"Pod存在但未就绪"和"Pod完全不存在"的场景:

sum by (namespace, service) (kube_pod_status_ready{condition="true"} * on(pod, namespace) group_left(service) kube_pod_labels{label_app=~"$service_label"}) == 0

说明:将$service_label替换为你服务使用的标签(如app或app.kubernetes.io/name),通过关联Pod标签与Service的selector,统计每个Service下就绪Pod的数量,为0则触发告警。

告警规则示例(适配kube-prometheus-stack)

在additionalPrometheusRules中添加如下规则:

groups:
- name: kubernetes-service-alerts
  rules:
  - alert: ServiceUnavailable
    expr: kube_service_status_available == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Service {{ $labels.namespace }}/{{ $labels.service }} 无可用后端"
      description: "Service {{ $labels.namespace }}/{{ $labels.service }} 关联的所有Endpoint均未就绪,请检查Pod状态或Service配置"

注意事项

  • 确保kube-state-metrics正常运行(kube-prometheus-stack默认部署,可通过kubectl get pods -n monitoring验证)
  • 对于手动创建Endpoint而非通过selector关联的Service,需调整表达式,直接监控kube_endpoint_addresses指标
  • 可根据业务需求调整for的时长,避免短暂抖动触发误告警

内容的提问来源于stack exchange,提问作者Alexy Pulivelil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:57:44