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

Add PodMonitor or ServiceMonitor outside of kube-prometheus-stack helm values

使用 kube-prometheus-stack helm chart,版本 35.2.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 命名空间中。我希望上面的 podmonitor 能被普罗米修斯自动识别。因为在kube-prometheus-stack/values.yaml中默认的podMonitorSelector: {}有一个注释是这样写的:

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

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

prometheus:
  prometheusSpec:
    podMonitorSelectorNilUsesHelmValues: false
    probeSelectorNilUsesHelmValues: false
    ruleSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false

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

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

matchLabels:
  prometheus: "true"

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

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

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

添加此答案以解决 OP 中评论者提出的问题。这是我使用的 PodMonitor 定义 + kube-prometheus-stack helm chart 的自定义 helm 值,让 Prometheus 操作员将 pod 发现为目标。要点就是标签app: strimzi。评论区展示了如何配置helm让Prometheus识别那个标签。

#--------------------------------------------------------------------------------
# The kube-prometheus-stack helm chart must have the value
# podMonitorSelector.matchLabels set to match the label `app: strimzi` of the PodMonitors below.
# Otherwise Prometheus operator will not scrape the metrics of the corresponding pods
#
# prometheus:
#   prometheusSpec:
#     podMonitorSelector:
#       matchLabels:
#         app: strimzi
#--------------------------------------------------------------------------------

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: strimzi-cluster-operator-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchLabels:
      strimzi.io/kind: cluster-operator
  namespaceSelector:
    matchNames:
      - strimzi
  podMetricsEndpoints:
  - path: /metrics
    port: http