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

Pol*_*ase 12 prometheus-operator kube-prometheus-stack servicemonitor

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

helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml
Run Code Online (Sandbox Code Playgroud)

PrometheusRules或者如果或发生变化PodMonitor,我使用helm upgrade. 自定义值是基于kube-prometheus-stack/values.yaml定义的。我在单独的 YAML 文件中定义prometheus.additionalPodMonitors和的地方additionalPrometheusRulesMap

helm upgrade my-kubpromstack -n monitoring \
  --reuse-values \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml
Run Code Online (Sandbox Code Playgroud)

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

例如,PodMonitorPrometheus 不会选择下面的定义(即不会出现在 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
Run Code Online (Sandbox Code Playgroud)

要监视的 Pod 有一个标签strimzi.io/kind: cluster-operator并且位于my-strimzi命名空间中。我希望podmonitor普罗米修斯能够自动识别上述内容。因为 kube-prometheus-stack/values.yaml 中默认的podMonitorSelector: {}有一条注释:

    ## PodMonitors to be selected for target discovery.
    ## If {}, select all PodMonitors
Run Code Online (Sandbox Code Playgroud)

编辑:看起来这个问题对很多人来说很有用。最简单的解决方案是 Aris Chow 下面建议的。设置自定义 helm 值如下:

    ## PodMonitors to be selected for target discovery.
    ## If {}, select all PodMonitors
Run Code Online (Sandbox Code Playgroud)

Ari*_*how 9

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

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

matchLabels:
  prometheus: "true"
Run Code Online (Sandbox Code Playgroud)

prometheus: "true"在您的podmonitor.yaml.

如果您对详细信息感兴趣,请单击此处查看代码。

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