Quarkus Native结合OpenTelemetry对接Skywalking无数据显示求助
解决方案:Quarkus Native + OpenTelemetry + Skywalking 链路追踪适配
问题背景
当前在Kubernetes环境下开展POC,需实现Quarkus Native应用通过OpenTelemetry将链路追踪与指标数据上报至Skywalking。已验证Quarkus Native对接Jaeger正常,但Skywalking Java Agent不支持GraalVM,因此采用OTel Collector中转方案,目前Skywalking UI无任何数据展示。
关键问题排查与修复步骤
1. 完善Quarkus Native的OpenTelemetry配置
你的application.properties缺少服务名称和采样策略配置,这会导致Skywalking无法识别服务或无数据上报:
# 必须配置服务名称,Skywalking依赖该字段识别服务实例 quarkus.otel.service.name=your-quarkus-native-service quarkus.otel.exporter.otlp.traces.endpoint=http://skywalking-otel-collector-service.default.svc.cluster.local:4317 quarkus.otel.traces.enabled=true quarkus.otel.exporter.otlp.enabled=true # 强制开启全采样,确保所有请求都生成追踪数据 quarkus.otel.traces.sampler=always_on # 保留原有访问日志配置 quarkus.http.access-log.pattern="...traceId=%{X,traceId} spanId=%{X,spanId}"
2. 调整OpenTelemetry Collector配置
Skywalking OAP对标准OTel数据的兼容性有限,需改用Skywalking专属Exporter确保数据格式适配(你当前使用的otel/opentelemetry-collector-contrib镜像已支持该Exporter):
修改ConfigMap中的Exporter配置
替换原otlp exporter为skywalking exporter:
exporters: logging: loglevel: info # 使用Skywalking专属Exporter替代标准OTLP Exporter skywalking: endpoint: "skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800" service_name: "otel-collector"
调整Pipeline配置
确保追踪、指标管道使用skywalking exporter:
service: extensions: [health_check] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [logging, skywalking] traces: receivers: [otlp] processors: [batch] exporters: [logging, skywalking] logs: receivers: [otlp] processors: [batch] exporters: [skywalking]
3. 启用Skywalking OAP的OTLP Receiver
通过Helm安装Skywalking时,默认未开启OTLP Receiver,需添加参数启用:
helm install "${SKYWALKING_RELEASE_NAME}" \ skywalking-helm \ --version "${SKYWALKING_RELEASE_VERSION}" \ -n "${SKYWALKING_RELEASE_NAMESPACE}" \ --set oap.image.tag=9.2.0 \ --set oap.storageType=elasticsearch \ --set ui.image.tag=9.2.0 \ # 开启OTLP Receiver,接收Collector转发的数据 --set oap.receiver.otlp.enabled=true
4. 连通性验证
- Quarkus应用到OTel Collector:在Quarkus Pod内执行
curl http://skywalking-otel-collector-service.default.svc.cluster.local:4318/v1/traces,确认网络连通 - OTel Collector到Skywalking OAP:在Collector Pod内执行
telnet skywalking-skywalking-helm-oap.skywalking.svc.cluster.local 11800,确认端口可达 - 查看Collector日志:执行
kubectl logs -l name=skywalking-otel-collector -n default,检查是否有数据上报日志或错误信息
5. 重新构建部署Quarkus Native应用
修改配置后重新构建原生镜像并部署:
./mvnw package -Dnative -Dquarkus.native.container-build=true
验证结果
完成上述步骤后,访问Skywalking UI的「服务」菜单即可看到配置的your-quarkus-native-service,调用应用接口后可查看完整链路追踪数据与指标。
内容的提问来源于stack exchange,提问作者user1886498
相关产品推荐
相关产品推荐

