在 kube-prometheus-stack helm 值之外添加 PodMonitor 或 ServiceMonitor

问题描述

使用 kube-prometheus-stack 舵图,版本 16.10.0。到目前为止,我通过 helm 自定义添加了我的自定义 PrometheusRulesPodMonitorServiceMonitor

helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml

或者在 PrometheusRulesPodMonitor 发生变化的情况下,我使用 helm upgrade自定义值是基于 kube-prometheus-stack/values.yaml 定义的。我在单独的 YAML 文件中定义 prometheus.additionalPodMonitorsadditionalPrometheusRulesMap 的地方

helm upgrade my-kubpromstack -n monitoring \
  --reuse-values \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml

问题:如何让 kube-prometheus-stack 的 Prometheus 服务器了解在 helm 值之外创建的规则、podmonitor、servicemonitor?

例如,下面的 PodMonitor 定义不会被 Prometheus 选取(即不会出现在 Prometheus UI 的目标中)。

kubectl apply -f - << EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
Metadata:
  name: cluster-operator-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchLabels:
      strimzi.io/kind: cluster-operator
  namespaceSelector:
    matchNames:
      - my-strimzi
  podMetricsEndpoints:
  - path: /metrics
    port: http
EOF

要监控的 Pod 有一个标签 strimzi.io/kind: cluster-operator,位于 my-strimzi 命名空间中。我希望 Prometheus 自动识别上面的 podmonitor。因为 kube-prometheus-stack/values.yaml 中的podMonitorSelector: {} 有一条注释说:

    ## PodMonitors to be selected for target discovery.
    ## If {},select all PodMonitors

解决方法

如果您将 prometheus.prometheusSpec.podMonitorSelectorNilUseHelmValues 定义为 false(在 values.yaml 中,默认设置为 true)您可以实现您的目标。由于值为 true,它只会尝试设置一个 release 标签来匹配 PodMonitor,您自己的定义不包括该标签。

或者,您可以将其保留为 true 并将 prometheus.prometheusSpec.podMonitorSelector 设置为:

matchLabels:
  prometheus: "true"

并在您的 prometheus: "true" 中添加标签 podmonitor.yaml

如果您对详细信息感兴趣,请点击 here 查看代码。

请注意此链接中的图表版本为 15.4.4,您应该更改为您正在使用的版本,以防万一有任何更新。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...