From fa50b67a40ad9b3b9cf63f0b44b834c6f431f77f Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Tue, 20 May 2025 18:23:21 +0800
Subject: [PATCH 01/13] Add Ambient Mesh E2E
---
apm-protocol/apm-network/src/main/proto | 2 +-
docs/en/changes/changes.md | 1 +
.../skywalking-ebpf-receiver-plugin/pom.xml | 7 +-
.../handler/AccessLogServiceHandler.java | 176 +++++++++++++-
.../main/resources/component-libraries.yml | 1 +
test/e2e-v2/cases/istio/ambient-als/e2e.yaml | 222 ++++++++++++++++++
.../expected/dependency-global-mesh.yml | 77 ++++++
...pendency-services-instance-productpage.yml | 42 ++++
.../expected/metrics-has-value.yml | 34 +++
.../expected/service-endpoint-productpage.yml | 19 ++
.../expected/service-endpoint-reviews.yml | 19 ++
.../ambient-als/expected/service-instance.yml | 22 ++
.../istio/ambient-als/expected/service.yml | 64 +++++
.../cases/istio/ambient-als/traffic-gen.yaml | 47 ++++
test/e2e-v2/cases/istio/kind.k25.yaml | 3 +
test/e2e-v2/cases/istio/kind.k28.yaml | 3 +
.../ebpf/continuous/postgres/e2e.yaml | 85 +++++++
test/e2e-v2/script/env | 2 +-
18 files changed, 813 insertions(+), 13 deletions(-)
create mode 100644 test/e2e-v2/cases/istio/ambient-als/e2e.yaml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/dependency-services-instance-productpage.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/metrics-has-value.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-productpage.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-reviews.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/service-instance.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/expected/service.yml
create mode 100644 test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
create mode 100644 test/e2e-v2/cases/profiling/ebpf/continuous/postgres/e2e.yaml
diff --git a/apm-protocol/apm-network/src/main/proto b/apm-protocol/apm-network/src/main/proto
index 07e601830118..157baf3e7a97 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit 07e6018301187a6a9429e5c204c62df1e4db7a6b
+Subproject commit 157baf3e7a9710d3041e9caec39eecab7e0c5a82
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index b167a8d4e648..920a7a99e13a 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -19,6 +19,7 @@
* Support analysis waypoint metrics in Envoy ALS receiver.
* Add Ztunnel component in the topology.
* [Break Change] Change `compomentId` to `componentIds` in the K8SServiceRelation Scope.
+* Adapt the mesh metrics if detect the ambient mesh in the eBPF access log receiver.
#### UI
diff --git a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/pom.xml
index 2863e5907d9d..4329ffaebff8 100644
--- a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/pom.xml
+++ b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/pom.xml
@@ -33,10 +33,15 @@
skywalking-sharing-server-plugin
${project.version}
+
+ org.apache.skywalking
+ skywalking-mesh-receiver-plugin
+ ${project.version}
+
org.apache.skywalking
agent-analyzer
${project.version}
-
\ No newline at end of file
+
diff --git a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
index 9c469b176cac..8b3edf6d5ff5 100644
--- a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
@@ -23,6 +23,7 @@
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.apache.skywalking.aop.server.receiver.mesh.TelemetryDataDispatcher;
import org.apache.skywalking.apm.network.common.v3.DetectPoint;
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.AccessLogConnection;
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.AccessLogConnectionTLSMode;
@@ -46,7 +47,15 @@
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.IPAddress;
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.KubernetesProcessAddress;
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.ZTunnelAttachmentEnvironment;
+import org.apache.skywalking.apm.network.ebpf.accesslog.v3.ZTunnelAttachmentEnvironmentDetectBy;
import org.apache.skywalking.apm.network.ebpf.accesslog.v3.ZTunnelAttachmentSecurityPolicy;
+import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetric;
+import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetrics;
+import org.apache.skywalking.apm.network.servicemesh.v3.Protocol;
+import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetrics;
+import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetric;
+import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetrics;
+import org.apache.skywalking.library.elasticsearch.response.NodeInfo;
import org.apache.skywalking.library.kubernetes.ObjectID;
import org.apache.skywalking.oap.meter.analyzer.k8s.K8sInfoRegistry;
import org.apache.skywalking.oap.server.core.Const;
@@ -60,6 +69,7 @@
import org.apache.skywalking.oap.server.core.source.K8SServiceInstance;
import org.apache.skywalking.oap.server.core.source.K8SServiceInstanceRelation;
import org.apache.skywalking.oap.server.core.source.K8SServiceRelation;
+import org.apache.skywalking.oap.server.core.source.Service;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.StringUtil;
@@ -74,6 +84,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -100,6 +111,7 @@ public AccessLogServiceHandler(ModuleManager moduleManager) {
this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
this.namingControl = moduleManager.find(CoreModule.NAME).provider().getService(NamingControl.class);
+ TelemetryDataDispatcher.init(moduleManager);
MetricsCreator metricsCreator = moduleManager.find(TelemetryModule.NAME)
.provider()
.getService(MetricsCreator.class);
@@ -150,6 +162,8 @@ public void onNext(EBPFAccessLogMessage logMessage) {
return;
}
+ prepareForDispatch(node, connection, logMessage);
+
for (AccessLogKernelLog accessLogKernelLog : logMessage.getKernelLogsList()) {
inCounter.inc();
dispatchKernelLog(node, connection, accessLogKernelLog);
@@ -178,6 +192,116 @@ public void onCompleted() {
};
}
+ protected void prepareForDispatch(NodeInfo node, ConnectionInfo connection, EBPFAccessLogMessage logMessage) {
+ // if the connection is communicated with ztunnel, then needs to generate mesh metrics
+ if (connection.getOriginalConnection().hasAttachment() && connection.getOriginalConnection().getAttachment().hasZTunnel()) {
+ prepareDispatchForZtunnelMesh(node, connection, logMessage);
+ }
+ }
+
+ protected void prepareDispatchForZtunnelMesh(NodeInfo node, ConnectionInfo connection, EBPFAccessLogMessage logMessage) {
+ // adapt to the mesh metrics
+ String tlsMode = Const.TLS_MODE.NON_TLS;
+ if (AccessLogConnectionTLSMode.TLS.equals(connection.getTlsMode())) {
+ tlsMode = Const.TLS_MODE.TLS;
+ }
+ if (ZTunnelAttachmentSecurityPolicy.MTLS.equals(connection.getOriginalConnection().getAttachment().getZTunnel().getSecurityPolicy())) {
+ tlsMode = Const.TLS_MODE.M_TLS;
+ }
+
+ if (logMessage.hasProtocolLog()) {
+ final AccessLogProtocolLogs protocolLog = logMessage.getProtocolLog();
+ final ServiceMeshMetrics.Builder serviceMeshMetrics = ServiceMeshMetrics.newBuilder();
+ switch (protocolLog.getProtocolCase()) {
+ case HTTP:
+ serviceMeshMetrics.setHttpMetrics(HTTPServiceMeshMetrics.newBuilder()
+ .addMetrics(generateHTTPServiceMeshMetrics(node, connection, protocolLog.getHttp(), tlsMode)));
+ break;
+ }
+ TelemetryDataDispatcher.process(serviceMeshMetrics.build());
+ }
+
+ final ServiceMeshMetrics.Builder serviceMeshMetrics = ServiceMeshMetrics.newBuilder();
+ final TCPServiceMeshMetrics.Builder builder = TCPServiceMeshMetrics.newBuilder();
+ for (AccessLogKernelLog accessLogKernelLog : logMessage.getKernelLogsList()) {
+ Optional.ofNullable(generateTCPServiceMeshMetrics(node, connection, accessLogKernelLog, tlsMode))
+ .ifPresent(builder::addMetrics);
+ }
+ serviceMeshMetrics.setTcpMetrics(builder.build());
+ TelemetryDataDispatcher.process(serviceMeshMetrics.build());
+ }
+
+ protected HTTPServiceMeshMetric generateHTTPServiceMeshMetrics(NodeInfo node, ConnectionInfo connection,
+ AccessLogHTTPProtocol http, String tlsMode) {
+ KubernetesProcessAddress source, dest;
+ if (DetectPoint.client.equals(connection.getRole())) {
+ source = connection.getLocal();
+ dest = connection.getRemote();
+ } else {
+ source = connection.getRemote();
+ dest = connection.getLocal();
+ }
+ final long startTime = node.parseTimestamp(http.getStartTime());
+ final long endTime = node.parseTimestamp(http.getEndTime());
+ return HTTPServiceMeshMetric.newBuilder()
+ .setStartTime(startTime)
+ .setEndTime(endTime)
+ .setSourceServiceName(buildServiceNameByAddress(node, source))
+ .setSourceServiceInstance(buildServiceInstanceName(source))
+ .setDestServiceName(buildServiceNameByAddress(node, dest))
+ .setDestServiceInstance(buildServiceInstanceName(dest))
+ .setEndpoint(buildHTTPProtocolEndpointName(connection, http))
+ .setLatency((int) (endTime - startTime))
+ .setResponseCode(http.getResponse().getStatusCode())
+ .setStatus(http.getResponse().getStatusCode() < 500)
+ .setProtocol(Protocol.HTTP)
+ .setDetectPoint(connection.getRole())
+ .setTlsMode(tlsMode).build();
+ }
+
+ protected TCPServiceMeshMetric generateTCPServiceMeshMetrics(NodeInfo node, ConnectionInfo connection,
+ AccessLogKernelLog kernelLog, String tlsMode) {
+ long receivedBytes = 0, sentBytes = 0;
+ long startTime = 0, endTime = 0;
+ switch (kernelLog.getOperationCase()) {
+ case CONNECT:
+ case ACCEPT:
+ case CLOSE:
+ return null;
+ case WRITE:
+ final AccessLogKernelWriteOperation write = kernelLog.getWrite();
+ sentBytes = write.getL4Metrics().getTotalPackageSize();
+ startTime = node.parseTimestamp(write.getStartTime());
+ endTime = node.parseTimestamp(write.getEndTime());
+ break;
+ case READ:
+ final AccessLogKernelReadOperation read = kernelLog.getRead();
+ receivedBytes = read.getL2Metrics().getTotalPackageSize();
+ startTime = node.parseTimestamp(read.getStartTime());
+ endTime = node.parseTimestamp(read.getEndTime());
+ break;
+ }
+ KubernetesProcessAddress source, dest;
+ if (DetectPoint.client.equals(connection.getRole())) {
+ source = connection.getLocal();
+ dest = connection.getRemote();
+ } else {
+ source = connection.getRemote();
+ dest = connection.getLocal();
+ }
+ return TCPServiceMeshMetric.newBuilder()
+ .setStartTime(startTime)
+ .setEndTime(endTime)
+ .setSourceServiceName(buildServiceNameByAddress(node, source))
+ .setSourceServiceInstance(buildServiceInstanceName(source))
+ .setDestServiceName(buildServiceNameByAddress(node, dest))
+ .setDestServiceInstance(buildServiceInstanceName(dest))
+ .setDetectPoint(connection.getRole())
+ .setTlsMode(tlsMode)
+ .setReceivedBytes(receivedBytes)
+ .setSentBytes(sentBytes).build();
+ }
+
protected List buildKernelLogMetrics(NodeInfo node, ConnectionInfo connection, AccessLogKernelLog kernelLog) {
return Arrays.asList(connection.toService(), connection.toServiceInstance(),
connection.toServiceRelation(), connection.toServiceInstanceRelation());
@@ -395,6 +519,11 @@ public long parseMinuteTimeBucket(EBPFTimestamp timestamp) {
return TimeBucket.getMinuteTimeBucket(seconds * 1000);
}
+ public long parseTimestamp(EBPFTimestamp timestamp) {
+ return TimeUnit.SECONDS.toMillis(bootTime.getSeconds() +
+ TimeUnit.NANOSECONDS.toSeconds(timestamp.getOffset().getOffset()));
+ }
+
public boolean shouldExcludeNamespace(String namespace) {
return excludeNamespaces.contains(namespace);
}
@@ -422,17 +551,19 @@ protected String buildServiceInstanceName(KubernetesProcessAddress address) {
}
protected String buildProtocolEndpointName(ConnectionInfo connectionInfo, AccessLogProtocolLogs protocol) {
- final String serviceName = connectionInfo.buildLocalServiceName();
switch (protocol.getProtocolCase()) {
case HTTP:
- final AccessLogHTTPProtocol http = protocol.getHttp();
- return namingControl.formatEndpointName(serviceName,
- StringUtils.upperCase(http.getRequest().getMethod().name()) + ":" + http.getRequest().getPath());
+ return buildHTTPProtocolEndpointName(connectionInfo, protocol.getHttp());
default:
return null;
}
}
+ protected String buildHTTPProtocolEndpointName(ConnectionInfo connectionInfo, AccessLogHTTPProtocol http) {
+ return namingControl.formatEndpointName(connectionInfo.buildLocalServiceName(),
+ StringUtils.upperCase(http.getRequest().getMethod().name()) + ":" + http.getRequest().getPath());
+ }
+
protected void recordIgnoreSameService(String sourceService) {
final DropDataReason dropDataReason = dropReasons.computeIfAbsent(sourceService,
key -> DropDataReason.buildWhenSameService(sourceService));
@@ -491,11 +622,13 @@ protected void printDropReasons() {
protected KubernetesProcessAddress buildKubernetesAddressByIP(NodeInfo nodeInfo, AccessLogConnection connection, boolean isLocal, IPAddress ipAddress) {
String host = ipAddress.getHost();
- // if the resolving address is not local, and have attached ztunnel info, then using the ztunnel mapped host
- if (!isLocal && connection.hasAttachment() && connection.getAttachment().hasZTunnel()) {
+ // if the resolving address is not local, have attached ztunnel info,
+ // and must is detected by outbound, then using the ztunnel mapped host
+ if (!isLocal && connection.hasAttachment() && connection.getAttachment().hasZTunnel() &&
+ ZTunnelAttachmentEnvironmentDetectBy.ZTUNNEL_OUTBOUND_FUNC.equals(connection.getAttachment().getZTunnel().getBy())) {
final ZTunnelAttachmentEnvironment ztunnel = connection.getAttachment().getZTunnel();
host = ztunnel.getRealDestinationIp();
- log.debug("detected the ztunnel connection, so update the remote IP address as: {}, detect by: {}", host,
+ log.debug("detected the ztunnel outbound connection, so update the remote IP address as: {}, detect by: {}", host,
ztunnel.getBy());
}
final ObjectID service = K8sInfoRegistry.getInstance().findServiceByIP(host);
@@ -535,9 +668,11 @@ protected KubernetesProcessAddress buildRemoteAddress(NodeInfo nodeInfo, ObjectI
protected List buildConnectionComponentId(ConnectionInfo connectionInfo) {
final AccessLogConnection originalConnection = connectionInfo.getOriginalConnection();
- if (originalConnection.hasAttachment() && originalConnection.getAttachment().hasZTunnel() &&
- ZTunnelAttachmentSecurityPolicy.MTLS.equals(originalConnection.getAttachment().getZTunnel().getSecurityPolicy())) {
- return Arrays.asList(142, 162); // mTLS, ztunnel
+ if (originalConnection.hasAttachment() && originalConnection.getAttachment().hasZTunnel()) {
+ if (ZTunnelAttachmentSecurityPolicy.MTLS.equals(originalConnection.getAttachment().getZTunnel().getSecurityPolicy())) {
+ return Arrays.asList(142, 162); // mTLS, ztunnel
+ }
+ return Arrays.asList(162); // ztunnel
}
return Arrays.asList(buildProtocolComponentID(connectionInfo));
}
@@ -725,6 +860,10 @@ public org.apache.skywalking.oap.server.core.source.DetectPoint parseToSourceRol
}
}
+ public AccessLogConnection getOriginal() {
+ return originalConnection;
+ }
+
public String toString() {
return String.format("local: %s, remote: %s, role: %s, tlsMode: %s, protocolType: %s, valid: %b",
buildConnectionAddressString(originalConnection.getLocal()),
@@ -766,4 +905,21 @@ public void increaseCount() {
protected long convertNsToMs(long latency) {
return TimeUnit.NANOSECONDS.toMillis(latency);
}
+
+ protected List buildBaseServiceFromRelation(K8SServiceRelation relation, Layer layer) {
+ if (relation == null) {
+ return Collections.emptyList();
+ }
+ Service localService = new Service();
+ localService.setLayer(layer);
+ localService.setName(relation.getSourceServiceName());
+ localService.setTimeBucket(TimeBucket.getMinuteTimeBucket(System.currentTimeMillis()));
+ Service remoteService = new Service();
+ remoteService.setLayer(layer);
+ remoteService.setName(relation.getDestServiceName());
+ remoteService.setTimeBucket(TimeBucket.getMinuteTimeBucket(System.currentTimeMillis()));
+ log.warn("generate the mesh layer service local service: {}, remote service: {}",
+ relation.getSourceServiceName(), relation.getDestServiceName());
+ return Arrays.asList(localService, remoteService);
+ }
}
diff --git a/oap-server/server-starter/src/main/resources/component-libraries.yml b/oap-server/server-starter/src/main/resources/component-libraries.yml
index d6174eaeb85c..25c1aba053c3 100644
--- a/oap-server/server-starter/src/main/resources/component-libraries.yml
+++ b/oap-server/server-starter/src/main/resources/component-libraries.yml
@@ -538,6 +538,7 @@ ThreadPerTask-executor:
ztunnel:
id: 162
languages: ebpf, mesh
+ priority: 10
# .NET/.NET Core components
# [3000, 4000) for C#/.NET only
diff --git a/test/e2e-v2/cases/istio/ambient-als/e2e.yaml b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
new file mode 100644
index 000000000000..aad019f31bae
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
@@ -0,0 +1,222 @@
+# 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.
+
+# This file is used to show how to write configuration files and can be used to test.
+
+setup:
+ env: kind
+ file: ../kind.k${KUBERNETES_VERSION}.yaml
+ init-system-environment: ../../../script/env
+ kind:
+ import-images:
+ - skywalking/ui:latest
+ - skywalking/oap:latest
+ expose-ports:
+ - namespace: istio-system
+ resource: service/skywalking-ui
+ port: 80
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+ - name: install kubectl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh kubectl
+ - name: install istio
+ command: |
+ bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh istioctl
+ istioctl install -y --set profile=ambient --skip-confirmation --set meshConfig.accessLogFile=/dev/stdout \
+ --set meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-oap.istio-system:11800 \
+ --set meshConfig.enableEnvoyAccessLogService=true
+ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
+ kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0-rc.1/standard-install.yaml
+ kubectl label namespace default istio.io/dataplane-mode=ambient
+ - name: install waypoint
+ command: istioctl waypoint apply --name simple-http-waypoint && sleep 1
+ wait:
+ - namespace: default
+ resource: deployments/simple-http-waypoint
+ for: condition=available
+ - name: Install helm
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh helm
+ - name: Install SkyWalking
+ command: |
+ helm -n istio-system install skywalking \
+ oci://ghcr.io/apache/skywalking-helm/skywalking-helm \
+ --version "0.0.0-${SW_KUBERNETES_COMMIT_SHA}" \
+ --set fullnameOverride=skywalking \
+ --set elasticsearch.replicas=1 \
+ --set elasticsearch.minimumMasterNodes=1 \
+ --set oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=$ALS_ANALYZER \
+ --set oap.env.SW_ENVOY_METRIC_ALS_TCP_ANALYSIS=$ALS_ANALYZER \
+ --set oap.env.K8S_SERVICE_NAME_RULE='e2e::${service.metadata.name}' \
+ --set oap.envoy.als.enabled=true \
+ --set oap.replicas=1 \
+ --set ui.image.repository=skywalking/ui \
+ --set ui.image.tag=latest \
+ --set oap.image.tag=latest \
+ --set oap.image.repository=skywalking/oap \
+ --set oap.storageType=elasticsearch \
+ -f test/e2e-v2/cases/istio/values.yaml
+ wait:
+ - namespace: istio-system
+ resource: deployments/skywalking-oap
+ for: condition=available
+ - name: Deploy demo services
+ command: |
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo.yaml
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/bookinfo-gateway.yaml
+ # Enable TCP services
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo-db.yaml
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/destination-rule-all.yaml
+ kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/virtual-service-ratings-db.yaml
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ - name: Add reviews service as waypoint transform
+ command: kubectl label service -n default details istio.io/use-waypoint=simple-http-waypoint --overwrite
+ - name: Install SkyWalking Rover
+ command: |
+ envsubst < test/e2e-v2/cases/profiling/ebpf/access_log/rover.yaml | kubectl apply -f -
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ - name: Status of istio mesh
+ command: istioctl zc all
+ - name: Generate traffic
+ path: traffic-gen.yaml
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ timeout: 25m
+
+verify:
+ retry:
+ count: 20
+ interval: 15s
+ cases:
+ # service list
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql service ls
+ expected: expected/service.yml
+ # service instance list
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default
+ expected: expected/service-instance.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default
+ expected: expected/service-instance.yml
+ # service endpoint
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql endpoint list --service-name=productpage.default
+ expected: expected/service-endpoint-productpage.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql endpoint list --service-name=reviews.default
+ expected: expected/service-endpoint-reviews.yml
+
+ # mesh service metrics: productpage.default
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_sla --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_cpm --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_resp_time --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_apdex --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ # service metrics: reviews.default
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_sla --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_cpm --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_resp_time --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_apdex --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ # service instance metrics: productpage.default
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_resp_time --service-name=productpage.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_cpm --service-name=productpage.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_sla --service-name=productpage.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+ # service instance metrics: reviews.default
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_resp_time --service-name=reviews.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_cpm --service-name=reviews.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_sla --service-name=reviews.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default | yq e '.[0].name' -
+ )
+ expected: expected/metrics-has-value.yml
+
+ # service endpoint metrics: productpage.default GET:/productpage
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_cpm --endpoint-name=GET:/productpage --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_resp_time --endpoint-name=GET:/productpage --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_sla --endpoint-name=GET:/productpage --service-name=productpage.default
+ expected: expected/metrics-has-value.yml
+ # service endpoint metrics: reviews.default GET:/reviews/0
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_cpm --endpoint-name=GET:/reviews/0 --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_resp_time --endpoint-name=GET:/reviews/0 --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=endpoint_sla --endpoint-name=GET:/reviews/0 --service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+
+ # dependency service
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql dependency global --layer=MESH
+ expected: expected/dependency-global-mesh.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql dependency instance --service-name=productpage.default --dest-service-name=reviews.default
+ expected: expected/dependency-services-instance-productpage.yml
+
+ # service relation metrics
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_relation_client_cpm --service-name=productpage.default --dest-service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_relation_server_cpm --service-name=productpage.default --dest-service-name=reviews.default
+ expected: expected/metrics-has-value.yml
+ # service instance relation metrics, productpage.default -> reviews.default
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_relation_client_cpm \
+ --service-name=productpage.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default | yq e '.[0].name' - ) \
+ --dest-service-name=reviews.default --dest-instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default | yq e '.[0].name' - )
+ expected: expected/metrics-has-value.yml
+ - query: |
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql metrics exec --expression=service_instance_relation_server_cpm \
+ --service-name=productpage.default --instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=productpage.default | yq e '.[0].name' - ) \
+ --dest-service-name=reviews.default --dest-instance-name=$( \
+ swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=reviews.default | yq e '.[0].name' - )
+
+ expected: expected/metrics-has-value.yml
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
new file mode 100644
index 000000000000..d9013b28815c
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
@@ -0,0 +1,77 @@
+# 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.
+
+debuggingtrace: null
+nodes:
+{{- contains .nodes }}
+- id: {{ b64enc "reviews.default"}}.1
+ name: reviews.default
+ type: http
+ isreal: true
+ layers:
+ {{- contains .layers }}
+ - MESH
+ - K8S_SERVICE
+ {{- end }}
+- id: {{ b64enc "productpage.default"}}.1
+ name: productpage.default
+ type: http
+ isreal: true
+ layers:
+ {{- contains .layers }}
+ - MESH
+ - K8S_SERVICE
+ {{- end }}
+- id: {{ b64enc "details.default" }}.1
+ name: details.default
+ type: http
+ isreal: true
+ layers:
+ {{- contains .layers }}
+ - MESH
+ - K8S_SERVICE
+ {{- end }}
+{{- end }}
+calls:
+{{- contains .calls }}
+- source: {{ b64enc "productpage.default"}}.1
+ sourcecomponents:
+ {{- contains .sourcecomponents }}
+ - tcp
+ - http
+ {{- end }}
+ target: {{ b64enc "details.default"}}.1
+ targetcomponents: []
+ id: {{ b64enc "productpage.default"}}.1-{{ b64enc "details.default"}}.1
+ detectpoints:
+ - CLIENT
+- source: {{ b64enc "productpage.default" }}.1
+ sourcecomponents:
+ {{- contains .sourcecomponents }}
+ - ztunnel
+ - tcp
+ - http
+ {{- end }}
+ target: {{ b64enc "reviews.default"}}.1
+ targetcomponents:
+ {{- contains .targetcomponents }}
+ - ztunnel
+ - http
+ {{- end }}
+ id: {{ b64enc "productpage.default" }}.1-{{ b64enc "reviews.default"}}.1
+ detectpoints:
+ - CLIENT
+ - SERVER
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/dependency-services-instance-productpage.yml b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-services-instance-productpage.yml
new file mode 100644
index 000000000000..180cfc64e1b7
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-services-instance-productpage.yml
@@ -0,0 +1,42 @@
+# 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.
+
+debuggingtrace: null
+nodes:
+{{- contains .nodes }}
+- id: {{ notEmpty .id }}
+ name: {{ notEmpty .name }}
+ serviceid: {{ b64enc "reviews.default" }}.1
+ servicename: reviews.default
+ type: ""
+ isreal: true
+- id: {{ notEmpty .id }}
+ name: {{ notEmpty .name }}
+ serviceid: {{ b64enc "productpage.default" }}.1
+ servicename: productpage.default
+ type: ""
+ isreal: true
+{{- end }}
+calls:
+{{- contains .calls }}
+- source: {{ notEmpty .source }}
+ sourcecomponents: []
+ target: {{ notEmpty .target }}
+ targetcomponents: []
+ id: {{ notEmpty .source }}-{{ notEmpty .target }}
+ detectpoints:
+ - CLIENT
+ - SERVER
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/metrics-has-value.yml b/test/e2e-v2/cases/istio/ambient-als/expected/metrics-has-value.yml
new file mode 100644
index 000000000000..d5e6476d7a53
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/metrics-has-value.yml
@@ -0,0 +1,34 @@
+# 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.
+
+debuggingtrace: null
+type: TIME_SERIES_VALUES
+results:
+ {{- contains .results }}
+ - metric:
+ labels: []
+ values:
+ {{- contains .values }}
+ - id: "{{ notEmpty .id }}"
+ value: {{ .value }}
+ owner: null
+ traceid: null
+ - id: "{{ notEmpty .id }}"
+ value: null
+ owner: null
+ traceid: null
+ {{- end}}
+ {{- end}}
+error: null
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-productpage.yml b/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-productpage.yml
new file mode 100644
index 000000000000..f5788fe089aa
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-productpage.yml
@@ -0,0 +1,19 @@
+# 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.
+
+{{- contains . }}
+- id: {{ b64enc "productpage.default" }}.1_{{ b64enc "GET:/productpage" }}
+ name: GET:/productpage
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-reviews.yml b/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-reviews.yml
new file mode 100644
index 000000000000..1fffece05b82
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/service-endpoint-reviews.yml
@@ -0,0 +1,19 @@
+# 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.
+
+{{- contains . }}
+- id: {{ b64enc "reviews.default" }}.1_{{ b64enc "GET:/reviews/0" }}
+ name: GET:/reviews/0
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/service-instance.yml b/test/e2e-v2/cases/istio/ambient-als/expected/service-instance.yml
new file mode 100644
index 000000000000..658cdbd553b0
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/service-instance.yml
@@ -0,0 +1,22 @@
+# 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.
+
+{{- contains . }}
+- id: {{ notEmpty .id }}
+ name: {{ notEmpty .name }}
+ attributes: []
+ language: UNKNOWN
+ instanceuuid: {{ notEmpty .instanceuuid }}
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/service.yml b/test/e2e-v2/cases/istio/ambient-als/expected/service.yml
new file mode 100644
index 000000000000..f98b6e7778d0
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/service.yml
@@ -0,0 +1,64 @@
+# 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.
+
+{{- contains . }}
+- id: {{ b64enc "details.default" }}.1
+ name: details.default
+ group: ""
+ shortname: details.default
+ layers:
+ - MESH
+ - K8S_SERVICE
+ normal: true
+- id: {{ b64enc "e2e::simple-http-waypoint" }}.1
+ name: e2e::simple-http-waypoint
+ group: "e2e"
+ shortname: simple-http-waypoint
+ layers:
+ - MESH
+ normal: true
+- id: {{ b64enc "reviews.default" }}.1
+ name: reviews.default
+ group: ""
+ shortname: reviews.default
+ layers:
+ - MESH
+ - K8S_SERVICE
+ normal: true
+- id: {{ b64enc "ratings.default" }}.1
+ name: ratings.default
+ group: ""
+ shortname: ratings.default
+ layers:
+ - MESH
+ - K8S_SERVICE
+ normal: true
+- id: {{ b64enc "productpage.default" }}.1
+ name: productpage.default
+ group: ""
+ shortname: productpage.default
+ layers:
+ - MESH
+ - K8S_SERVICE
+ normal: true
+- id: {{ b64enc "mongodb.default" }}.1
+ name: mongodb.default
+ group: ""
+ shortname: mongodb.default
+ layers:
+ - MESH
+ - K8S_SERVICE
+ normal: true
+{{- end }}
diff --git a/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml b/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
new file mode 100644
index 000000000000..a6ea8a638a3b
--- /dev/null
+++ b/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
@@ -0,0 +1,47 @@
+# 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.
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: trafficgenerator
+ labels:
+ app: trafficgenerator
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: trafficgenerator
+ template:
+ metadata:
+ annotations:
+ sidecar.istio.io/inject: "false"
+ labels:
+ app: trafficgenerator
+ spec:
+ containers:
+ - name: trafficgenerator
+ image: alpine/curl:8.9.1
+ command: ["/bin/sh", "-c", "--"]
+ args:
+ - |
+ while true; do
+ curl -s -o /dev/null -w "%{http_code}\n" http://productpage.default:9080/productpage
+ sleep 1
+ done
+ resources:
+ requests:
+ cpu: 0.1
+
diff --git a/test/e2e-v2/cases/istio/kind.k25.yaml b/test/e2e-v2/cases/istio/kind.k25.yaml
index fe248b66f6c1..c3271a47ede6 100644
--- a/test/e2e-v2/cases/istio/kind.k25.yaml
+++ b/test/e2e-v2/cases/istio/kind.k25.yaml
@@ -18,3 +18,6 @@ apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+ extraMounts:
+ - hostPath: /
+ containerPath: /host
diff --git a/test/e2e-v2/cases/istio/kind.k28.yaml b/test/e2e-v2/cases/istio/kind.k28.yaml
index 6bb82dfce82e..f2f618b841ae 100644
--- a/test/e2e-v2/cases/istio/kind.k28.yaml
+++ b/test/e2e-v2/cases/istio/kind.k28.yaml
@@ -18,3 +18,6 @@ apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
+ extraMounts:
+ - hostPath: /
+ containerPath: /host
diff --git a/test/e2e-v2/cases/profiling/ebpf/continuous/postgres/e2e.yaml b/test/e2e-v2/cases/profiling/ebpf/continuous/postgres/e2e.yaml
new file mode 100644
index 000000000000..6be954ee94ee
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/continuous/postgres/e2e.yaml
@@ -0,0 +1,85 @@
+# 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.
+
+# This file is used to show how to write configuration files and can be used to test.
+
+setup:
+ env: kind
+ file: ../../kind.yaml
+ init-system-environment: ../../../../../script/env
+ kind:
+ import-images:
+ - skywalking/ui:latest
+ - skywalking/oap:latest
+ - test/continuous:test
+ expose-ports:
+ - namespace: istio-system
+ resource: service/skywalking-ui
+ port: 80
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+ - name: install kubectl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh kubectl
+ - name: Install helm
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh helm
+ - name: Install kubectl
+ command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh kubectl
+ - name: Install SkyWalking
+ command: |
+ kubectl create namespace istio-system
+ helm -n istio-system install skywalking \
+ oci://ghcr.io/apache/skywalking-helm/skywalking-helm \
+ --version "0.0.0-${SW_KUBERNETES_COMMIT_SHA}" \
+ --set fullnameOverride=skywalking \
+ --set elasticsearch.enabled=false \
+ --set banyandb.enabled=true \
+ --set banyandb.image.tag=${SW_BANYANDB_COMMIT} \
+ --set banyandb.image.repository=ghcr.io/apache/skywalking-banyandb \
+ --set oap.replicas=1 \
+ --set ui.image.repository=skywalking/ui \
+ --set ui.image.tag=latest \
+ --set oap.image.tag=latest \
+ --set oap.image.repository=skywalking/oap \
+ --set oap.storageType=banyandb \
+ -f test/e2e-v2/cases/profiling/ebpf/kubernetes-values.yaml
+ wait:
+ - namespace: istio-system
+ resource: deployments/skywalking-oap
+ for: condition=available
+ - name: Deploy services
+ command: |
+ export IMAGE_NAME=test/continuous:test
+ export HAS_SERVICE_EXP=".Pod.HasContainer \\\"test-continuous\\\""
+ export SERVICE_NAME_EXP="sqrt"
+ envsubst < test/e2e-v2/cases/profiling/ebpf/continuous/service.yaml | kubectl apply -f -
+ envsubst < test/e2e-v2/cases/profiling/ebpf/rover.yaml | kubectl apply -f -
+ wait:
+ - namespace: default
+ resource: pod
+ for: condition=Ready
+ timeout: 25m
+
+verify:
+ retry:
+ count: 20
+ interval: 10s
+ cases:
+ - includes:
+ - ../profiling-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index 91fa59b0054a..b772f4824e61 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -22,7 +22,7 @@ SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
-SW_ROVER_COMMIT=738b1a42fe4941e0b4e6f5816403437cf572708f
+SW_ROVER_COMMIT=a2b39580d8021cfff3da12b4074faedbe7c85752
SW_BANYANDB_COMMIT=458041a561b0acc1f2ed37690df2ce753b791283
SW_AGENT_PHP_COMMIT=3192c553002707d344bd6774cfab5bc61f67a1d3
SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994
From a920752464337a3862f851beb2e986858ce74a69 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 14:49:31 +0800
Subject: [PATCH 02/13] update traffic generate frequency
---
test/e2e-v2/cases/cilium/traffic-gen.yaml | 2 +-
test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml | 2 +-
test/e2e-v2/cases/profiling/ebpf/access_log/traffic-gen.yaml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/test/e2e-v2/cases/cilium/traffic-gen.yaml b/test/e2e-v2/cases/cilium/traffic-gen.yaml
index 590ff4d98fa9..6f946ae52e93 100644
--- a/test/e2e-v2/cases/cilium/traffic-gen.yaml
+++ b/test/e2e-v2/cases/cilium/traffic-gen.yaml
@@ -39,7 +39,7 @@ spec:
- |
while true; do
curl -s -o /dev/null -w "%{http_code}\n" http://productpage:9080/productpage
- sleep 1
+ sleep 5
done
resources:
requests:
diff --git a/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml b/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
index a6ea8a638a3b..65e2ac62d2cb 100644
--- a/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
+++ b/test/e2e-v2/cases/istio/ambient-als/traffic-gen.yaml
@@ -39,7 +39,7 @@ spec:
- |
while true; do
curl -s -o /dev/null -w "%{http_code}\n" http://productpage.default:9080/productpage
- sleep 1
+ sleep 5
done
resources:
requests:
diff --git a/test/e2e-v2/cases/profiling/ebpf/access_log/traffic-gen.yaml b/test/e2e-v2/cases/profiling/ebpf/access_log/traffic-gen.yaml
index a1d08fef93f1..addefc63d74e 100644
--- a/test/e2e-v2/cases/profiling/ebpf/access_log/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/access_log/traffic-gen.yaml
@@ -39,7 +39,7 @@ spec:
- |
while true; do
curl -s -o /dev/null -w "%{http_code}\n" http://productpage:9080/productpage
- sleep 1
+ sleep 5
done
resources:
requests:
From b609899550be9cbb901ed4940f45619d80858c4c Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 15:01:54 +0800
Subject: [PATCH 03/13] update the E2E file
---
.github/workflows/skywalking.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 599d547c4ab6..1b89de8c2b67 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -783,6 +783,7 @@ jobs:
fail-fast: false
matrix:
analyzer: [k8s-mesh, mx-mesh]
+ ambient: [true, false]
versions:
- istio: 1.20.0
kubernetes: 28
@@ -826,7 +827,7 @@ jobs:
KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }}
ALS_ANALYZER: ${{ matrix.analyzer }}
with:
- e2e-file: $GITHUB_WORKSPACE/test/e2e-v2/cases/istio/als/e2e.yaml
+ e2e-file: ${{ format('test/e2e-v2/cases/istio/{0}als/e2e.yaml', matrix.ambient == 'true' && 'ambient-' || '') }}
- if: ${{ failure() }}
run: |
df -h
From f0a8c148dadbcec9fd195d73fee4da4d245b2c50 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 15:42:16 +0800
Subject: [PATCH 04/13] update E2E file path
---
.github/workflows/skywalking.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 1b89de8c2b67..4061a5a693c0 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -827,7 +827,7 @@ jobs:
KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }}
ALS_ANALYZER: ${{ matrix.analyzer }}
with:
- e2e-file: ${{ format('test/e2e-v2/cases/istio/{0}als/e2e.yaml', matrix.ambient == 'true' && 'ambient-' || '') }}
+ e2e-file: ${{ format('test/e2e-v2/cases/istio/{0}als/e2e.yaml', matrix.ambient && 'ambient-' || '') }}
- if: ${{ failure() }}
run: |
df -h
From c4566ddb1c57df7229fdf56a626b9cf92debb844 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 16:16:53 +0800
Subject: [PATCH 05/13] split to new GHA jobs
---
.github/workflows/skywalking.yaml | 66 +++++++++++++++++++-
test/e2e-v2/cases/istio/ambient-als/e2e.yaml | 2 +-
2 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 4061a5a693c0..63e3179c4520 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -783,7 +783,6 @@ jobs:
fail-fast: false
matrix:
analyzer: [k8s-mesh, mx-mesh]
- ambient: [true, false]
versions:
- istio: 1.20.0
kubernetes: 28
@@ -827,7 +826,7 @@ jobs:
KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }}
ALS_ANALYZER: ${{ matrix.analyzer }}
with:
- e2e-file: ${{ format('test/e2e-v2/cases/istio/{0}als/e2e.yaml', matrix.ambient && 'ambient-' || '') }}
+ e2e-file: test/e2e-v2/cases/istio/als/e2e.yaml
- if: ${{ failure() }}
run: |
df -h
@@ -840,6 +839,66 @@ jobs:
name: test-logs-${{ matrix.test.name }}
path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
+ e2e-test-istio-ambient:
+ if: |
+ ( always() && ! cancelled() ) &&
+ ((github.event_name == 'schedule' && github.repository == 'apache/skywalking') || needs.changes.outputs.oap == 'true')
+ name: E2E test
+ needs: [docker]
+ runs-on: ubuntu-24.04
+ timeout-minutes: 60
+ strategy:
+ fail-fast: false
+ matrix:
+ analyzer: [k8s-mesh, mx-mesh]
+ versions:
+ - istio: 1.23.0
+ kubernetes: 28
+ - istio: 1.24.0
+ kubernetes: 28
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ submodules: true
+ persist-credentials: false
+ - run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
+ - uses: apache/skywalking-cli/actions/setup@master
+ with:
+ version: ${{ env.SW_CTL_COMMIT }}
+ - uses: actions/download-artifact@v4
+ name: Download docker images
+ with:
+ name: docker-images-11
+ path: docker-images
+ - name: Load docker images
+ run: |
+ find docker-images -name "*.tar" -exec docker load -i {} \;
+ find docker-images -name "*.tar" -exec rm {} \;
+ - name: Login to ghcr
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: ${{ matrix.test.name }}
+ uses: apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+ env:
+ ISTIO_VERSION: ${{ matrix.versions.istio }}
+ KUBERNETES_VERSION: ${{ matrix.versions.kubernetes }}
+ ALS_ANALYZER: ${{ matrix.analyzer }}
+ with:
+ e2e-file: test/e2e-v2/cases/istio/ambient-als/e2e.yaml
+ - if: ${{ failure() }}
+ run: |
+ df -h
+ du -sh .
+ docker images
+ - uses: actions/upload-artifact@v4
+ if: ${{ failure() }}
+ name: Upload Logs
+ with:
+ name: test-istio-ambient-logs-${{ matrix.test.name }}
+
e2e-test-java-versions:
if: |
( always() && ! cancelled() ) &&
@@ -1005,6 +1064,7 @@ jobs:
- slow-integration-test
- e2e-test
- e2e-test-istio
+ - e2e-test-istio-ambient
- e2e-test-java-versions
runs-on: ubuntu-latest
timeout-minutes: 10
@@ -1024,6 +1084,7 @@ jobs:
timeConsumingITResults=${{ needs.slow-integration-test.result }};
e2eResults=${{ needs.e2e-test.result }};
e2eIstioResults=${{ needs.e2e-test-istio.result }};
+ e2eIstioAmbientResults=${{ needs.e2e-test-istio-ambient.result }};
e2eJavaVersionResults=${{ needs.e2e-test-java-versions.result }};
[[ ${depLicenseResults} == 'success' ]] || [[ ${execute} != 'true' && ${depLicenseResults} == 'skipped' ]] || exit -2;
@@ -1031,6 +1092,7 @@ jobs:
[[ ${integrationResults} == 'success' ]] || [[ ${execute} != 'true' && ${integrationResults} == 'skipped' ]] || exit -4;
[[ ${e2eResults} == 'success' ]] || [[ ${execute} != 'true' && ${e2eResults} == 'skipped' ]] || exit -5;
[[ ${e2eIstioResults} == 'success' ]] || [[ ${execute} != 'true' && ${e2eIstioResults} == 'skipped' ]] || exit -6;
+ [[ ${e2eIstioAmbientResults} == 'success' ]] || [[ ${execute} != 'true' && ${e2eIstioAmbientResults} == 'skipped' ]] || exit -6;
[[ ${e2eJavaVersionResults} == 'success' ]] || [[ ${execute} != 'true' && ${e2eJavaVersionResults} == 'skipped' ]] || exit -7;
[[ ${timeConsumingITResults} == 'success' ]] || [[ ${execute} != 'true' && ${timeConsumingITResults} == 'skipped' ]] || exit -8;
diff --git a/test/e2e-v2/cases/istio/ambient-als/e2e.yaml b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
index aad019f31bae..3edd86636779 100644
--- a/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
+++ b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
@@ -46,7 +46,7 @@ setup:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0-rc.1/standard-install.yaml
kubectl label namespace default istio.io/dataplane-mode=ambient
- name: install waypoint
- command: istioctl waypoint apply --name simple-http-waypoint && sleep 1
+ command: istioctl waypoint apply --name simple-http-waypoint && sleep 10
wait:
- namespace: default
resource: deployments/simple-http-waypoint
From 9a2deabc78983db641a0b0d330ee15da15b5477b Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 17:15:43 +0800
Subject: [PATCH 06/13] fix missing path
---
.github/workflows/skywalking.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 63e3179c4520..ef1223483e69 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -898,6 +898,7 @@ jobs:
name: Upload Logs
with:
name: test-istio-ambient-logs-${{ matrix.test.name }}
+ path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
e2e-test-java-versions:
if: |
From a733a9503c5fe2f0f49d9dc19388de413f64e1c3 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 18:13:43 +0800
Subject: [PATCH 07/13] fix missing service
---
.../ebpf/provider/handler/AccessLogServiceHandler.java | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
index 8b3edf6d5ff5..118eadaed38d 100644
--- a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java
@@ -200,6 +200,9 @@ protected void prepareForDispatch(NodeInfo node, ConnectionInfo connection, EBPF
}
protected void prepareDispatchForZtunnelMesh(NodeInfo node, ConnectionInfo connection, EBPFAccessLogMessage logMessage) {
+ final K8SServiceRelation serviceRelation = connection.toServiceRelation();
+ buildBaseServiceFromRelation(serviceRelation, Layer.MESH)
+ .forEach(sourceReceiver::receive);
// adapt to the mesh metrics
String tlsMode = Const.TLS_MODE.NON_TLS;
if (AccessLogConnectionTLSMode.TLS.equals(connection.getTlsMode())) {
@@ -918,8 +921,8 @@ protected List buildBaseServiceFromRelation(K8SServiceRelation relation
remoteService.setLayer(layer);
remoteService.setName(relation.getDestServiceName());
remoteService.setTimeBucket(TimeBucket.getMinuteTimeBucket(System.currentTimeMillis()));
- log.warn("generate the mesh layer service local service: {}, remote service: {}",
- relation.getSourceServiceName(), relation.getDestServiceName());
+ log.debug("generate the {} layer service local service: {}, remote service: {}",
+ layer, relation.getSourceServiceName(), relation.getDestServiceName());
return Arrays.asList(localService, remoteService);
}
}
From ec88c5551dbc1815e95db32299c5c8504ce83e23 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 18:18:11 +0800
Subject: [PATCH 08/13] fix e2e upload log name
---
.github/workflows/skywalking.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index ef1223483e69..1bde7c328a28 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -897,7 +897,7 @@ jobs:
if: ${{ failure() }}
name: Upload Logs
with:
- name: test-istio-ambient-logs-${{ matrix.test.name }}
+ name: test-istio-ambient-logs-${{ matrix.versions.istio }}-${{ matrix.versions.kubernetes }}-${{ matrix.analyzer }}
path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
e2e-test-java-versions:
From 6fdfd672a9fa51bb8cdc6bfd498c70c33dd71db6 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 19:38:49 +0800
Subject: [PATCH 09/13] adding debug logs
---
test/e2e-v2/cases/istio/values.yaml | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/test/e2e-v2/cases/istio/values.yaml b/test/e2e-v2/cases/istio/values.yaml
index 27426bbd75f0..115282057d31 100644
--- a/test/e2e-v2/cases/istio/values.yaml
+++ b/test/e2e-v2/cases/istio/values.yaml
@@ -18,6 +18,25 @@ oap:
metadata-service-mapping.yaml: |
serviceName: e2e::${LABELS."service.istio.io/canonical-name",SERVICE}
serviceInstanceName: ${NAME}
+ log4j2.xml: |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
elasticsearch:
esConfig:
From edd4f1a6236a8e25cee32a228ab69af53d9d882b Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 21:57:52 +0800
Subject: [PATCH 10/13] add sleep for waiting rover monitoring all process
success
---
test/e2e-v2/cases/istio/ambient-als/e2e.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/e2e-v2/cases/istio/ambient-als/e2e.yaml b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
index 3edd86636779..8017f29b44e4 100644
--- a/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
+++ b/test/e2e-v2/cases/istio/ambient-als/e2e.yaml
@@ -99,7 +99,7 @@ setup:
resource: pod
for: condition=Ready
- name: Status of istio mesh
- command: istioctl zc all
+ command: istioctl zc all && sleep 15 # sleep for waiting the rover ready to monitoring all services
- name: Generate traffic
path: traffic-gen.yaml
wait:
From 50f569a8cc98a776a860f7c72c5427b822c6c8ee Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Wed, 21 May 2025 21:58:02 +0800
Subject: [PATCH 11/13] add sleep for waiting rover monitoring all process
success
---
.../expected/dependency-global-mesh.yml | 31 +++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
index d9013b28815c..438172c4b3a6 100644
--- a/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
+++ b/test/e2e-v2/cases/istio/ambient-als/expected/dependency-global-mesh.yml
@@ -25,6 +25,15 @@ nodes:
- MESH
- K8S_SERVICE
{{- end }}
+- id: {{ b64enc "simple-http-waypoint.default"}}.1
+ name: simple-http-waypoint.default
+ type: tls
+ isreal: true
+ layers:
+ {{- contains .layers }}
+ - MESH
+ - K8S_SERVICE
+ {{- end }}
- id: {{ b64enc "productpage.default"}}.1
name: productpage.default
type: http
@@ -52,11 +61,29 @@ calls:
- tcp
- http
{{- end }}
+ target: {{ b64enc "simple-http-waypoint.default"}}.1
+ targetcomponents:
+ {{- contains .targetcomponents }}
+ - ztunnel
+ {{- end }}
+ id: {{ b64enc "productpage.default"}}.1-{{ b64enc "simple-http-waypoint.default"}}.1
+ detectpoints:
+ - CLIENT
+ - SERVER
+- source: {{ b64enc "simple-http-waypoint.default"}}.1
+ sourcecomponents:
+ {{- contains .sourcecomponents }}
+ - tls
+ {{- end }}
target: {{ b64enc "details.default"}}.1
- targetcomponents: []
- id: {{ b64enc "productpage.default"}}.1-{{ b64enc "details.default"}}.1
+ targetcomponents:
+ {{- contains .targetcomponents }}
+ - ztunnel
+ {{- end }}
+ id: {{ b64enc "simple-http-waypoint.default" }}.1-{{ b64enc "details.default"}}.1
detectpoints:
- CLIENT
+ - SERVER
- source: {{ b64enc "productpage.default" }}.1
sourcecomponents:
{{- contains .sourcecomponents }}
From fd2652e31827c980c7a1cb0bc0612663573cacbe Mon Sep 17 00:00:00 2001
From: Wan Kai
Date: Thu, 22 May 2025 08:22:13 +0800
Subject: [PATCH 12/13] Update banyandb stage e2e.yaml
---
test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml b/test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml
index 70d9466e447c..d02da95cc7cd 100644
--- a/test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml
+++ b/test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml
@@ -66,6 +66,6 @@ verify:
- query: |
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls --trace-id=$( \
swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql trace ls --tags http.method=get --start="-96h" --end="-48h" --cold=true \
- | yq e '.traces | select(.[].endpointnames[0]=="/dubbox-case/case/dubbox-rest/404-test") | .[0].traceids[0]' -
+ | yq e '.traces | select(.[].endpointnames[0]=="/dubbox-case/case/dubbox-rest/404-test") | .[2].traceids[0]' -
) --start="-96h" --end="-48h" --cold=true
expected: ../../expected/cold/trace-detail.yml
From b4e209d117534b900c74d79754351d3a2083f624 Mon Sep 17 00:00:00 2001
From: mrproliu <741550557@qq.com>
Date: Thu, 22 May 2025 12:44:29 +0800
Subject: [PATCH 13/13] fix E2E
---
test/e2e-v2/cases/php/e2e.yaml | 4 ++--
test/e2e-v2/script/env | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/test/e2e-v2/cases/php/e2e.yaml b/test/e2e-v2/cases/php/e2e.yaml
index bed6bfeddfd8..dd8ced3960a3 100644
--- a/test/e2e-v2/cases/php/e2e.yaml
+++ b/test/e2e-v2/cases/php/e2e.yaml
@@ -38,8 +38,8 @@ trigger:
verify:
# verify with retry strategy
retry:
- count: 20
- interval: 10s
+ count: 30
+ interval: 15s
cases:
# layer list
- query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql layer ls
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index d5382b05c729..09ad865c6c89 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -22,7 +22,7 @@ SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
-SW_ROVER_COMMIT=a2b39580d8021cfff3da12b4074faedbe7c85752
+SW_ROVER_COMMIT=79292fe07f17f98f486e0c4471213e1961fb2d1d
SW_BANYANDB_COMMIT=c4b4384f3083f44ca6067257f5fa59030427ad6b
SW_AGENT_PHP_COMMIT=3192c553002707d344bd6774cfab5bc61f67a1d3
SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994