New Relic OpenTelemetry集成Micrometer错误率仪表盘查询异常
Micrometer与New Relic OpenTelemetry集成错误率异常问题
我尝试将Micrometer与New Relic OpenTelemetry集成,按照归档说明完成配置(依赖及代码配置见下文)。调用服务后发现,无错误响应时错误率数值却与吞吐量一致。分析错误率查询语句发现,查询判断exception != 'None',但服务发送的正常请求中exception值为'none',疑惑是配置有误还是仪表盘存在bug。
依赖配置
platform("io.opentelemetry:opentelemetry-bom:1.28.0") implementation("io.opentelemetry:opentelemetry-api") implementation("io.opentelemetry:opentelemetry-sdk") implementation("io.opentelemetry:opentelemetry-exporter-otlp") implementation("io.opentelemetry:opentelemetry-exporter-prometheus:1.28.0-alpha") implementation("io.opentelemetry:opentelemetry-micrometer1-shim:1.17.0-alpha") implementation("io.opentelemetry.instrumentation:opentelemetry-micrometer-1.5:1.28.0-alpha")
代码配置
import io.micrometer.core.instrument.MeterRegistry import io.opentelemetry.api.OpenTelemetry import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter import io.opentelemetry.micrometer1shim.OpenTelemetryMeterRegistry import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.sdk.metrics.SdkMeterProvider import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader import io.opentelemetry.sdk.resources.Resource import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import java.time.Duration @Configuration(proxyBeanMethods = false) class MetricsConfiguration { @Bean fun openTelemetry( @Value("\${newrelic.name}") serviceName: String, @Value("\${newrelic.licence}") licenceKey: String, ): OpenTelemetry { return OpenTelemetrySdk.builder() .setMeterProvider( SdkMeterProvider.builder() .setResource( Resource.getDefault().toBuilder() .put( "service.name", serviceName, ) .put("instrumentation.provider", "micrometer") .build(), ) .registerMetricReader( PeriodicMetricReader.builder( OtlpGrpcMetricExporter.builder() .setEndpoint("https://otlp.nr-data.net:4317") .addHeader("api-key", licenceKey) .setAggregationTemporalitySelector( AggregationTemporalitySelector.deltaPreferred(), ) .build(), ) .setInterval(Duration.ofSeconds(MICROMETER_COLLECTION_INTERVAL)) .build(), ) .build(), ) .build() } @Bean fun meterRegistry(openTelemetry: OpenTelemetry): MeterRegistry { return OpenTelemetryMeterRegistry.builder(openTelemetry).build() } companion object { const val MICROMETER_COLLECTION_INTERVAL = 60L } }
错误率查询语句
FROM Metric SELECT count(http.server.requests.active.duration) AS 'Errored requests' WHERE entity.guid = '...' AND exception is not null and exception != 'None' TIMESERIES
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

