在 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 自定义值添加了我的自定义 PrometheusRules
、PodMonitor
和 ServiceMonitor
。
helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
-f my-AlertRules.yaml \
-f my-PodMonitor.yaml
或者在 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
问题:如何让 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
使用 kube-prometheus-stack helm chart,版本 35.2.0。到目前为止,我通过 helm 自定义值添加了我的自定义 PrometheusRules
、PodMonitor
和 ServiceMonitor
。
helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
-f my-AlertRules.yaml \
-f my-PodMonitor.yaml
或者在 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
问题:如何让 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