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

Spring Boot中OpenTelemetry SDK基数限制(Cardinality Limit)修改咨询

解决OpenTelemetry基数限制(Cardinality Limit)警告的方法

首先明确:不能通过Resource添加aggregation_cardinality_limit参数修改基数限制,Resource仅用于设置服务元数据,和聚合基数限制的配置逻辑无关。

以下是两种正确修改基数上限的方案:

方案一:配置全局基数限制

通过注册全局View,统一设置所有指标的基数上限:

@Bean
@ConditionalOnMissingBean
public OpenTelemetry openTelemetry() {
    // 创建全局View,指定基数上限为3000
    View globalCardinalityLimitView = View.builder()
            .setInstrumentSelector(InstrumentSelector.builder().build()) // 匹配所有指标
            .setAggregation(Aggregation.defaultAggregation()
                    .withCardinalityLimit(3000))
            .build();

    return OpenTelemetrySdk.builder()
            .setMeterProvider(
                SdkMeterProvider.builder()
                    .setResource(
                        Resource.getDefault().toBuilder()
                            .put("service.name", getAppName())
                            .put("instrumentation.provider", "micrometer")
                            .build())
                    .registerView(globalCardinalityLimitView) // 注册全局View
                    .registerMetricReader(
                        PeriodicMetricReader.builder(
                                OtlpGrpcMetricExporter.builder()
                                    .setCompression("gzip")
                                    .setEndpoint(properties.getEndpoint())
                                    .addHeader("api-key", getLicenceKey())
                                    .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred())
                                    .setDefaultAggregationSelector(
                                        DefaultAggregationSelector.getDefault()
                                            .with(InstrumentType.HISTOGRAM, Aggregation.base2ExponentialBucketHistogram()))
                                    .build())
                            .setInterval(Duration.ofSeconds(properties.getInterval()))
                            .build())
                    .build())
            .build();
}

方案二:针对特定指标配置基数限制

如果仅需调整部分指标的基数,可以通过InstrumentSelector指定匹配规则:

// 创建针对特定指标的View
View specificMetricCardinalityView = View.builder()
        .setInstrumentSelector(InstrumentSelector.builder()
                .namePattern("user.*") // 匹配以user开头的指标
                .build())
        .setAggregation(Aggregation.defaultAggregation()
                .withCardinalityLimit(3000))
        .build();

随后将该View通过.registerView(specificMetricCardinalityView)注册到SdkMeterProvider中即可。

额外注意

  • 调高基数上限前需评估业务成本:过高的基数会增加New Relic的存储开销,同时提升指标传输的带宽消耗。
  • 若使用Micrometer桥接OpenTelemetry,需确认Micrometer侧无额外的基数限制配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:48:22