You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus Operator中用自定义指标分片并指定抓取指标

Prometheus Operator分片指定抓取指标配置方法

Prometheus Operator的分片默认是基于抓取目标的哈希值分配负载,每个shard负责一部分目标的抓取。如果要实现按指标维度分片,可以通过以下两种方式配置:

1. 用shardSelector绑定特定ServiceMonitor

通过给不同的ServiceMonitor打专属shard标签,让每个Prometheus shard只抓取对应标签的ServiceMonitor,从而实现不同shard处理不同指标集:

步骤:

  • 拆分指标到不同的ServiceMonitor:比如把前端核心指标和前端日志指标分别定义为两个ServiceMonitor,各自配置metricRelabelings过滤出目标指标。
  • 给ServiceMonitor添加shard标签:比如给核心指标的ServiceMonitor加shard: "0",日志指标的加shard: "1"。
  • 修改Prometheus清单,添加shardSelector字段,每个shard实例会自动匹配对应标签的ServiceMonitor:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  labels:
    prometheus: prometheus
  name: prometheus
  namespace: default
spec:
  serviceAccountName: prometheus
  replicas: 2
  shards: 2
  # 每个shard会匹配对应标签的ServiceMonitor
  shardSelector:
    matchExpressions:
      - key: shard
        operator: In
        values: ["{{ .Shard }}"]
  serviceMonitorSelector:
    matchLabels:
      team: frontend

对应的ServiceMonitor示例(shard=0):

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    team: frontend
    shard: "0"
  name: frontend-core-metrics
  namespace: default
spec:
  selector:
    matchLabels:
      app: frontend
  endpoints:
  - port: metrics
    metricRelabelings:
    # 只保留核心指标
    - sourceLabels: [__name__]
      regex: 'frontend_requests_total|frontend_latency_seconds'
      action: keep

2. 基于指标哈希的动态分片过滤

如果不想拆分ServiceMonitor,可以利用Prometheus内置的__shard__和__num_shards__标签,在抓取阶段对指标做哈希取模,只保留当前shard负责的指标:

在ServiceMonitor的endpoints.relabelings中添加配置:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    team: frontend
  name: frontend-all-metrics
  namespace: default
spec:
  selector:
    matchLabels:
      app: frontend
  endpoints:
  - port: metrics
    relabelings:
    # 基于指标名称哈希,分配到对应shard
    - sourceLabels: [__name__, __shard__]
      action: keep
      regex: '.*;(\d+)'
      modulus: '{{ .NumShards }}'
      targetLabel: __tmp_shard
    - sourceLabels: [__tmp_shard]
      regex: '{{ .Shard }}'
      action: keep

这种方式会对每个指标名称做哈希,取模后等于当前shard编号的才会被保留,实现同一目标下的指标分片。

注意事项

  • shardSelector是Prometheus Operator v0.40+版本支持的特性,确保你的Operator版本符合要求。
  • 基于指标哈希的分片可能会导致指标分布不均,建议提前测试指标哈希后的分配情况。

内容的提问来源于stack exchange,提问作者odc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:50:11