使用Spring Boot 3.4.2,我想使用弹簧执行器配置以OpentElemetry格式配置日志导出。示例属性:
management.otlp.logging.export.enabled=true
management.otlp.logging.endpoint=http://localhost:4318/v1/logs
management.otlp.logging.headers.apikey=apikey
management.otlp.logging.transport=http
management.otlp.logging.compression=gzip
tried添加Maven依赖性:
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>${opentelemetry.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
<version>1.28.0-alpha</version>
</dependency>
logback.xml示例:
<configuration scan="true" scanPeriod="30 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", UTC} [%thread] %-5level %logger{36} - %msg %replace(%replace(%ex){'[\r\n]+', ''}){'[\t]+', ' 	'}%nopex%n</pattern>
</encoder>
</appender>
<appender name="otel" class="io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender">
<captureExperimentalAttributes>true</captureExperimentalAttributes>
<captureKeyValuePairAttributes>true</captureKeyValuePairAttributes>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="otel" />
</root>
</configuration>
但指出工作或配置未设置为otlphttplogrecordexporter。还有什么需要配置或我做错了什么?
io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:2.12.0
在application.yml中使用这些设置
otel:
exporter:
otlp:
endpoint: http://localhost:8080
headers:
apikey: apikey
traces:
exporter: none
metrics:
exporter: none
management:
otlp:
logging:
export:
enabled: true
和此控制器模拟端点
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
@RestController
@RequestMapping("/v1")
public class OtlpEmulationController {
private static final Logger logger = LoggerFactory.getLogger(OtlpEmulationController.class);
@PostMapping("/logs")
public ResponseEntity<Void> receiveLogs(
@RequestBody String logData,
@RequestHeader String apikey) {
// logger.info("Received log data: {}", logData);
// Respond with success
return ResponseEntity.noContent().build();
}
// optional, will only be invoked when removing traces.exporter=none
@PostMapping("/traces")
public ResponseEntity<String> receiveTraces(@RequestBody String tracesPayload) {
return ResponseEntity.ok("Successfully received traces");
}
}
我们可以通过请求例如/actuator/health/lices.