Prometheus:监视所有服务,而无需为每个服务创建ServiceMonitor?

时间:2020-10-20 13:13:08

标签: kubernetes prometheus kubernetes-helm prometheus-operator

我正在使用this prometheus helm chart

我想知道是否可以将prometheus运算符设置为自动监视集群或名称空间中的每个服务,而不必为每个服务创建ServiceMonitor

在当前设置下,当我要监视服务时,必须创建一个标签为ServiceMonitor的{​​{1}}。

编辑:

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

1 个答案:

答案 0 :(得分:4)

只有在所有服务上都具有通用标签

# 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

然后确保您自己的Prometheus操作员发现了此ServiceMonitor

Prometheus Operator和ServiceMonitor之间的这种额外的显式链接是有意进行的-这样,如果您的群集上有2个Prometheus实例(例如Infra和Product),则可以将哪个Prometheus分离到哪个Pods进行抓取配置。 / p>

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