kubernetes - 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"
解决方案
仅当您在所有服务上都有一个通用标签时
# 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 发现了这一点,您可以:
ServiceMonitor
通过内置的操作符模板声明: https ://github.com/prometheus-community/helm-charts/blob/4164ad5fdb6a977f1aba7b65f4e65582d3081528/charts/kube-prometheus-stack/values.yaml#L2008- 或者,声明一个
serviceMonitorSelector
指向您的ServiceMonitor
https://github.com/prometheus-community/helm-charts/blob/4164ad5fdb6a977f1aba7b65f4e65582d3081528/charts/kube-prometheus-stack/values.yaml#L1760
Prometheus Operator 和 ServiceMonitor 之间的这种额外的显式链接是有意完成的 - 这样,如果您的集群上有 2 个 Prometheus 实例(例如 Infra 和 Product),您可以区分哪些 Prometheus 将获取哪些 Pod 到其抓取配置。
从您的问题来看,听起来您已经有一个serviceMonitorSelector
基于标签的release: prometheus
标签-尝试将其添加到您的全部内容ServiceMonitor
中。
推荐阅读
- r - 写出每个股票价格的每一列 - R Studio
- python - for循环中的Scrapy请求
- c++ - 计算总和为 x 的所有整数子集(包括负数)
- sql - 为几个表之一设计外键
- ruby-on-rails - 使用 Capistrano 部署时,在任何来源中都找不到 Gem
- swift - Xcode 故事板:标签的角半径 (macOS)
- javascript - 使用 Javascript 在 Chrome 中打开一个新的选项卡式窗口
- android - 绘制数据前的 Android 错误:Invalid Region.Op - 只允许 INTERSECT 和 DIFFERENCE
- python - Pandas DataFrames If else 条件包含破折号的多列
- javascript - 访问框架 DOM chrome 扩展