You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2026/03/16 02:44:56 UTC
(skywalking-graalvm-distro) 01/01: Add TraceQL module and PromQL/LogQL/TraceQL e2e tests
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch feature/add-traceql-promql-logql-e2e
in repository https://gitbox.apache.org/repos/asf/skywalking-graalvm-distro.git
commit cc6f71ca96be87af9ffe0f063d1cbd9322585b35
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Mon Mar 16 10:44:39 2026 +0800
Add TraceQL module and PromQL/LogQL/TraceQL e2e tests
- Integrate TraceQL module (Tempo-compatible trace query API) into the
distro: application.yml, GraalVMOAPServerStartUp, POM dependencies,
precompiler handler scan, distro-policy docs.
- Fix Armeria handler scan to use getMethods() instead of
getDeclaredMethods() so handlers with inherited @Get/@Path annotations
(like TraceQL) are detected for reflect-config.
- Add 3 new e2e test cases: PromQL, LogQL, TraceQL.
- Update changes/changes.md with 0.2.0 entries.
---
.github/workflows/ci.yml | 6 +
build-tools/precompiler/pom.xml | 4 +
.../server/buildtools/precompiler/Precompiler.java | 4 +-
changes/changes.md | 11 ++
docs/distro-policy.md | 4 +-
oap-graalvm-server/pom.xml | 4 +
.../server/graalvm/GraalVMOAPServerStartUp.java | 5 +
.../src/main/resources/application.yml | 12 ++
pom.xml | 5 +
test/e2e/cases/logql/docker-compose.yml | 162 +++++++++++++++++++++
test/e2e/cases/logql/e2e.yaml | 51 +++++++
test/e2e/cases/promql/docker-compose.yml | 130 +++++++++++++++++
test/e2e/cases/promql/e2e.yaml | 51 +++++++
test/e2e/cases/traceql/docker-compose.yml | 74 ++++++++++
test/e2e/cases/traceql/e2e.yaml | 48 ++++++
15 files changed, 567 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a86a61a..1879cc3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -321,6 +321,12 @@ jobs:
case: vm-zabbix
- name: Zipkin
case: zipkin
+ - name: PromQL
+ case: promql
+ - name: LogQL
+ case: logql
+ - name: TraceQL
+ case: traceql
- name: Baseline
case: baseline
steps:
diff --git a/build-tools/precompiler/pom.xml b/build-tools/precompiler/pom.xml
index 816c205..c520b68 100644
--- a/build-tools/precompiler/pom.xml
+++ b/build-tools/precompiler/pom.xml
@@ -111,6 +111,10 @@
<groupId>org.apache.skywalking</groupId>
<artifactId>logql-plugin</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>traceql-plugin</artifactId>
+ </dependency>
<!-- Health checker (HealthCheckerHttpService) -->
<dependency>
diff --git a/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java b/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
index 25e4878..a1bfc56 100644
--- a/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
+++ b/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
@@ -837,8 +837,8 @@ public class Precompiler {
if (aClass.isInterface() || Modifier.isAbstract(aClass.getModifiers())) {
continue;
}
- // Check if any method has Armeria routing annotations
- for (Method method : aClass.getDeclaredMethods()) {
+ // Check if any method (including inherited) has Armeria routing annotations
+ for (Method method : aClass.getMethods()) {
if ((postAnno != null && method.isAnnotationPresent(postAnno))
|| (getAnno != null && method.isAnnotationPresent(getAnno))
|| (pathAnno != null && method.isAnnotationPresent(pathAnno))) {
diff --git a/changes/changes.md b/changes/changes.md
index 9836004..a31ea23 100644
--- a/changes/changes.md
+++ b/changes/changes.md
@@ -32,16 +32,27 @@ Upgrade to the latest Apache SkyWalking OAP server, with documentation restructu
- `release/full-release.sh`: end-to-end release script.
- Generate vote email template with GPG signer info and submodule commit IDs.
+### New Module
+
+- Add TraceQL module (Tempo-compatible trace query API) with Zipkin and SkyWalking datasource support.
+
### Testing
- Replacement class staleness detector: add auto-discovery coverage check for untracked same-FQCN replacements in `oap-libs-for-graalvm/`.
### E2E Tests
+- Add PromQL e2e test case (Prometheus-compatible query API).
+- Add LogQL e2e test case (Loki-compatible log query API).
+- Add TraceQL e2e test case (Tempo-compatible trace query API with Zipkin datasource).
- Update BanyanDB to `e1ba421` (fixes Zipkin `minDuration` trace query).
- Bump Istio to 1.28.0.
- Add Baseline e2e test case.
+### Build
+
+- Fix Armeria handler scan to detect inherited `@Get`/`@Path` annotations (precompiler).
+
## 0.1.0
### Highlights
diff --git a/docs/distro-policy.md b/docs/distro-policy.md
index 6168eb4..dcbd9e5 100644
--- a/docs/distro-policy.md
+++ b/docs/distro-policy.md
@@ -18,7 +18,7 @@ Build and package Apache SkyWalking OAP server as a GraalVM native image on JDK
| **Configuration** | ConfigurationModule | Kubernetes |
| **Receivers** | SharingServerModule, TraceModule, JVMModule, MeterReceiverModule, LogModule, RegisterModule, ProfileModule, BrowserModule, EventModule, OtelMetricReceiverModule, MeshReceiverModule, EnvoyMetricReceiverModule, ZipkinReceiverModule, ZabbixReceiverModule, TelegrafReceiverModule, AWSFirehoseReceiverModule, CiliumFetcherModule, EBPFReceiverModule, AsyncProfilerModule, PprofModule, CLRModule, ConfigurationDiscoveryModule, KafkaFetcherModule | default providers |
| **Analyzers** | AnalyzerModule, LogAnalyzerModule, EventAnalyzerModule | default providers |
-| **Query** | QueryModule (GraphQL), PromQLModule, LogQLModule, ZipkinQueryModule, StatusQueryModule | default providers |
+| **Query** | QueryModule (GraphQL), PromQLModule, LogQLModule, TraceQLModule, ZipkinQueryModule, StatusQueryModule | default providers |
| **Alarm** | AlarmModule | default |
| **Telemetry** | TelemetryModule | Prometheus |
| **Other** | ExporterModule, HealthCheckerModule, AIPipelineModule | default providers |
@@ -289,7 +289,7 @@ All four DSL compilers (OAL/MAL/LAL/Hierarchy) use ANTLR4 + Javassist v2 engines
### Remaining Verification
- Verify all receiver plugins work (gRPC + HTTP endpoints)
-- Verify all query APIs work (GraphQL, PromQL, LogQL, Zipkin)
+- Verify all query APIs work (GraphQL, PromQL, LogQL, TraceQL, Zipkin)
- Verify cluster mode (K8s)
- Verify alarm module
- Performance benchmarking vs JVM
diff --git a/oap-graalvm-server/pom.xml b/oap-graalvm-server/pom.xml
index ef5ed9b..ec00bdc 100644
--- a/oap-graalvm-server/pom.xml
+++ b/oap-graalvm-server/pom.xml
@@ -316,6 +316,10 @@
<groupId>org.apache.skywalking</groupId>
<artifactId>zipkin-query-plugin</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>traceql-plugin</artifactId>
+ </dependency>
<!-- Alarm -->
<dependency>
<groupId>org.apache.skywalking</groupId>
diff --git a/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java b/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
index ff31bd3..be81a02 100644
--- a/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
+++ b/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
@@ -111,6 +111,8 @@ import org.apache.skywalking.oap.query.promql.PromQLModule;
import org.apache.skywalking.oap.query.promql.PromQLProvider;
import org.apache.skywalking.oap.query.logql.LogQLModule;
import org.apache.skywalking.oap.query.logql.LogQLProvider;
+import org.apache.skywalking.oap.query.traceql.TraceQLModule;
+import org.apache.skywalking.oap.query.traceql.TraceQLProvider;
import org.apache.skywalking.oap.query.debug.StatusQueryModule;
import org.apache.skywalking.oap.query.debug.StatusQueryProvider;
// Exporter
@@ -252,6 +254,9 @@ public class GraalVMOAPServerStartUp {
}
manager.register(new PromQLModule(), new PromQLProvider());
manager.register(new LogQLModule(), new LogQLProvider());
+ if (configuration.has("traceQL")) {
+ manager.register(new TraceQLModule(), new TraceQLProvider());
+ }
manager.register(new StatusQueryModule(), new StatusQueryProvider());
// Alarm
diff --git a/oap-graalvm-server/src/main/resources/application.yml b/oap-graalvm-server/src/main/resources/application.yml
index 1248b0a..ab08eaf 100644
--- a/oap-graalvm-server/src/main/resources/application.yml
+++ b/oap-graalvm-server/src/main/resources/application.yml
@@ -300,6 +300,18 @@ logql:
restIdleTimeOut: ${SW_LOGQL_REST_IDLE_TIMEOUT:30000}
restAcceptQueueSize: ${SW_LOGQL_REST_QUEUE_SIZE:0}
+traceQL:
+ selector: ${SW_TRACEQL:-}
+ default:
+ restHost: ${SW_TRACEQL_REST_HOST:0.0.0.0}
+ restPort: ${SW_TRACEQL_REST_PORT:3200}
+ enableDatasourceZipkin: ${SW_TRACEQL_ENABLE_DATASOURCE_ZIPKIN:false}
+ enableDatasourceSkywalking: ${SW_TRACEQL_ENABLE_DATASOURCE_SKYWALKING:false}
+ restContextPathZipkin: ${SW_TRACEQL_REST_CONTEXT_PATH_ZIPKIN:/zipkin}
+ restContextPathSkywalking: ${SW_TRACEQL_REST_CONTEXT_PATH_SKYWALKING:/skywalking}
+ restIdleTimeOut: ${SW_TRACEQL_REST_IDLE_TIMEOUT:30000}
+ restAcceptQueueSize: ${SW_TRACEQL_REST_QUEUE_SIZE:0}
+
alarm:
selector: ${SW_ALARM:default}
default:
diff --git a/pom.xml b/pom.xml
index e0d97d6..e8733c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -295,6 +295,11 @@
<artifactId>logql-plugin</artifactId>
<version>${skywalking.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>traceql-plugin</artifactId>
+ <version>${skywalking.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>zipkin-query-plugin</artifactId>
diff --git a/test/e2e/cases/logql/docker-compose.yml b/test/e2e/cases/logql/docker-compose.yml
new file mode 100644
index 0000000..cfa4b50
--- /dev/null
+++ b/test/e2e/cases/logql/docker-compose.yml
@@ -0,0 +1,162 @@
+# 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.
+
+services:
+ banyandb:
+ extends:
+ file: ../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+ service: banyandb
+ ports:
+ - 17912
+
+ oap:
+ image: skywalking-oap-native:latest
+ expose:
+ - 11800
+ - 12800
+ - 3100
+ networks:
+ - e2e
+ ports:
+ - 12800
+ - 3100
+ environment:
+ SW_HEALTH_CHECKER: default
+ SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+ SW_CONFIGURATION: none
+ SW_LOG_LAL_FILES: default
+ SW_LOG_MAL_FILES: ""
+ depends_on:
+ banyandb:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+
+ # Init containers: copy pre-built service JARs into a shared volume
+ provider-jar:
+ image: "ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+ entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+
+ consumer-jar:
+ image: "ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+ entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+
+ provider:
+ image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+ command: ["java", "-jar", "/jars/services_provider.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+ expose:
+ - 9090
+ ports:
+ - 9090
+ environment:
+ SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+ SW_LOGGING_OUTPUT: CONSOLE
+ SW_AGENT_NAME: e2e-service-provider
+ SW_AGENT_INSTANCE_NAME: provider1
+ SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+ SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+ SW_METER_ACTIVE: 'false'
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+ depends_on:
+ oap:
+ condition: service_healthy
+ provider-jar:
+ condition: service_completed_successfully
+
+ provider2:
+ image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+ command: ["java", "-jar", "/jars/services_provider.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+ expose:
+ - 9090
+ ports:
+ - 9090
+ environment:
+ SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+ SW_LOGGING_OUTPUT: CONSOLE
+ SW_AGENT_NAME: e2e-service-provider
+ SW_AGENT_INSTANCE_NAME: provider2
+ SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+ SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+ SW_METER_ACTIVE: 'false'
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+ depends_on:
+ oap:
+ condition: service_healthy
+ provider-jar:
+ condition: service_completed_successfully
+
+ consumer:
+ image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+ command: ["java", "-jar", "/jars/services_consumer.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+ expose:
+ - 9092
+ ports:
+ - 9092
+ environment:
+ SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+ SW_LOGGING_OUTPUT: CONSOLE
+ PROVIDER_URL: http://provider:9090
+ SW_AGENT_NAME: e2e-service-consumer
+ SW_AGENT_INSTANCE_NAME: consumer1
+ SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+ SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+ SW_METER_ACTIVE: 'false'
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+ depends_on:
+ provider:
+ condition: service_healthy
+ consumer-jar:
+ condition: service_completed_successfully
+
+volumes:
+ service-jars:
+
+networks:
+ e2e:
diff --git a/test/e2e/cases/logql/e2e.yaml b/test/e2e/cases/logql/e2e.yaml
new file mode 100644
index 0000000..1e76432
--- /dev/null
+++ b/test/e2e/cases/logql/e2e.yaml
@@ -0,0 +1,51 @@
+# 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.
+
+# LogQL E2E — native OAP with BanyanDB
+# Tests the Loki-compatible log query API (LogQL module).
+# Upstream uses Elasticsearch but LogQL is storage-agnostic;
+# BanyanDB supports the same log query operations.
+# Reuses upstream verification cases and expected files.
+
+setup:
+ env: compose
+ file: docker-compose.yml
+ timeout: 20m
+ init-system-environment: ../../script/env
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+ action: http
+ interval: 3s
+ times: -1
+ url: http://${consumer_host}:${consumer_9092}/users
+ method: POST
+ body: '{"id":"123","name":"skywalking"}'
+ headers:
+ "Content-Type": "application/json"
+
+verify:
+ retry:
+ count: 20
+ interval: 3s
+ cases:
+ - includes:
+ - ../../../../skywalking/test/e2e-v2/cases/logql/logql-cases.yaml
diff --git a/test/e2e/cases/promql/docker-compose.yml b/test/e2e/cases/promql/docker-compose.yml
new file mode 100644
index 0000000..7d334ac
--- /dev/null
+++ b/test/e2e/cases/promql/docker-compose.yml
@@ -0,0 +1,130 @@
+# 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.
+
+services:
+ banyandb:
+ extends:
+ file: ../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+ service: banyandb
+ ports:
+ - 17912
+
+ oap:
+ image: skywalking-oap-native:latest
+ expose:
+ - 11800
+ - 12800
+ - 9090
+ networks:
+ - e2e
+ ports:
+ - 12800
+ - 9090
+ environment:
+ SW_HEALTH_CHECKER: default
+ SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+ SW_CONFIGURATION: none
+ depends_on:
+ banyandb:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+
+ # Init containers: copy pre-built service JARs into a shared volume
+ provider-jar:
+ image: "ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+ entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+
+ consumer-jar:
+ image: "ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+ entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+
+ provider:
+ image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+ command: ["java", "-jar", "/jars/services_provider.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+ expose:
+ - 9090
+ ports:
+ - 9090
+ environment:
+ SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+ SW_LOGGING_OUTPUT: CONSOLE
+ SW_AGENT_NAME: e2e-service-provider
+ SW_AGENT_INSTANCE_NAME: provider1
+ SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+ SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+ SW_METER_ACTIVE: 'false'
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+ depends_on:
+ oap:
+ condition: service_healthy
+ provider-jar:
+ condition: service_completed_successfully
+
+ consumer:
+ image: "ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+ command: ["java", "-jar", "/jars/services_consumer.jar"]
+ volumes:
+ - service-jars:/jars
+ networks:
+ - e2e
+ expose:
+ - 9092
+ ports:
+ - 9092
+ environment:
+ SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+ SW_LOGGING_OUTPUT: CONSOLE
+ PROVIDER_URL: http://provider:9090
+ SW_AGENT_NAME: e2e-service-consumer
+ SW_AGENT_INSTANCE_NAME: consumer1
+ SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+ SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+ SW_METER_ACTIVE: 'false'
+ healthcheck:
+ test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+ depends_on:
+ provider:
+ condition: service_healthy
+ consumer-jar:
+ condition: service_completed_successfully
+
+volumes:
+ service-jars:
+
+networks:
+ e2e:
diff --git a/test/e2e/cases/promql/e2e.yaml b/test/e2e/cases/promql/e2e.yaml
new file mode 100644
index 0000000..bcf66e9
--- /dev/null
+++ b/test/e2e/cases/promql/e2e.yaml
@@ -0,0 +1,51 @@
+# 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.
+
+# PromQL E2E — native OAP with BanyanDB
+# Tests the Prometheus-compatible query API (PromQL module).
+# Reuses upstream verification cases and expected files.
+# Note: upstream mounts a custom core.oal but our native image uses
+# pre-compiled OAL which is a superset — all queried metrics exist.
+
+setup:
+ env: compose
+ file: docker-compose.yml
+ timeout: 20m
+ init-system-environment: ../../script/env
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+ action: http
+ interval: 3s
+ times: -1
+ url: http://${consumer_host}:${consumer_9092}/users
+ method: POST
+ body: '{"id":"123","name":"skywalking"}'
+ headers:
+ "Content-Type": "application/json"
+
+verify:
+ retry:
+ count: 20
+ interval: 3s
+ cases:
+ - includes:
+ - ../../../../skywalking/test/e2e-v2/cases/promql/promql-cases.yaml
diff --git a/test/e2e/cases/traceql/docker-compose.yml b/test/e2e/cases/traceql/docker-compose.yml
new file mode 100644
index 0000000..5a1ad54
--- /dev/null
+++ b/test/e2e/cases/traceql/docker-compose.yml
@@ -0,0 +1,74 @@
+# 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.
+
+services:
+ banyandb:
+ extends:
+ file: ../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+ service: banyandb
+ ports:
+ - 17912
+
+ oap:
+ image: skywalking-oap-native:latest
+ expose:
+ - 11800
+ - 12800
+ - 9411
+ - 3200
+ networks:
+ - e2e
+ ports:
+ - 9412
+ - 3200
+ environment:
+ SW_HEALTH_CHECKER: default
+ SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+ SW_CONFIGURATION: none
+ SW_QUERY_ZIPKIN: default
+ SW_RECEIVER_ZIPKIN: default
+ SW_TRACEQL: default
+ SW_TRACEQL_ENABLE_DATASOURCE_ZIPKIN: "true"
+ depends_on:
+ banyandb:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+
+ frontend:
+ extends:
+ file: ../../../../skywalking/test/e2e-v2/cases/zipkin/docker-compose-brave.yml
+ service: frontend
+ depends_on:
+ backend:
+ condition: service_healthy
+ oap:
+ condition: service_healthy
+ ports:
+ - 8081
+
+ backend:
+ extends:
+ file: ../../../../skywalking/test/e2e-v2/cases/zipkin/docker-compose-brave.yml
+ service: backend
+ depends_on:
+ oap:
+ condition: service_healthy
+
+networks:
+ e2e:
diff --git a/test/e2e/cases/traceql/e2e.yaml b/test/e2e/cases/traceql/e2e.yaml
new file mode 100644
index 0000000..ca9046c
--- /dev/null
+++ b/test/e2e/cases/traceql/e2e.yaml
@@ -0,0 +1,48 @@
+# 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.
+
+# TraceQL E2E — native OAP with BanyanDB
+# Tests the Tempo-compatible TraceQL query API with Zipkin datasource.
+# Reuses upstream verification cases and expected files.
+
+setup:
+ env: compose
+ file: docker-compose.yml
+ timeout: 20m
+ init-system-environment: ../../script/env
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+ - name: install jq
+ command: bash skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh jq
+
+trigger:
+ action: http
+ interval: 3s
+ times: -1
+ url: http://${frontend_host}:${frontend_8081}/
+ method: POST
+
+verify:
+ retry:
+ count: 20
+ interval: 10s
+ cases:
+ - includes:
+ - ../../../../skywalking/test/e2e-v2/cases/traceql/zipkin/traceql-cases.yaml