开放遥测 - 使用 OpenTelemetrySdk 将应用程序日志推送到 OTEL 收集器

问题描述 投票:0回答:1

我正在尝试通过以下方式将数据推送到OTEL收集器。

@Configuration
public class OpenTelemetryLogConfiguration {


    @Bean
    public OpenTelemetrySdk initializeOpenTelemetryConfig() {

        BatchLogRecordProcessor processor = BatchLogRecordProcessor.builder(
                OtlpHttpLogRecordExporter.builder()
                    .setEndpoint(String.valueOf(URI.create("http://10.20.36.68:4317/v1/logs"))) 
                    .build())
            .build();

        OpenTelemetrySdk sdk = OpenTelemetrySdk.builder()
            .setLoggerProvider(
                SdkLoggerProvider.builder()
                    .addLogRecordProcessor(processor)
                    .build())
            .build();

        // Add hook to close SDK, which flushes logs
        Runtime.getRuntime().addShutdownHook(new Thread(sdk::close));
        io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender.install(
            sdk);
        return sdk;
    }

}

pom.xml 有

<dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-logback-appender-1.0</artifactId>
            <version>2.3.0-alpha</version>
        </dependency>
       <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-otlp-logs</artifactId>
            <version>1.26.0-alpha</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-otlp-http-logs</artifactId>
            <version>1.14.0-alpha</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-common</artifactId>
            <version>1.32.0</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-sender-okhttp</artifactId>
            <version>1.37.0</version> </dependency>
        <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-sender-jdk</artifactId>
            <version>1.37.0-alpha</version>
        </dependency>

logback-spring.xml有

<appender name="OpenTelemetry"
              class="io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender">
        <captureExperimentalAttributes>false</captureExperimentalAttributes>
        <captureCodeAttributes>true</captureCodeAttributes>
        <captureMarkerAttribute>true</captureMarkerAttribute>
        <captureKeyValuePairAttributes>true</captureKeyValuePairAttributes>
        <captureLoggerContext>true</captureLoggerContext>
        <captureMdcAttributes>*</captureMdcAttributes>
    </appender>

问题陈述: 运行应用程序时,我得到了

Caused by: java.lang.NoClassDefFoundError: io/opentelemetry/exporter/internal/okhttp/OkHttpExporterBuilder
    at io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder.<init>(OtlpHttpLogRecordExporterBuilder.java:29)
    at io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter.builder(OtlpHttpLogRecordExporter.java:44)
    at com.se.cc.cwp.api.config.OpenTelemetryLogConfiguration.initializeOpenTelemetryConfig(OpenTelemetryLogConfiguration.java:68)

尝试过的选项:

我的代码尝试使用 OtlpHttpLogRecordExporter 类,该类可能来自 opentelemetry-exporter-otlp-logs 库(版本 1.26.0-alpha)。 但是,代码还尝试访问 OkHttpExporterBuilder 类,该类是 opentelemetry-exporter-common 中存在的内部实现细节(版本可能从错误消息中推断出来)。 这些库之间的类版本不兼容导致 ClassNotFoundException。因此,我尝试使用不同版本的 opentelemetry-exporter-otlp-logs 和 opentelemetry-exporter-common。没有运气。

任何专家指导都会有帮助。

java spring-boot maven open-telemetry open-telemetry-collector
1个回答
0
投票

如下修改依赖详细信息后,应用程序可以将日志推送到Otel收集器。

<dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk</artifactId>
            <version>1.37.0</version>
        </dependency>

        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-api</artifactId>
            <version>1.37.0</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-logback-appender-1.0</artifactId>
            <version>2.3.0-alpha</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-otlp</artifactId>
            <version>1.37.0</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporters-logging</artifactId>
            <version>0.9.1</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-otlp-http-logs</artifactId>
            <version>1.14.0-alpha</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-sender-okhttp</artifactId>
            <version>1.37.0</version> </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-sender-jdk</artifactId>
            <version>1.37.0-alpha</version>
        </dependency>
  

我在端点中将端口更改为 4318 - http://10.20.36.68:4317/v1/logs

© www.soinside.com 2019 - 2024. All rights reserved.