我正在尝试通过以下方式将数据推送到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。没有运气。
任何专家指导都会有帮助。
如下修改依赖详细信息后,应用程序可以将日志推送到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