OpenTelemetry接收器无法采集Quarkus Java应用日志求助
OpenShift中Quarkus应用OTel自动插桩日志采集失败排查
在OpenShift部署Quarkus应用,添加OpenTelemetry(OTel)自动插桩注解后,Metrics和Traces可正常采集,但Logs无法获取。以下是已使用的配置及排查解决步骤:
已执行操作与配置
应用插桩注解命令
oc patch deployment.apps/quarkus-app -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'
OTel自动插桩(Instrumentation)配置
apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: demo-autoinst namespace: opentele spec: propagators: - tracecontext - baggage - b3 sampler: type: parentbased_traceidratio argument: "1" java: image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest env: - name: OTEL_EXPORTER_OTLP_ENDPOINT value: "http://url:4317"
OTel Collector配置
apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: demo namespace: opentele # 修正原配置中的namepsace拼写错误 spec: image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.78.0 config: | receivers: otlp: protocols: grpc: http: processors: batch: exporters: logging: loglevel: info kafka/logs: brokers: - url:9092 topic: all-logs-1 encoding: otlp_json protocol_version: 3.4.0 service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [...] metrics: receivers: [otlp] processors: [batch] exporters: [...] logs: receivers: [otlp] processors: [batch] exporters: [logging,kafka/logs] mode: deployment resources: {} targetAllocator: {}
排查与解决步骤
1. 启用自动插桩的日志采集功能
Java自动插桩默认不开启日志采集,需在Instrumentation配置中添加日志相关环境变量,适配Quarkus默认的logback日志框架:
java: image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest env: - name: OTEL_EXPORTER_OTLP_ENDPOINT value: "http://url:4317" - name: OTEL_INSTRUMENTATION_LOGGING_ENABLED value: "true" - name: OTEL_INSTRUMENTATION_LOGBACK_ENABLED value: "true" - name: OTEL_LOGS_EXPORTER value: "otlp"
2. 修正Collector配置错误
- 修复
metadata中的namepsace拼写错误为namespace,避免Collector部署到错误命名空间; - 修正Kafka exporter的缩进格式,确保
brokers等字段属于kafka/logs节点(原配置缩进错误会导致Collector启动失败)。
3. 验证命名空间匹配
确保Instrumentation能覆盖应用所在命名空间,若应用与Instrumentation不在同一命名空间,需在Instrumentation的spec中添加:
spec: targetNamespaces: - <你的应用命名空间>
4. 检查网络连通性
在Quarkus应用Pod内测试Collector的OTLP端点可达性:
curl -v http://demo.opentele.svc.cluster.local:4317
确认GRPC(4317)或HTTP(4318)端口可正常访问。
5. 查看Pod日志排查问题
- 查看Collector日志,确认是否有日志接收记录:
oc logs -n opentele deployment/demo - 查看Quarkus应用日志,检查OTel日志采集相关报错:
oc logs -n <你的应用命名空间> deployment/quarkus-app
内容的提问来源于stack exchange,提问作者Mugi Coder
相关产品推荐
相关产品推荐

