4

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

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

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

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

问题:如何让 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

要监控的 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
4

2 回答 2

4

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

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

matchLabels:
  prometheus: "true"

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

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

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

于 2021-06-29T10:25:32.557 回答
1

添加此答案以解决 OP 中评论者提出的问题。这是我使用的 PodMonitor 定义 + helm 图表的自定义 helm 值,kube-prometheus-stack以使 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
于 2021-08-20T13:06:48.710 回答