OpenTelemetry指标过滤器未按预期工作,求助解决配置问题
问题分析与解决方案
你遇到的核心问题是OpenTelemetry(OTel)对Prometheus格式直方图指标的转换逻辑导致过滤器规则未生效:
当OTel的Prometheus Receiver采集kubelet的Prometheus指标时,会将kubelet_runtime_operations_duration_seconds_bucket、kubelet_runtime_operations_duration_seconds_sum、kubelet_runtime_operations_duration_seconds_total合并为一个单一的OTel Histogram类型指标,指标名称为kubelet_runtime_operations_duration_seconds。此时你原有的按_bucket后缀匹配的规则无法命中这个合并后的指标,导致整个直方图的所有数据点(bucket、sum、total)都被保留下来。
下面提供两种可行的解决方案:
方案一:在采集阶段直接过滤(推荐)
在kubelet的Prometheus采集配置中添加metric_relabel_configs,在数据进入OTel之前就过滤掉不需要的指标,减少后续处理压力:
job_name: kubelet scrape_interval: 1m scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node api_server: null relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] action: replace target_label: __metrics_path__ regex: (ip-.*) replacement: /api/v1/nodes/$${1}/proxy/metrics # 新增指标过滤规则 metric_relabel_configs: # 保留指定的指标,用|分隔多个指标名 - action: keep regex: ^(otelcol_receiver_accepted_metric_points_total|jvm_memory_used_bytes|jvm_threads_states_threads|container_cpu_usage_seconds_total|kubelet_runtime_operations_duration_seconds_bucket)$ source_labels: [__name__]
这个配置会直接丢弃所有不在正则匹配范围内的指标,确保只有你需要的_bucket指标进入OTel。
方案二:在OTel Filter Processor中细化过滤
如果你必须在OTel侧处理,需要针对合并后的Histogram指标,过滤只保留其bucket数据点。使用OTel Filter Processor的data_points规则实现:
filter/metrics: error_mode: ignore metrics: include: match_type: regexp metric_names: - otelcol_receiver_accepted_metric_points_total$ - jvm_memory_used_bytes$ - jvm_threads_states_threads$ - container_cpu_usage_seconds_total$ - kubelet_runtime_operations_duration_seconds$ # 针对Histogram指标,只保留bucket数据点 data_points: include: - metric_names: [kubelet_runtime_operations_duration_seconds] # 直方图的bucket数据点带有le标签,通过标签匹配过滤 attributes: - key: le match_type: regexp value: .+
补充说明:
- 确保你的OTel Collector版本足够新(v0.70+),
data_points过滤功能在旧版本中可能不支持。 - 检查你的OTel Pipeline配置,确认
filter/metrics处理器已正确添加到metrics pipeline中:service: pipelines: metrics: receivers: [prometheus] processors: [filter/metrics] exporters: [prometheus, otlp]
内容的提问来源于stack exchange,提问作者Prateek patel
相关产品推荐
相关产品推荐

