首页 > 解决方案 > Prometheus:监控所有服务而不为每个服务创建ServiceMonitor?

问题描述

我正在使用这个 prometheus helm chart

我想知道是否可以将 prometheus 操作员设置为自动监控集群或命名空间中的每个服务,而不必ServiceMonitor为每个服务创建一个。

使用当前设置,当我想监控服务时,我必须创建一个ServiceMonitor带有标签的release: prometheus.

编辑:

monitoring: "true"标签的服务

apiVersion: v1
kind: Service
metadata:
  name: issue-manager-service
  labels:
    app: issue-manager-app
    monitoring: "true"
spec:
  selector:
    app: issue-manager-app
  ports:
    - protocol: TCP
      name: http
      port: 80
      targetPort: 7200

“Catch-All”服务监控器:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: service-monitor-scraper
  labels:
    release: prometheus
spec:
  endpoints:
  - port: metrics
    interval: 30s
    path: /metrics
  jobLabel: monitoring
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      monitoring: "true"

标签: kubernetesprometheuskubernetes-helmprometheus-operator

解决方案


仅当您在所有服务上都有一个通用标签时

# for example:
org: "my-company"
# or
monitoring: "true"
# or 
app.kubernetes.io/managed-by: "Helm"  # <- in most cases this represents all

然后定义一个单一的跨命名空间ServiceMonitor,涵盖所有标记的服务:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: common-monitor
  namespace: monitoring
spec:
  endpoints:
  - port: metrics
    interval: 30s
    path: /metrics
  jobLabel: monitoring
  namespaceSelector:
    any: true  # <- important
  selector:
    matchLabels:
      monitoring: "true"  # <- should match what you've chosen as common

然后,为了确保ServiceMonitorPrometheus Operator 发现了这一点,您可以:

Prometheus Operator 和 ServiceMonitor 之间的这种额外的显式链接是有意完成的 - 这样,如果您的集群上有 2 个 Prometheus 实例(例如 Infra 和 Product),您可以区分哪些 Prometheus 将获取哪些 Pod 到其抓取配置。

从您的问题来看,听起来您已经有一个serviceMonitorSelector基于标签的release: prometheus标签-尝试将其添加到您的全部内容ServiceMonitor中。


推荐阅读