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

Posted

技术标签:

【中文标题】在 kube-prometheus-stack helm 值之外添加 PodMonitor 或 ServiceMonitor【英文标题】:Add PodMonitor or ServiceMonitor outside of kube-prometheus-stack helm values 【发布时间】:2021-09-06 04:22:26 【问题描述】:

使用kube-prometheus-stack helm 图表,版本 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 中的 Strimzi Metrics using kube-prometheus-stack helm chart。 对不起私人项目。但是,我在下面添加了一个附加答案以显示一个工作示例。祝你好运 不用担心,@aris 的回答帮助我在 15 分钟评论存储库后解决了它。顺便说一句,我已经实施并推送到repository。 【参考方案1】:

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

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

matchLabels:
  prometheus: "true"

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

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

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

【讨论】:

专家回答谢谢。下周我何时恢复这个项目的工作时会确认。我认为kube-prometheus-stack/values.yam, podMonitorSelector 中的评论不正确。 确认您的建议有效。非常感谢。 PrometheusRule 的原理相同,为 prometheus.prometheusSpec.ruleSelector.matchLabels 设置自定义标签 @Polymerase 是的,我认为 values.yaml 中的一些 cmets 有点过时 - 如果需要,请阅读模板文件中的逻辑 :-)【参考方案2】:

添加此答案以解决 OP 中评论者提出的问题。这是我使用的 PodMonitor 定义 + kube-prometheus-stack helm 图表的自定义 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

【讨论】:

以上是关于在 kube-prometheus-stack helm 值之外添加 PodMonitor 或 ServiceMonitor的主要内容,如果未能解决你的问题,请参考以下文章

kube-prometheus-stack 应用程序中的 Grafana pod 无法检测数据源的 configmap

如何配置 kube-prometheus-stack helm 安装来抓取 Kubernetes 服务?

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

Kubernetes集群监控解决方案kube-prometheus-stack(prometheus-operator)helm安装

Kubernetes集群监控解决方案kube-prometheus-stack(prometheus-operator)helm安装

关于 Kubernetes集群性能监控(kube-prometheus-stack/Metrics Server)的一些笔记