From 210b909031acb8d360559e26a05adc3b9f779730 Mon Sep 17 00:00:00 2001 From: Wu Sheng Date: Thu, 16 Apr 2026 14:55:07 +0800 Subject: [PATCH] Add OTLP/HTTP receiver support for traces, logs, and metrics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each existing OTLP gRPC handler now also registers an HTTP handler at startup. Supported endpoints: - POST /v1/traces (protobuf + JSON) - POST /v1/logs (protobuf + JSON) - POST /v1/metrics (protobuf + JSON) Processing logic extracted into shared processExport() methods called by both gRPC and HTTP handlers. No new config needed — HTTP endpoints are automatically available when the OTLP handler is enabled. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/skywalking.yaml | 10 +-- docs/en/changes/changes.md | 1 + docs/en/setup/backend/otlp-trace.md | 14 +++- .../aws/firehose/FirehoseHTTPHandler.java | 2 + .../otlp/OpenTelemetryLogHTTPHandler.java | 84 +++++++++++++++++++ .../otel/otlp/OpenTelemetryLogHandler.java | 21 ++++- .../otlp/OpenTelemetryMetricHTTPHandler.java | 84 +++++++++++++++++++ .../otel/otlp/OpenTelemetryMetricHandler.java | 10 +++ .../otlp/OpenTelemetryTraceHTTPHandler.java | 84 +++++++++++++++++++ .../otel/otlp/OpenTelemetryTraceHandler.java | 22 ++++- .../rest/BrowserPerfServiceHTTPHandler.java | 2 + .../event/rest/EventRestServiceHandler.java | 2 + .../rest/LogReportServiceHTTPHandler.java | 2 + .../v8/rest/ManagementServiceHTTPHandler.java | 2 + .../handler/TelegrafServiceHandler.java | 2 + .../v8/rest/TraceSegmentReportHandler.java | 2 + .../zipkin/handler/ZipkinSpanHTTPHandler.java | 2 + 17 files changed, 335 insertions(+), 11 deletions(-) create mode 100644 oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHTTPHandler.java create mode 100644 oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryMetricHTTPHandler.java create mode 100644 oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryTraceHTTPHandler.java diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml index 7e5cc26a8abd..0786f2802393 100644 --- a/.github/workflows/skywalking.yaml +++ b/.github/workflows/skywalking.yaml @@ -769,7 +769,7 @@ jobs: if: matrix.test.docker != null run: docker build -t ${{ matrix.test.docker.name }} -f ${{ matrix.test.docker.base }}/${{ matrix.test.docker.file }} ${{ matrix.test.docker.base }} - name: ${{ matrix.test.name }} - uses: apache/skywalking-infra-e2e@530f9976e4bf12b65a6604ea0efbeafabeeea2a3 + uses: apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02 with: e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }} - if: ${{ failure() }} @@ -843,7 +843,7 @@ jobs: username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: ALS ${{ matrix.storage }}, ${{ matrix.analyzer }}, istio-${{ matrix.versions.istio }}, k8s-${{ matrix.versions.kubernetes }} - uses: apache/skywalking-infra-e2e@530f9976e4bf12b65a6604ea0efbeafabeeea2a3 + uses: apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02 env: ISTIO_VERSION: ${{ matrix.versions.istio }} KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }} @@ -915,7 +915,7 @@ jobs: username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: ${{ matrix.test.name }} - uses: apache/skywalking-infra-e2e@530f9976e4bf12b65a6604ea0efbeafabeeea2a3 + uses: apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02 env: ISTIO_VERSION: ${{ matrix.versions.istio }} KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }} @@ -979,7 +979,7 @@ jobs: shell: bash run: ./mvnw -B -q -f test/e2e-v2/java-test-service/pom.xml clean package - name: Java version ${{ matrix.java-version }} - uses: apache/skywalking-infra-e2e@530f9976e4bf12b65a6604ea0efbeafabeeea2a3 + uses: apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02 env: SW_AGENT_JDK_VERSION: ${{ matrix.java-version }} with: @@ -1075,7 +1075,7 @@ jobs: fi docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml down -v - name: ${{ matrix.test.name }} - uses: apache/skywalking-infra-e2e@530f9976e4bf12b65a6604ea0efbeafabeeea2a3 + uses: apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02 with: e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }} - if: ${{ failure() }} diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 8ba337cd9711..36cd8bc13463 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -28,6 +28,7 @@ * LAL: add `sourceAttribute()` function for non-persistent OTLP resource attribute access in LAL scripts. * LAL: add `layer: auto` mode for dynamic layer assignment when `service.layer` is absent. * Add two-phase `SpanListener` SPI mechanism for extensible trace span processing. Refactor GenAI from hardcoded `SpanForward.processGenAILogic()` to `GenAISpanListener`. +* Add OTLP/HTTP receiver support for traces, logs, and metrics (`/v1/traces`, `/v1/logs`, `/v1/metrics`). Supports both `application/x-protobuf` and `application/json` content types. #### UI diff --git a/docs/en/setup/backend/otlp-trace.md b/docs/en/setup/backend/otlp-trace.md index 6afd5f984ad6..75c082bbc641 100644 --- a/docs/en/setup/backend/otlp-trace.md +++ b/docs/en/setup/backend/otlp-trace.md @@ -1,10 +1,22 @@ # OpenTelemetry Trace Format -SkyWalking can receive traces from Traces in OTLP format and convert them to Zipkin Trace format eventually. +SkyWalking can receive traces in OTLP format and convert them to Zipkin Trace format eventually. For data analysis and queries related to Zipkin Trace, please [refer to the relevant documentation](./zipkin-trace.md#zipkin-query). OTLP Trace handler references the [Zipkin Exporter in the OpenTelemetry Collector](https://opentelemetry.io/docs/specs/otel/trace/sdk_exporters/zipkin/#summary) to convert the data format. +## Supported Protocols + +Both **OTLP/gRPC** and **OTLP/HTTP** are supported for traces, logs, and metrics: + +| Signal | OTLP/gRPC (port 11800) | OTLP/HTTP (port 12800) | +|---------|------------------------------|-------------------------| +| Traces | gRPC `TraceService/Export` | `POST /v1/traces` | +| Logs | gRPC `LogsService/Export` | `POST /v1/logs` | +| Metrics | gRPC `MetricsService/Export` | `POST /v1/metrics` | + +OTLP/HTTP supports both `application/x-protobuf` and `application/json` content types. + ## Set up backend receiver 1. Make sure to enable **otlp-traces** handler in OTLP receiver of `application.yml`. diff --git a/oap-server/server-receiver-plugin/aws-firehose-receiver/src/main/java/org/apache/skywalking/oap/server/receiver/aws/firehose/FirehoseHTTPHandler.java b/oap-server/server-receiver-plugin/aws-firehose-receiver/src/main/java/org/apache/skywalking/oap/server/receiver/aws/firehose/FirehoseHTTPHandler.java index e03f9dc0c1cd..877cf55c15e8 100644 --- a/oap-server/server-receiver-plugin/aws-firehose-receiver/src/main/java/org/apache/skywalking/oap/server/receiver/aws/firehose/FirehoseHTTPHandler.java +++ b/oap-server/server-receiver-plugin/aws-firehose-receiver/src/main/java/org/apache/skywalking/oap/server/receiver/aws/firehose/FirehoseHTTPHandler.java @@ -19,6 +19,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.linecorp.armeria.common.HttpResponse; +import com.linecorp.armeria.server.annotation.Blocking; import com.linecorp.armeria.common.HttpStatus; import com.linecorp.armeria.server.annotation.ConsumesJson; import com.linecorp.armeria.server.annotation.Default; @@ -35,6 +36,7 @@ @Slf4j @AllArgsConstructor +@Blocking public class FirehoseHTTPHandler { private final OpenTelemetryMetricRequestProcessor openTelemetryMetricRequestProcessor; private final String firehoseAccessKey; diff --git a/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHTTPHandler.java b/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHTTPHandler.java new file mode 100644 index 000000000000..8d3122bb7b00 --- /dev/null +++ b/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHTTPHandler.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.skywalking.oap.server.receiver.otel.otlp; + +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.util.JsonFormat; +import com.linecorp.armeria.common.AggregatedHttpRequest; +import com.linecorp.armeria.common.HttpResponse; +import com.linecorp.armeria.common.HttpStatus; +import com.linecorp.armeria.common.MediaType; +import com.linecorp.armeria.server.annotation.Blocking; +import com.linecorp.armeria.server.annotation.Consumes; +import com.linecorp.armeria.server.annotation.ConsumesJson; +import com.linecorp.armeria.server.annotation.Post; +import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; +import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * OTLP/HTTP handler for log data. Supports both protobuf and JSON encoding. + * Delegates processing to {@link OpenTelemetryLogHandler#processExport}. + */ +@Slf4j +@RequiredArgsConstructor +public class OpenTelemetryLogHTTPHandler { + private static final byte[] EMPTY_RESPONSE = + ExportLogsServiceResponse.getDefaultInstance().toByteArray(); + + private final OpenTelemetryLogHandler logHandler; + + @Blocking + @Post("/v1/logs") + @Consumes("application/x-protobuf") + public HttpResponse collectProtobuf(AggregatedHttpRequest request) { + try { + final ExportLogsServiceRequest exportRequest = + ExportLogsServiceRequest.parseFrom(request.content().array()); + logHandler.processExport(exportRequest); + return HttpResponse.of(HttpStatus.OK, MediaType.PROTOBUF, EMPTY_RESPONSE); + } catch (InvalidProtocolBufferException e) { + log.warn("Failed to parse OTLP/HTTP log request", e); + return HttpResponse.of(HttpStatus.BAD_REQUEST); + } catch (Exception e) { + log.error("Failed to process OTLP/HTTP log request", e); + return HttpResponse.of(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Blocking + @Post("/v1/logs") + @ConsumesJson + public HttpResponse collectJson(AggregatedHttpRequest request) { + try { + final ExportLogsServiceRequest.Builder builder = + ExportLogsServiceRequest.newBuilder(); + JsonFormat.parser().ignoringUnknownFields().merge( + request.contentUtf8(), builder); + logHandler.processExport(builder.build()); + return HttpResponse.of(HttpStatus.OK, MediaType.JSON_UTF_8, "{}"); + } catch (InvalidProtocolBufferException e) { + log.warn("Failed to parse OTLP/HTTP JSON log request", e); + return HttpResponse.of(HttpStatus.BAD_REQUEST); + } catch (Exception e) { + log.error("Failed to process OTLP/HTTP JSON log request", e); + return HttpResponse.of(HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHandler.java b/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHandler.java index 5f7983083dd7..4f7ae66b0e61 100644 --- a/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHandler.java +++ b/oap-server/server-receiver-plugin/otel-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/otel/otlp/OpenTelemetryLogHandler.java @@ -36,7 +36,10 @@ import org.apache.skywalking.oap.server.core.source.LogMetadataUtils; import org.apache.skywalking.oap.log.analyzer.v2.module.LogAnalyzerModule; import org.apache.skywalking.oap.log.analyzer.v2.provider.log.ILogAnalyzerService; +import com.linecorp.armeria.common.HttpMethod; +import java.util.Collections; import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister; +import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.module.ModuleStartException; import org.apache.skywalking.oap.server.receiver.otel.Handler; @@ -88,10 +91,26 @@ public void active() throws ModuleStartException { .provider() .getService(GRPCHandlerRegister.class); grpcHandlerRegister.addHandler(this); + + HTTPHandlerRegister httpHandlerRegister = manager.find(SharingServerModule.NAME) + .provider() + .getService(HTTPHandlerRegister.class); + httpHandlerRegister.addHandler( + new OpenTelemetryLogHTTPHandler(this), + Collections.singletonList(HttpMethod.POST)); } @Override public void export(ExportLogsServiceRequest request, StreamObserver responseObserver) { + processExport(request); + responseObserver.onNext(ExportLogsServiceResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + /** + * Process an OTLP log export request. Shared by both gRPC and HTTP handlers. + */ + void processExport(ExportLogsServiceRequest request) { request.getResourceLogsList().forEach(resourceLogs -> { final var resource = resourceLogs.getResource(); final var attributes = resource @@ -122,8 +141,6 @@ public void export(ExportLogsServiceRequest request, StreamObserver responseObserver) { + processExport(request); + responseObserver.onNext(ExportTraceServiceResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + /** + * Process an OTLP trace export request. Shared by both gRPC and HTTP handlers. + */ + void processExport(ExportTraceServiceRequest request) { final ArrayList result = new ArrayList<>(); try (final var unused = getProcessHistogram().createTimer()) { @@ -167,9 +186,6 @@ public void export(ExportTraceServiceRequest request, StreamObserver resourceTags) { diff --git a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java index 0a23fdf8d478..fd3c512c9a6b 100644 --- a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.receiver.browser.provider.handler.rest; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.common.v3.Commands; @@ -46,6 +47,7 @@ * Collect and process the error log */ @Slf4j +@Blocking public class BrowserPerfServiceHTTPHandler { private final ModuleManager moduleManager; private final BrowserServiceModuleConfig config; diff --git a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java index 13ca96bf1920..6524c2c4d68d 100644 --- a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.receiver.event.rest; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import java.util.List; @@ -35,6 +36,7 @@ import org.apache.skywalking.oap.server.telemetry.api.MetricsTag; @Slf4j +@Blocking public class EventRestServiceHandler { private final HistogramMetrics histogram; diff --git a/oap-server/server-receiver-plugin/skywalking-log-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/log/provider/handler/rest/LogReportServiceHTTPHandler.java b/oap-server/server-receiver-plugin/skywalking-log-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/log/provider/handler/rest/LogReportServiceHTTPHandler.java index bcb64282ecf6..5dd32f658523 100644 --- a/oap-server/server-receiver-plugin/skywalking-log-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/log/provider/handler/rest/LogReportServiceHTTPHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-log-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/log/provider/handler/rest/LogReportServiceHTTPHandler.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.receiver.log.provider.handler.rest; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.common.v3.Commands; @@ -33,6 +34,7 @@ import org.apache.skywalking.oap.server.telemetry.api.MetricsTag; @Slf4j +@Blocking public class LogReportServiceHTTPHandler { private final HistogramMetrics histogram; diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceHTTPHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceHTTPHandler.java index 066b0bec0314..4566d837bdee 100644 --- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceHTTPHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/rest/ManagementServiceHTTPHandler.java @@ -19,12 +19,14 @@ package org.apache.skywalking.oap.server.receiver.register.provider.handler.v8.rest; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import org.apache.skywalking.apm.network.common.v3.Commands; import org.apache.skywalking.apm.network.management.v3.InstancePingPkg; import org.apache.skywalking.apm.network.management.v3.InstanceProperties; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.receiver.register.provider.handler.v8.ManagementServiceHandler; +@Blocking public class ManagementServiceHTTPHandler { private final ManagementServiceHandler handler; diff --git a/oap-server/server-receiver-plugin/skywalking-telegraf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/telegraf/provider/handler/TelegrafServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-telegraf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/telegraf/provider/handler/TelegrafServiceHandler.java index 0006b0be269d..4d61bb07deb9 100644 --- a/oap-server/server-receiver-plugin/skywalking-telegraf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/telegraf/provider/handler/TelegrafServiceHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-telegraf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/telegraf/provider/handler/TelegrafServiceHandler.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableMap; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import com.linecorp.armeria.server.annotation.RequestConverter; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.common.v3.Commands; @@ -44,6 +45,7 @@ import java.util.stream.Collectors; @Slf4j +@Blocking public class TelegrafServiceHandler { private final HistogramMetrics histogram; diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/handler/v8/rest/TraceSegmentReportHandler.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/handler/v8/rest/TraceSegmentReportHandler.java index b64106babceb..eac0449d08a4 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/handler/v8/rest/TraceSegmentReportHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/handler/v8/rest/TraceSegmentReportHandler.java @@ -19,6 +19,7 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.handler.v8.rest; import com.linecorp.armeria.server.annotation.Post; +import com.linecorp.armeria.server.annotation.Blocking; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.common.v3.Commands; @@ -33,6 +34,7 @@ import org.apache.skywalking.oap.server.telemetry.api.MetricsTag; @Slf4j +@Blocking public class TraceSegmentReportHandler { private final ISegmentParserService segmentParserService; private final HistogramMetrics histogram; diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/handler/ZipkinSpanHTTPHandler.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/handler/ZipkinSpanHTTPHandler.java index fabed97d09e1..75ec95292880 100644 --- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/handler/ZipkinSpanHTTPHandler.java +++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/handler/ZipkinSpanHTTPHandler.java @@ -19,6 +19,7 @@ package org.apache.skywalking.oap.server.receiver.zipkin.handler; import com.linecorp.armeria.common.HttpData; +import com.linecorp.armeria.server.annotation.Blocking; import com.linecorp.armeria.common.HttpRequest; import com.linecorp.armeria.common.HttpResponse; import com.linecorp.armeria.common.HttpStatus; @@ -41,6 +42,7 @@ import static java.util.Objects.nonNull; @Slf4j +@Blocking public class ZipkinSpanHTTPHandler { private final HistogramMetrics histogram; private final CounterMetrics errorCounter;