【问题标题】:Prometheus: Monitor all services without creating ServiceMonitor for each service?Prometheus:监控所有服务而不为每个服务创建ServiceMonitor?
【发布时间】:2020-10-20 13:13:08
【问题描述】:

我正在使用this prometheus helm chart

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

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

编辑:

带有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"

【问题讨论】:

  • 您在serviceMonitor sn-p 中定义了端口metrics,但您在service 中使用http 作为名称。是错字吗?

标签: kubernetes prometheus kubernetes-helm prometheus-operator


【解决方案1】:

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

# 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

然后,为了确保这个 ServiceMonitor 被 Prometheus Operator 发现,您可以:

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

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

【讨论】:

  • 感谢您的帮助。我已经创建了 ServiceMonitor 并且只将 monitoring: true 更改为 monitoring: "true" ,否则我会收到错误消息。我已应用此文件,然后将标签 monitoring: "true" 添加到服务并应用它。但是该服务没有出现在我的普罗米修斯目标中。有任何想法吗? ServiceMonitor 应该什么时候获取带有monitoring: "true" 标签的服务?
  • 等一下,我添加了另一部分的描述 - 操作员如何发现 ServiceMonitor 本身
  • 如果一切正常,服务将在一分钟内进入目标列表
  • 嗯,我已将release: prometheus 标签添加到我的“catch-all”服务监视器中。现在它显示在普罗米修斯目标中,但是当我将标签 monitoring: "true" 添加到服务时,它仍然没有显示在普罗米修斯目标中。我已将我的 yaml 文件添加到我的问题中。知道可能出了什么问题吗?
  • port: metrics - 服务端口被称为http。 servicemonitor 或 service 的变化。这是我能看到的唯一问题
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
相关资源
最近更新 更多