使用 https://github.com/prometheus-operator/kube-prometheus/tree/main/manifests 手动安装 kube-prometheus,而不使用 jb。
规则正在触发:
name: KubeControllerManagerDown
expr: absent(up{job="kube-controller-manager"} == 1)
即使我创建这些服务: https://github.com/prometheus-operator/prometheus-operator/issues/1859#issuecomment-437740104
如何调试这个问题?
您是否在托管 Kubernetes 服务(例如 AWS EKS)上运行? 如果是这样,这些服务可能对您隐藏。
表述
absent(up{job="kube-controller-manager"} == 1)
不正确,未实现预期功能。正确的表达方式是absent(up{job="kube-controller-manager"})
。
说明 Prometheus中的absent函数用于检查指定指标是否不存在。具体来说:
absent(up{job="kube-controller-manager"})
:这个表达正确
检查是否没有适合该作业的指标实例
kube-控制器-管理器。如果不存在这样的指标,则警报将是
触发了。
absent(up{job="kube-controller-manager"} == 1)
:这个
表达式不正确,因为它尝试执行比较
在缺少的函数中,这是无效的。在这种情况下,缺少的功能
应该直接采用度量或标签选择器作为其参数,
不是比较操作。
如果您使用的是
prometheus-community/kube-prometheus-stack
Helm 图表,您可以在 value.yaml 文件中定义正确的警报规则,如下所示:
defaultRules:
create: true
rules:
kubeControllerManager: false
additionalPrometheusRulesMap:
kubernetes-system-controller-manager:
groups:
- name: kubernetes-system-controller-manager
rules:
- alert: KubeControllerManagerDown
annotations:
description: KubeControllerManager has disappeared from Prometheus target discovery.
runbook_url: https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubecontrollermanagerdown
summary: Target disappeared from Prometheus target discovery.
expr: absent(up{job="kube-controller-manager"})
for: 15m
labels:
severity: critical