This is an automated email from the ASF dual-hosted git repository.

liuhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b40270f71 Add the eBPF network profiling E2E Test in per storage 
(#10245)
2b40270f71 is described below

commit 2b40270f711900917252591f16f095f46b6c79ac
Author: mrproliu <[email protected]>
AuthorDate: Fri Jan 6 21:53:39 2023 +0800

    Add the eBPF network profiling E2E Test in per storage (#10245)
---
 .github/workflows/skywalking.yaml                  |  29 +++-
 docs/en/changes/changes.md                         |   1 +
 .../banyandb/measure/BanyanDBTopologyQueryDAO.java |  10 +-
 .../stream/BanyanDBEBPFProfilingTaskDAO.java       |   3 +-
 .../profiling/ebpf/network/Dockerfile.service      |  26 ++++
 .../ebpf/network/banyandb/docker-compose.yml       |  80 +++++++++++
 .../{traffic-gen.yaml => banyandb/e2e.yaml}        |  54 +++----
 .../profiling/ebpf/network/docker-compose.yml      |  76 ++++++++++
 test/e2e-v2/cases/profiling/ebpf/network/e2e.yaml  |  99 -------------
 .../profiling/ebpf/network/es-sharding/e2e.yaml    | 100 -------------
 .../profiling/ebpf/network/es/docker-compose.yml   |  88 ++++++++++++
 .../ebpf/network/{traffic-gen.yaml => es/e2e.yaml} |  54 +++----
 .../ebpf/network/es/es-sharding/docker-compose.yml |  89 ++++++++++++
 .../{traffic-gen.yaml => es/es-sharding/e2e.yaml}  |  54 +++----
 .../ebpf/network/expected/dependency-processs.yml  |  92 ++++--------
 .../profiling/ebpf/network/expected/process.yml    |  69 ++-------
 .../ebpf/network/expected/service-instance.yml     |   8 +-
 .../profiling/ebpf/network/expected/service.yml    |  63 ++-------
 .../ebpf/network/expected/skywalking-trace.yml     |  51 +++++++
 .../status-4xx-traces.yml}                         |  31 +----
 ...{service-instance.yml => status-5xx-traces.yml} |  11 +-
 test/e2e-v2/cases/profiling/ebpf/network/go.mod    |  34 +++++
 .../profiling/ebpf/network/h2/docker-compose.yml   |  88 ++++++++++++
 .../ebpf/network/{traffic-gen.yaml => h2/e2e.yaml} |  54 +++----
 test/e2e-v2/cases/profiling/ebpf/network/kind.yaml |  39 ------
 .../ebpf/network/mysql/docker-compose.yml          |  90 ++++++++++++
 .../network/{traffic-gen.yaml => mysql/e2e.yaml}   |  54 +++----
 .../profiling/ebpf/network/network-cases.yaml      | 138 ++++++++++++------
 .../profiling/ebpf/network/network-profiling.yaml  | 139 ++++++++++++++++++
 .../e2e-v2/cases/profiling/ebpf/network/nginx.conf |  32 +++++
 .../ebpf/network/opensearch/docker-compose.yml     |  93 +++++++++++++
 .../{traffic-gen.yaml => opensearch/e2e.yaml}      |  54 +++----
 .../ebpf/network/postgres/docker-compose.yml       |  89 ++++++++++++
 .../{traffic-gen.yaml => postgres/e2e.yaml}        |  54 +++----
 .../e2e-v2/cases/profiling/ebpf/network/rover.yaml | 103 --------------
 .../profiling/ebpf/network/rover_configs.yaml      | 155 +++++++++++++++++++++
 .../cases/profiling/ebpf/network/sampling.yaml     |  29 ++++
 .../e2e-v2/cases/profiling/ebpf/network/service.go |  89 ++++++++++++
 .../profiling/ebpf/network/slow-trace-lal.yaml     |  64 +++++++++
 .../profiling/ebpf/network/tidb/docker-compose.yml |  91 ++++++++++++
 .../network/{traffic-gen.yaml => tidb/e2e.yaml}    |  54 +++----
 test/e2e-v2/script/env                             |   4 +-
 42 files changed, 1827 insertions(+), 808 deletions(-)

diff --git a/.github/workflows/skywalking.yaml 
b/.github/workflows/skywalking.yaml
index 2dd30ae57c..e0828e91c9 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -518,14 +518,29 @@ jobs:
           - name: eBPF Profiling Off CPU
             config: test/e2e-v2/cases/profiling/ebpf/offcpu/e2e.yaml
             runs-on: ubuntu-20.04
-          - name: eBPF Profiling Network
-            config: test/e2e-v2/cases/profiling/ebpf/network/e2e.yaml
-            env: ISTIO_VERSION=1.13.1
-            runs-on: ubuntu-20.04
+          - name: eBPF Profiling Network BanyanDB
+            config: test/e2e-v2/cases/profiling/ebpf/network/banyandb/e2e.yaml
+          - name: eBPF Profiling Network H2
+            config: test/e2e-v2/cases/profiling/ebpf/network/h2/e2e.yaml
+          - name: eBPF Profiling Network ES
+            config: test/e2e-v2/cases/profiling/ebpf/network/es/e2e.yaml
           - name: eBPF Profiling Network ES Sharding
-            config: 
test/e2e-v2/cases/profiling/ebpf/network/es-sharding/e2e.yaml
-            env: ISTIO_VERSION=1.13.1
-            runs-on: ubuntu-20.04
+            config: 
test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/e2e.yaml
+          - name: eBPF Profiling Network MySQL
+            config: test/e2e-v2/cases/profiling/ebpf/network/mysql/e2e.yaml
+          - name: eBPF Profiling Network Postgres
+            config: test/e2e-v2/cases/profiling/ebpf/network/postgres/e2e.yaml
+          - name: eBPF Profiling Network TiDB
+            config: test/e2e-v2/cases/profiling/ebpf/network/tidb/e2e.yaml
+          - name: eBPF Profiling Network OpenSearch 1.1.0
+            config: 
test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
+            env: OPENSEARCH_VERSION=1.1.0
+          - name: eBPF Profiling Network OpenSearch 1.3.6
+            config: 
test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
+            env: OPENSEARCH_VERSION=1.3.6
+          - name: eBPF Profiling Network OpenSearch 2.4.0
+            config: 
test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
+            env: OPENSEARCH_VERSION=2.4.0
 
           - name: Kafka Basic
             config: test/e2e-v2/cases/kafka/simple-so11y/e2e.yaml
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 286c476fe6..36a37b9ce7 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -71,6 +71,7 @@
 * Support monitoring AWS Cloud EKS.
 * Bump BanyanDB Java client to 0.3.0-rc0.
 * [**Breaking Change**] The supported version of ShardingSphere-Proxy is 
upgraded from 5.1.2 to 5.3.1. Due to the changes of ShardingSphere's API, 
versions before 5.3.1 are not compatible.
+* Add the eBPF network profiling E2E Test in the per storage.
 
 #### UI
 
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
index c641e4d748..89c31bf45e 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java
@@ -321,13 +321,11 @@ public class BanyanDBTopologyQueryDAO extends 
AbstractBanyanDBDAO implements ITo
         List<Call.CallDetail> calls = new ArrayList<>(resp.size());
         for (final DataPoint dataPoint : resp.getDataPoints()) {
             final String entityId = dataPoint.getTagValue(Metrics.ENTITY_ID);
-            final IntList componentIds = new IntList(
-                    
dataPoint.getTagValue(ProcessRelationClientSideMetrics.COMPONENT_ID));
+            final Number componentIdNumber = 
dataPoint.getTagValue(ProcessRelationClientSideMetrics.COMPONENT_ID);
+            final int componentId = componentIdNumber.intValue();
             Call.CallDetail call = new Call.CallDetail();
-            for (int i = 0; i < componentIds.size(); i++) {
-                call.buildFromServiceRelation(entityId, componentIds.get(i), 
detectPoint);
-                calls.add(call);
-            }
+            call.buildProcessRelation(entityId, componentId, detectPoint);
+            calls.add(call);
         }
 
         return calls;
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEBPFProfilingTaskDAO.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEBPFProfilingTaskDAO.java
index acd5fa8e07..6825bc4296 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEBPFProfilingTaskDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBEBPFProfilingTaskDAO.java
@@ -54,7 +54,8 @@ public class BanyanDBEBPFProfilingTaskDAO extends 
AbstractBanyanDBDAO implements
             EBPFProfilingTaskRecord.FIXED_TRIGGER_DURATION,
             EBPFProfilingTaskRecord.TARGET_TYPE,
             EBPFProfilingTaskRecord.CREATE_TIME,
-            EBPFProfilingTaskRecord.LAST_UPDATE_TIME);
+            EBPFProfilingTaskRecord.LAST_UPDATE_TIME,
+            EBPFProfilingTaskRecord.EXTENSION_CONFIG_JSON);
 
     private static final Gson GSON = new Gson();
 
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/Dockerfile.service 
b/test/e2e-v2/cases/profiling/ebpf/network/Dockerfile.service
new file mode 100644
index 0000000000..b57a491501
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/Dockerfile.service
@@ -0,0 +1,26 @@
+# 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.
+
+FROM golang:1.17
+
+WORKDIR /
+COPY service.go /service/service.go
+COPY go.mod /service/go.mod
+
+WORKDIR /service
+RUN go get test && go build -o service .
+
+CMD ["/service/service"]
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/banyandb/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/banyandb/docker-compose.yml
new file mode 100644
index 0000000000..e0236f3293
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/banyandb/docker-compose.yml
@@ -0,0 +1,80 @@
+# 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.
+
+version: '2.1'
+
+services:
+  banyandb:
+    extends:
+      file: ../docker-compose.yml
+      service: banyandb
+    networks:
+      - e2e
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: banyandb
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/banyandb/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/banyandb/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/banyandb/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/docker-compose.yml
new file mode 100644
index 0000000000..221d2b04b8
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/docker-compose.yml
@@ -0,0 +1,76 @@
+# 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.
+
+version: '2.1'
+
+services:
+  oap:
+    extends:
+      file: ../../../../script/docker-compose/base-compose.yml
+      service: oap
+    environment:
+      SW_METER_ANALYZER_ACTIVE_FILES: network-profiling
+      SW_LOG_LAL_FILES: slow-trace-lal
+    volumes:
+      - 
./network-profiling.yaml:/skywalking/config/meter-analyzer-config/network-profiling.yaml
+      - ./slow-trace-lal.yaml:/skywalking/config/lal/slow-trace-lal.yaml
+
+  banyandb:
+    extends:
+      file: ../../../../script/docker-compose/base-compose.yml
+      service: banyandb
+
+  service:
+    build:
+      context: .
+      dockerfile: Dockerfile.service
+    expose:
+      - 80
+    networks:
+      - e2e
+
+  rover:
+    image: 
"ghcr.io/apache/skywalking-rover/skywalking-rover:${SW_ROVER_COMMIT}"
+    networks:
+      - e2e
+    privileged: true
+    pid: host
+    environment:
+      ROVER_HOST_MAPPING: /host
+      ROVER_BACKEND_ADDR: oap:11800
+      ROVER_PROFILING_ACTIVE: "true"
+      ROVER_PROFILING_CHECK_INTERVAL: 2s
+      ROVER_PROFILING_FLUSH_INTERVAL: 5s
+      ROVER_PROFILING_TASK_ON_CPU_DUMP_PERIOD: 9ms
+    volumes:
+      - /:/host
+      - ./rover_configs.yaml:/skywalking/configs/rover_configs.yaml
+
+  proxy:
+    image: nginx:1.23.3
+    networks:
+      - e2e
+    volumes:
+      - ./nginx.conf:/etc/nginx/nginx.conf
+    expose:
+      - 80
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/e2e.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/e2e.yaml
deleted file mode 100644
index f7ac2acf7f..0000000000
--- a/test/e2e-v2/cases/profiling/ebpf/network/e2e.yaml
+++ /dev/null
@@ -1,99 +0,0 @@
-# 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
-    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=demo
-        kubectl label namespace default istio-injection=enabled
-    - 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: |
-        helm -n istio-system install skywalking \
-          oci://ghcr.io/apache/skywalking-kubernetes/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_METER_ANALYZER_ACTIVE_FILES='network-profiling' \
-          --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
-      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
-        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-all-v1.yaml
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-    - name: Install SkyWalking Rover
-      command: |
-        envsubst < test/e2e-v2/cases/profiling/ebpf/network/rover.yaml | 
kubectl apply -f -
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-    - name: Generate traffic
-      path: traffic-gen.yaml
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-  timeout: 25m
-
-verify:
-  retry:
-    count: 20
-    interval: 10s
-  cases:
-    - includes:
-        - ./network-cases.yaml
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/es-sharding/e2e.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/es-sharding/e2e.yaml
deleted file mode 100644
index b7f7c2b3af..0000000000
--- a/test/e2e-v2/cases/profiling/ebpf/network/es-sharding/e2e.yaml
+++ /dev/null
@@ -1,100 +0,0 @@
-# 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
-    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=demo
-        kubectl label namespace default istio-injection=enabled
-    - 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: |
-        helm -n istio-system install skywalking \
-          oci://ghcr.io/apache/skywalking-kubernetes/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_METER_ANALYZER_ACTIVE_FILES='network-profiling' \
-          --set oap.env.SW_STORAGE_ES_LOGIC_SHARDING='true' \
-          --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
-      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
-        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-all-v1.yaml
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-    - name: Install SkyWalking Rover
-      command: |
-        envsubst < test/e2e-v2/cases/profiling/ebpf/network/rover.yaml | 
kubectl apply -f -
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-    - name: Generate traffic
-      path: ../traffic-gen.yaml
-      wait:
-        - namespace: default
-          resource: pod
-          for: condition=Ready
-  timeout: 25m
-
-verify:
-  retry:
-    count: 20
-    interval: 10s
-  cases:
-    - includes:
-        - ../network-cases.yaml
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/es/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/es/docker-compose.yml
new file mode 100644
index 0000000000..1ea88c36a8
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/es/docker-compose.yml
@@ -0,0 +1,88 @@
+# 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.
+
+version: '2.1'
+
+services:
+  es:
+    image: elastic/elasticsearch:7.15.0
+    expose:
+      - 9200
+    networks:
+      - e2e
+    environment:
+      - discovery.type=single-node
+      - cluster.routing.allocation.disk.threshold_enabled=false
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9200" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: elasticsearch
+    depends_on:
+      es:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/es/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/es/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/es/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/docker-compose.yml
new file mode 100644
index 0000000000..8c0a3e7d66
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/docker-compose.yml
@@ -0,0 +1,89 @@
+# 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.
+
+version: '2.1'
+
+services:
+  es:
+    image: elastic/elasticsearch:7.15.0
+    expose:
+      - 9200
+    networks:
+      - e2e
+    environment:
+      - discovery.type=single-node
+      - cluster.routing.allocation.disk.threshold_enabled=false
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9200" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: elasticsearch
+      SW_STORAGE_ES_LOGIC_SHARDING: "true"
+    depends_on:
+      es:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/e2e.yaml
index 73853c7418..588d81d7f1 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/es/es-sharding/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../../network-cases.yaml
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/expected/dependency-processs.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/dependency-processs.yml
index 3ec39aedd3..cc07f7a10a 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/expected/dependency-processs.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/dependency-processs.yml
@@ -15,89 +15,51 @@
 
 {{- define "genProcessId" }}
 {{- with $processName := . }}
-{{- with $serviceId := "default::productpage" | b64enc | printf "%s.1" }}
-{{- with $instanceId := "productpage" | b64enc | printf "%s_%s" $serviceId }}
+{{- with $serviceId := "service" | b64enc | printf "%s.1" }}
+{{- with $instanceId := "test" | b64enc | printf "%s_%s" $serviceId }}
 {{- printf "%s" (sha256enc (printf "%s_%s" $processName $instanceId)) }}
 {{- end }}
 {{- end }}
 {{- end }}
 {{- end}}
 
-# ingress pod name
-{{ $ingressProcessName := "" }}
-{{ range .nodes }}
-{{ if hasPrefix .name "istio-ingressgateway" }}
-{{ $ingressProcessName = .name }}
-{{ end }}
-{{ end }}
-
 nodes:
 {{- contains .nodes }}
-- id: {{template "genProcessId" "/usr/local/bin/python"}}
-  name: /usr/local/bin/python
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  serviceinstanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc 
"productpage" }}
-  serviceinstancename: productpage
-  isreal: true
-- id: {{template "genProcessId" "envoy"}}
-  name: envoy
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  serviceinstanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc 
"productpage" }}
-  serviceinstancename: productpage
+- id: {{template "genProcessId" "service"}}
+  name: service
+  serviceid: {{ b64enc "service" }}.1
+  servicename: service
+  serviceinstanceid: {{ b64enc "service" }}.1_{{ b64enc "test" }}
+  serviceinstancename: test
   isreal: true
-- id: {{template "genProcessId" $ingressProcessName }}
-  name: {{$ingressProcessName}}
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  serviceinstanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc 
"productpage" }}
-  serviceinstancename: productpage
-  isreal: false
-- id: {{template "genProcessId" "kube-dns.kube-system" }}
-  name: kube-dns.kube-system
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  serviceinstanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc 
"productpage" }}
-  serviceinstancename: productpage
+- id: {{template "genProcessId" "UNKNOWN_REMOTE"}}
+  name: UNKNOWN_REMOTE
+  serviceid: {{ b64enc "service" }}.1
+  servicename: service
+  serviceinstanceid: {{ b64enc "service" }}.1_{{ b64enc "test" }}
+  serviceinstancename: test
   isreal: false
 {{- end }}
 calls:
 {{- contains .calls }}
-- source: {{template "genProcessId" "/usr/local/bin/python"}}
-  sourcecomponents:
-    - http
-  target: {{template "genProcessId" "envoy"}}
-  targetcomponents:
-    - http
-  id: {{template "genProcessId" "/usr/local/bin/python"}}-{{template 
"genProcessId" "envoy"}}
-  detectpoints:
-    - CLIENT
-    - SERVER
-- source: {{template "genProcessId" "envoy"}}
+- source: {{template "genProcessId" "service"}}
   sourcecomponents:
-    - http
-  target: {{template "genProcessId" "/usr/local/bin/python"}}
-  targetcomponents:
-    - http
-  id: {{template "genProcessId" "envoy"}}-{{template "genProcessId" 
"/usr/local/bin/python"}}
+  {{- contains .sourcecomponents }}
+  - http
+  {{- end }}
+  target: {{template "genProcessId" "UNKNOWN_REMOTE"}}
+  targetcomponents: []
+  id: {{template "genProcessId" "service"}}-{{template "genProcessId" 
"UNKNOWN_REMOTE"}}
   detectpoints:
     - CLIENT
-    - SERVER
-- source: {{template "genProcessId" $ingressProcessName}}
+- source: {{template "genProcessId" "UNKNOWN_REMOTE"}}
   sourcecomponents: []
-  target: {{template "genProcessId" "envoy"}}
+  target: {{template "genProcessId" "service"}}
   targetcomponents:
-    - https
-  id: {{template "genProcessId" $ingressProcessName}}-{{template 
"genProcessId" "envoy"}}
+    {{- contains .targetcomponents }}
+    - http
+    {{- end }}
+  id: {{template "genProcessId" "UNKNOWN_REMOTE"}}-{{template "genProcessId" 
"service"}}
   detectpoints:
     - SERVER
-- source: {{template "genProcessId" "envoy"}}
-  sourcecomponents:
-    - tcp
-  target: {{template "genProcessId" "kube-dns.kube-system"}}
-  targetcomponents: []
-  id: {{template "genProcessId" "envoy"}}-{{template "genProcessId" 
"kube-dns.kube-system"}}
-  detectpoints:
-    - CLIENT
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/expected/process.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/process.yml
index 498938be5f..02e518bc14 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/expected/process.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/process.yml
@@ -15,72 +15,21 @@
 
 {{- contains . }}
 - id: {{ notEmpty .id }}
-  name: /usr/local/bin/python
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  instanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" }}
-  instancename: productpage
+  name: service
+  serviceid: {{ b64enc "service" }}.1
+  servicename: service
+  instanceid: {{ b64enc "service" }}.1_{{ b64enc "test" }}
+  instancename: test
   agentid: {{ notEmpty .agentid }}
-  detecttype: KUBERNETES
+  detecttype: VM
   attributes:
     {{- contains .attributes }}
     - name: host_ip
       value: {{ notEmpty .value }}
-    - name: container_ip
-      value: {{ notEmpty .value }}
-    - name: pid
-      value: {{ notEmpty .value }}
-    - name: command_line
-      value: {{ notEmpty .value }}
-    - name: support_ebpf_profiling
-      value: "false"
-    {{- end }}
-  labels:
-    - mesh-application
-- id: {{ notEmpty .id }}
-  name: envoy
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  instanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" }}
-  instancename: productpage
-  agentid: {{ notEmpty .agentid }}
-  detecttype: KUBERNETES
-  attributes:
-    {{- contains .attributes }}
-    - name: host_ip
-      value: {{ notEmpty .value }}
-    - name: container_ip
-      value: {{ notEmpty .value }}
     - name: pid
       value: {{ notEmpty .value }}
     - name: command_line
-      value: {{ notEmpty .value }}
-    - name: support_ebpf_profiling
-      value: true
-    {{- end }}
-  labels:
-    - mesh-envoy
-- id: {{ notEmpty .id }}
-  name: pilot-agent
-  serviceid: {{ b64enc "default::productpage" }}.1
-  servicename: default::productpage
-  instanceid: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" }}
-  instancename: productpage
-  agentid: {{ notEmpty .agentid }}
-  detecttype: KUBERNETES
-  attributes:
-    {{- contains .attributes }}
-    - name: host_ip
-      value: {{ notEmpty .value }}
-    - name: container_ip
-      value: {{ notEmpty .value }}
-    - name: pid
-      value: {{ notEmpty .value }}
-    - name: command_line
-      value: {{ notEmpty .value }}
-    - name: support_ebpf_profiling
-      value: "false"
+      value: /service/service
     {{- end }}
-  labels:
-    - mesh-envoy
-{{- end }}
+  labels: []
+{{- end }}
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml
index 45640d753d..ada9e9d646 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml
@@ -14,9 +14,9 @@
 # limitations under the License.
 
 {{- contains . }}
-- id: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" }}
-  name: productpage
+- id: {{ b64enc "service" }}.1_{{ b64enc "test" }}
+  name: test
   attributes: []
   language: UNKNOWN
-  instanceuuid: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" 
}}
-{{- end }}
+  instanceuuid: {{ notEmpty .instanceuuid }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/expected/service.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/service.yml
index 40bbced17c..490f19eae7 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/expected/service.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/service.yml
@@ -14,58 +14,21 @@
 # limitations under the License.
 
 {{- contains . }}
-- id: {{ b64enc "default::details" }}.1
-  name: default::details
-  group: default
-  shortname: details
+- id: {{ b64enc "nginx" }}.1
+  name: nginx
+  group: ""
+  shortname: nginx
   layers:
-    {{- contains .layers }}
-    - MESH_DP
-    - MESH
-    {{- end }}
+    - OS_LINUX
   normal: true
-- id: {{ b64enc "istio-system::istio-ingressgateway" }}.1
-  name: istio-system::istio-ingressgateway
-  group: istio-system
-  shortname: istio-ingressgateway
+- id: {{ b64enc "service" }}.1
+  name: service
+  group: ""
+  shortname: service
   layers:
-    - MESH_DP
-  normal: true
-- id: {{ b64enc "default::productpage" }}.1
-  name: default::productpage
-  group: default
-  shortname: productpage
-  layers:
-    {{- contains .layers }}
-    - MESH_DP
-    - MESH
-    {{- end }}
-  normal: true
-- id: {{ b64enc "default::ratings" }}.1
-  name: default::ratings
-  group: default
-  shortname: ratings
-  layers:
-    {{- contains .layers }}
-    - MESH_DP
-    - MESH
-    {{- end }}
-  normal: true
-- id: {{ b64enc "default::reviews" }}.1
-  name: default::reviews
-  group: default
-  shortname: reviews
-  layers:
-    {{- contains .layers }}
-    - MESH_DP
-    - MESH
-    {{- end }}
-  normal: true
-- id: {{ b64enc "istio-system::istio-egressgateway" }}.1
-  name: istio-system::istio-egressgateway
-  group: istio-system
-  shortname: istio-egressgateway
-  layers:
-    - MESH_DP
+  {{- contains .layers }}
+    - OS_LINUX
+    - GENERAL
+  {{- end }}
   normal: true
 {{- end }}
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/expected/skywalking-trace.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/skywalking-trace.yml
new file mode 100644
index 0000000000..4d7ab20396
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/skywalking-trace.yml
@@ -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.
+
+spans:
+{{- contains .spans}}
+- traceid: {{ notEmpty .traceid }}
+  segmentid: {{ notEmpty .segmentid }}
+  spanid: 0
+  parentspanid: -1
+  refs: []
+  servicecode: service
+  serviceinstancename: {{ notEmpty .serviceinstancename }}
+  starttime: {{ gt .starttime 0 }}
+  endtime: {{ gt .endtime 0 }}
+  endpointname: /provider
+  type: Exit
+  peer: http://proxy/provider
+  component: Unknown
+  iserror: false
+  layer: Unknown
+  tags: []
+  logs: []
+  attachedevents:
+  {{- contains .attachedevents}}
+    - starttime:
+        seconds: {{ gt .starttime.seconds 0 }}
+        nanos: {{ ge .starttime.nanos 0 }}
+      event: HTTP Request Sampling
+      endtime:
+        seconds: {{ gt .endtime.seconds 0 }}
+        nanos: {{ ge .endtime.nanos 0 }}
+      summary: []
+      tags:
+      {{- contains .tags }}
+      - key: data_size
+        value: {{ notEmpty .value }}
+      {{- end }}
+  {{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/status-4xx-traces.yml
similarity index 57%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/expected/status-4xx-traces.yml
index 73853c7418..3c942e0df6 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/status-4xx-traces.yml
@@ -13,28 +13,9 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+{{- contains . }}
+- name: skywalking-/notfound
+  id: {{ notEmpty .id }}
+  value: {{ notEmpty .value }}
+  refid: {{ notEmpty .refid }}
+{{- end }}
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/expected/status-5xx-traces.yml
similarity index 78%
copy from test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml
copy to test/e2e-v2/cases/profiling/ebpf/network/expected/status-5xx-traces.yml
index 45640d753d..38e23919a4 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/expected/service-instance.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/expected/status-5xx-traces.yml
@@ -14,9 +14,8 @@
 # limitations under the License.
 
 {{- contains . }}
-- id: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" }}
-  name: productpage
-  attributes: []
-  language: UNKNOWN
-  instanceuuid: {{ b64enc "default::productpage" }}.1_{{ b64enc "productpage" 
}}
-{{- end }}
+- name: skywalking-/provider
+  id: {{ notEmpty .id }}
+  value: {{ notEmpty .value }}
+  refid: {{ notEmpty .refid }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/go.mod 
b/test/e2e-v2/cases/profiling/ebpf/network/go.mod
new file mode 100644
index 0000000000..558ff24e02
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/go.mod
@@ -0,0 +1,34 @@
+// Licensed to 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. Apache Software Foundation (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.
+
+module test
+
+go 1.17
+
+require (
+       github.com/SkyAPM/go2sky v1.5.0 // indirect
+       github.com/golang/protobuf v1.5.2 // indirect
+       github.com/google/uuid v1.3.0 // indirect
+       github.com/pkg/errors v0.9.1 // indirect
+       golang.org/x/net v0.1.0 // indirect
+       golang.org/x/sys v0.1.0 // indirect
+       golang.org/x/text v0.4.0 // indirect
+       google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 // 
indirect
+       google.golang.org/grpc v1.50.1 // indirect
+       google.golang.org/protobuf v1.28.1 // indirect
+       skywalking.apache.org/repo/goapi v0.0.0-20221019074310-53ebda305187 // 
indirect
+)
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/h2/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/h2/docker-compose.yml
new file mode 100644
index 0000000000..529d90cda1
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/h2/docker-compose.yml
@@ -0,0 +1,88 @@
+# 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.
+
+version: '2.1'
+
+services:
+  h2db:
+    build:
+      context: ""
+      dockerfile: ../../../../../script/dockerfile/Dockerfile.h2
+    networks:
+      - e2e
+    expose:
+      - 1521
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/1521" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: h2
+      SW_STORAGE_H2_URL: jdbc:h2:tcp://h2db:1521/skywalking-oap-db
+    depends_on:
+      h2db:
+        condition: service_healthy
+    ports:
+      - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/h2/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/h2/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/h2/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/kind.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/kind.yaml
deleted file mode 100644
index c5aba55677..0000000000
--- a/test/e2e-v2/cases/profiling/ebpf/network/kind.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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.
-
-kind: Cluster
-apiVersion: kind.x-k8s.io/v1alpha4
-nodes:
-  # the control plane node config
-  - role: control-plane
-    image: 
kindest/node:v1.20.15@sha256:6f2d011dffe182bad80b85f6c00e8ca9d86b5b8922cdf433d53575c4c5212248
-    extraMounts:
-      - hostPath: /
-        containerPath: /host
-  - role: worker
-    image: 
kindest/node:v1.20.15@sha256:6f2d011dffe182bad80b85f6c00e8ca9d86b5b8922cdf433d53575c4c5212248
-    extraMounts:
-      - hostPath: /
-        containerPath: /host
-  - role: worker
-    image: 
kindest/node:v1.20.15@sha256:6f2d011dffe182bad80b85f6c00e8ca9d86b5b8922cdf433d53575c4c5212248
-    extraMounts:
-      - hostPath: /
-        containerPath: /host
-  - role: worker
-    image: 
kindest/node:v1.20.15@sha256:6f2d011dffe182bad80b85f6c00e8ca9d86b5b8922cdf433d53575c4c5212248
-    extraMounts:
-      - hostPath: /
-        containerPath: /host
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/mysql/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/mysql/docker-compose.yml
new file mode 100644
index 0000000000..f2616e9561
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/mysql/docker-compose.yml
@@ -0,0 +1,90 @@
+# 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.
+
+version: '2.1'
+
+services:
+  mysql:
+    image: mysql/mysql-server:8.0.13
+    networks:
+      - e2e
+    expose:
+      - 3306
+    environment:
+      - MYSQL_ROOT_PASSWORD=root@1234
+      - MYSQL_DATABASE=swtest
+      - MYSQL_ROOT_HOST=%
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/3306" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: mysql
+    entrypoint: ['sh', '-c', '/download-mysql.sh /skywalking/oap-libs && 
/skywalking/docker-entrypoint.sh']
+    ports:
+      - 12800
+    depends_on:
+      mysql:
+        condition: service_healthy
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/mysql/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/mysql/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/mysql/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/network-cases.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/network-cases.yaml
index 144a7d921c..af6bc805d7 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/network-cases.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/network-cases.yaml
@@ -15,86 +15,142 @@
 
 cases:
   # service list
-  - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 service ls
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/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=default::productpage
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql instance list 
--service-name=service
     expected: expected/service-instance.yml
-  - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 process list --service-name=default::productpage --instance-name=productpage
+  # process list
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql process list 
--service-name=service --instance-name=test
     expected: expected/process.yml
 
   # create network profiling task
-  - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 profiling ebpf create network --service-name=default::productpage 
--instance-name=productpage
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling ebpf create 
network --service-name=service --instance-name=test 
--sampling-config=test/e2e-v2/cases/profiling/ebpf/network/sampling.yaml
     expected: expected/profiling-create.yml
-  - query: swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 dep process --service-name default::productpage --instance-name=productpage
+  - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql dep process --service-name 
service --instance-name=test
     expected: expected/dependency-processs.yml
 
   # single value of process relation, client/server side read/write
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name process_relation_client_write_cpm|yq e 'to_entries' -
     expected: expected/metrics-has-value.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name process_relation_client_write_total_bytes|yq e 'to_entries' -
     expected: expected/metrics-has-value.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name process_relation_client_write_avg_exe_time|yq e 'to_entries' -
     expected: expected/metrics-has-value.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name process_relation_client_read_cpm|yq e 'to_entries' -
     expected: expected/metrics-has-value.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name 
UNKNOWN_REMOTE \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name service \
       --name process_relation_server_write_cpm|yq e 'to_entries' -
     expected: expected/metrics-has-value.yml
 
   # histogram value of process relation, client side write_rtt/write_exe/read 
time
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name=process_relation_client_write_rtt_time_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
     expected: expected/metrics-has-value-label.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
       --name=process_relation_client_write_exe_time_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
     expected: expected/metrics-has-value-label.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
-      --name=process_relation_client_read_exe_time_percentile|yq e 'to_entries 
| with(.[] ; .value=(.value | to_entries))' -
-    expected: expected/metrics-has-value-label.yml
-  - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name 
UNKNOWN_REMOTE \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name service \
       --name=process_relation_server_write_rtt_time_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
     expected: expected/metrics-has-value-label.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name 
UNKNOWN_REMOTE \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name service \
       --name=process_relation_server_write_exe_time_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
     expected: expected/metrics-has-value-label.yml
   - query: |
-      swctl --display yaml 
--base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql
 metrics multiple-linear \
-      --service-name default::productpage --instance-name productpage 
--process-name envoy \
-      --dest-service-name default::productpage --dest-instance-name 
productpage --dest-process-name /usr/local/bin/python \
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name 
UNKNOWN_REMOTE \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name service \
       --name=process_relation_server_write_exe_time_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
     expected: expected/metrics-has-value-label.yml
+
+  # HTTP/1.x metrics
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_request_cpm|yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_request_package_size|yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_response_package_size|yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_request_package_size_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics multiple-linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_response_package_size_percentile|yq e 
'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: |
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
metrics linear \
+      --service-name service --instance-name test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE \
+      --name process_relation_http1_client_duration|yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+
+  # slow traces
+  - query: |
+      traceid=$(swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql records list \
+      --name=sampled_slow_trace_record --service-name service --instance-name 
test --process-name service \
+      --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE 100 | yq e '. | map(select(.name == 
"skywalking-/provider")).[0].id' -);
+       swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
trace $traceid
+    expected: expected/skywalking-trace.yml
+  # not founds
+  - query: |
+      curl -s -k http://${service_host}:${service_80}/consumer?type=notfound > 
/dev/null;
+      sleep 5;
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
records list \
+        --name=sampled_status_4xx_trace_record --service-name service 
--instance-name test --process-name service \
+        --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE 20
+    expected: expected/status-4xx-traces.yml
+  - query: |
+      curl -s -k http://${service_host}:${service_80}/consumer?type=error > 
/dev/null;
+      sleep 5;
+      swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql 
records list \
+        --name=sampled_status_5xx_trace_record --service-name service 
--instance-name test --process-name service \
+        --dest-service-name service --dest-instance-name test 
--dest-process-name UNKNOWN_REMOTE 20
+    expected: expected/status-5xx-traces.yml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/network-profiling.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/network-profiling.yaml
new file mode 100644
index 0000000000..2e6b3e9619
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/network-profiling.yaml
@@ -0,0 +1,139 @@
+# 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.
+
+expSuffix: |-
+  processRelation('side', ['service'], ['instance'], 'client_process_id', 
'server_process_id', 'component')
+expPrefix: |-
+  forEach(['client', 'server'], { prefix, tags ->
+    if (tags[prefix + '_process_id'] != null) {
+      return
+    }
+    // only care about the nginx
+    if (tags[prefix + '_local'] == 'true'
+      || tags[prefix + '_address'].split(':')[0].endsWith('.1') // local data
+      || tags[prefix + '_address'].split(':')[1] == '11800'     // oap
+      || tags[prefix + '_address'].split(':')[1] == '53') {     // dns
+      tags[prefix + '_process_id'] = 
ProcessRegistry.generateVirtualLocalProcess(tags.service, tags.instance)
+      return
+    }
+    tags[prefix + '_process_id'] = 
ProcessRegistry.generateVirtualProcess(tags.service, tags.instance, 
'UNKNOWN_REMOTE')
+  })
+  .forEach(['component'], { key, tags ->
+    String result = ""
+    // protocol are defined in the component-libraries.yml
+    String protocol = tags['protocol']
+    String ssl = tags['is_ssl']
+    if (protocol == 'http' && ssl == 'true') {
+      result = '129'  // https
+    } else if (protocol == 'http') {
+      result = '49'   // http
+    } else if (ssl == 'true') {
+      result = '130'  // tls
+    } else {
+      result = '110'  // tcp
+    }
+    tags[key] = result
+  })
+metricPrefix: process_relation
+metricsRules:
+  # TCP Metrics: client side
+  - name: client_write_cpm
+    exp:  rover_net_p_client_write_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_write_total_bytes
+    exp:  rover_net_p_client_write_bytes_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_write_avg_exe_time
+    exp:  rover_net_p_client_write_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: client_read_cpm
+    exp:  rover_net_p_client_read_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_read_total_bytes
+    exp:  rover_net_p_client_read_bytes_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_read_avg_exe_time
+    exp: rover_net_p_client_read_exe_time_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: client_write_avg_rtt_time
+    exp: rover_net_p_client_write_rtt_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: client_connect_cpm
+    exp: rover_net_p_client_connect_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_connect_exe_time
+    exp: rover_net_p_client_connect_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: client_close_cpm
+    exp: rover_net_p_client_close_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_close_avg_exe_time
+    exp: rover_net_p_client_close_exe_time_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: client_retransmit_cpm
+    exp: rover_net_p_client_retransmit_counts_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_drop_cpm
+    exp: rover_net_p_client_drop_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: client_write_rtt_time_percentile
+    exp: 
rover_net_p_client_write_rtt_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: client_write_exe_time_percentile
+    exp: 
rover_net_p_client_write_exe_time_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: client_read_exe_time_percentile
+    exp: 
rover_net_p_client_read_exe_time_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+
+  # TCP Metrics: server side
+  - name: server_write_cpm
+    exp:  rover_net_p_server_write_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_write_total_bytes
+    exp:  rover_net_p_server_write_bytes_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_write_avg_exe_time
+    exp:  rover_net_p_server_write_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: server_read_cpm
+    exp:  rover_net_p_server_read_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_read_total_bytes
+    exp:  rover_net_p_server_read_bytes_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_read_avg_exe_time
+    exp: rover_net_p_server_read_exe_time_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: server_write_avg_rtt_time
+    exp: rover_net_p_server_write_rtt_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: server_connect_cpm
+    exp: rover_net_p_server_connect_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_connect_avg_exe_time
+    exp: rover_net_p_server_connect_exe_time_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: server_close_cpm
+    exp: rover_net_p_server_close_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_close_avg_exe_time
+    exp: rover_net_p_server_close_exe_time_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: server_retransmit_cpm
+    exp: rover_net_p_server_retransmit_counts_counter.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_drop_cpm
+    exp: rover_net_p_server_drop_counts_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: server_write_rtt_time_percentile
+    exp: 
rover_net_p_server_write_rtt_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: server_write_exe_time_percentile
+    exp: 
rover_net_p_server_write_exe_time_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: server_read_exe_time_percentile
+    exp: 
rover_net_p_server_read_exe_time_histogram.histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+
+  # HTTP/1.x Metrics
+  - name: http1_request_cpm
+    exp: rover_net_p_http1_request_counter.sum(['service', 'instance', 'side', 
'client_process_id', 'server_process_id', 
'component']).downsampling(SUM_PER_MIN)
+  - name: http1_response_status_cpm
+    exp: rover_net_p_http1_response_status_counter.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component', 
'code']).downsampling(SUM_PER_MIN)
+  - name: http1_request_package_size
+    exp: rover_net_p_http1_request_package_size_avg.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: http1_response_package_size
+    exp: rover_net_p_http1_response_package_size_avg.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: http1_request_package_size_percentile
+    exp: rover_net_p_http1_request_package_size_histogram.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component', 
'le']).histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: http1_response_package_size_percentile
+    exp: rover_net_p_http1_response_package_size_histogram.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component', 
'le']).histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: http1_client_duration
+    exp: rover_net_p_http1_client_duration_avg.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: http1_server_duration
+    exp: rover_net_p_http1_server_duration_avg.sum(['service', 'instance', 
'side', 'client_process_id', 'server_process_id', 'component'])
+  - name: http1_client_duration_percentile
+    exp: rover_net_p_http1_client_duration_histogram.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component', 
'le']).histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
+  - name: http1_server_duration_percentile
+    exp: rover_net_p_http1_server_duration_histogram.sum(['service', 
'instance', 'side', 'client_process_id', 'server_process_id', 'component', 
'le']).histogram().histogram_percentile([50,70,90,99]).downsampling(SUM)
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/nginx.conf 
b/test/e2e-v2/cases/profiling/ebpf/network/nginx.conf
new file mode 100644
index 0000000000..e64bf74de1
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/nginx.conf
@@ -0,0 +1,32 @@
+# 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.
+
+user nginx;
+worker_processes  auto;
+events {
+       worker_connections  102400;
+}
+http {
+       server {
+               listen       80;
+               server_name proxy;
+
+               location /provider {
+                   proxy_pass http://service:80/provider;
+                   proxy_http_version 1.1;
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/opensearch/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/opensearch/docker-compose.yml
new file mode 100644
index 0000000000..59df36ac75
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/opensearch/docker-compose.yml
@@ -0,0 +1,93 @@
+# 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.
+
+version: '2.1'
+
+services:
+  opensearch:
+    image: opensearchproject/opensearch:${OPENSEARCH_VERSION}
+    expose:
+      - 9200
+    networks:
+      - e2e
+    environment:
+      - discovery.type=single-node
+      - cluster.routing.allocation.disk.threshold_enabled=false
+      - plugins.security.ssl.http.enabled=false
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9200" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: elasticsearch
+      SW_STORAGE_ES_CLUSTER_NODES: opensearch:9200
+      SW_ES_USER: admin
+      SW_ES_PASSWORD: admin
+      SW_STORAGE_ES_LOGIC_SHARDING: "true"
+    depends_on:
+      opensearch:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/opensearch/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git 
a/test/e2e-v2/cases/profiling/ebpf/network/postgres/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/postgres/docker-compose.yml
new file mode 100644
index 0000000000..6eec981994
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/postgres/docker-compose.yml
@@ -0,0 +1,89 @@
+# 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.
+
+version: '2.1'
+
+services:
+  postgres:
+    image: postgres:13
+    networks:
+      - e2e
+    expose:
+      - 5432
+    environment:
+      - POSTGRES_PASSWORD=123456
+      - POSTGRES_DB=skywalking
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/5432" 
]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: postgresql
+      SW_JDBC_URL: "jdbc:postgresql://postgres:5432/skywalking"
+    depends_on:
+      postgres:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/postgres/e2e.yaml
similarity index 51%
copy from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
copy to test/e2e-v2/cases/profiling/ebpf/network/postgres/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/postgres/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/rover.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/rover.yaml
deleted file mode 100644
index 5f726f5887..0000000000
--- a/test/e2e-v2/cases/profiling/ebpf/network/rover.yaml
+++ /dev/null
@@ -1,103 +0,0 @@
-# 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: v1
-kind: ServiceAccount
-metadata:
-  name: skywalking-rover
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: skywalking-rover
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: skywalking-rover
-subjects:
-  - kind: ServiceAccount
-    name: skywalking-rover
-    namespace: default
----
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: skywalking-rover
-rules:
-  - apiGroups: [""]
-    resources: ["pods", "nodes", "services"]
-    verbs: ["get", "watch", "list"]
----
-
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
-  name: skywalking-rover
-spec:
-  selector:
-    matchLabels:
-      name: skywalking-rover
-  template:
-    metadata:
-      labels:
-        name: skywalking-rover
-    spec:
-      serviceAccountName: skywalking-rover
-      serviceAccount: skywalking-rover
-      containers:
-        - name: skywalking-rover
-          # SkyWalking Rover image path
-          image: 
ghcr.io/apache/skywalking-rover/skywalking-rover:$SW_ROVER_COMMIT
-          imagePullPolicy: Always
-          securityContext:
-            capabilities:
-              add:
-                - SYS_PTRACE
-                - SYS_ADMIN
-            privileged: true
-          volumeMounts:
-            - name: host
-              mountPath: /host
-              readOnly: true
-          env:
-            - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ACTIVE
-              value: "true"
-            - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_NODE_NAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: spec.nodeName
-            - name: ROVER_BACKEND_ADDR
-              # backend OAP address
-              value: skywalking-oap.istio-system:11800
-            - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_ACTIVE
-              value: "false"
-            - name: ROVER_HOST_MAPPING
-              value: /host
-            - name: ROVER_LOGGER_LEVEL
-              value: DEBUG
-            - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_PROCESS_NAME
-              value: "{{.Process.ExeNameInCommandLine}}"
-            - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_INSTANCE_NAME
-              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" }}"
-            - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_INSTANCE_NAME
-              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" }}"
-      hostPID: true
-      hostNetwork: true
-      dnsPolicy: ClusterFirstWithHostNet
-      volumes:
-        - name: host
-          hostPath:
-            path: /host
-            type: Directory
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/rover_configs.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/rover_configs.yaml
new file mode 100644
index 0000000000..4d94725350
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/rover_configs.yaml
@@ -0,0 +1,155 @@
+#
+# 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.
+#
+
+logger:
+  # The lowest level of printing allowed.
+  level: ${ROVER_LOGGER_LEVEL:DEBUG}
+
+core:
+  backend:
+    # The backend server address
+    addr: ${ROVER_BACKEND_ADDR:localhost:11800}
+    # The TLS switch
+    enable_TLS: ${ROVER_BACKEND_ENABLE_TLS:false}
+    # The file path of client.pem. The config only works when opening the TLS 
switch.
+    client_pem_path: ${ROVER_BACKEND_PEM_PATH:"client.pem"}
+    # The file path of client.key. The config only works when opening the TLS 
switch.
+    client_key_path: ${ROVER_BACKEND_KEY_PATH:"client.key"}
+    # InsecureSkipVerify controls whether a client verifies the server's 
certificate chain and host name.
+    insecure_skip_verify: ${ROVER_BACKEND_INSECURE_SKIP_VERIFY:false}
+    # The file path oca.pem. The config only works when opening the TLS switch.
+    ca_pem_path: ${ROVER_BACKEND_CA_PEM_PATH:"ca.pem"}
+    # How frequently to check the connection(second)
+    check_period: ${ROVER_BACKEND_CHECK_PERIOD:5}
+    # The auth value when send request
+    authentication: ${ROVER_BACKEND_AUTHENTICATION:""}
+
+process_discovery:
+  # The period of report or keep alive process(second)
+  heartbeat_period: ${ROVER_PROCESS_DISCOVERY_HEARTBEAT_PERIOD:20s}
+  # The agent sends the process properties to the backend every: heartbeart 
period * properties report period
+  properties_report_period: 
${ROVER_PROCESS_DISCOVERY_PROPERTIES_REPORT_PERIOD:10}
+  # Scan process from linux
+  scanner:
+    # The period to detect the process
+    period: ${ROVER_PROCESS_DISCOVERY_SCAN_PERIOD:3s}
+    # The process detection modes of the scanner. Support "REGEX", 
"AGENT_SENSOR"
+    mode: ${ROVER_PROCESS_DISCOVERY_SCAN_MODE:REGEX}
+    agent:
+      # Set the agent refresh period
+      process_status_refresh_period: 
${ROVER_PROCESS_DISCOVERY_AGENT_PROCESS_STATUS_REFRESH_PERIOD:1m}
+    regex:
+      # Use regex string to locate the processes
+      # Duplicate entities cannot be reported. If multiple entity are 
generated, only one process will be report
+      # If the multiple finders could match the same one process, only the 
first finder could be selected and report
+      - match_cmd: ${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD1:nginx}
+        # The Layer need to relate to the process entity
+        layer: ${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER1:OS_LINUX}
+        # The Service Name need to relate to the process entity
+        service_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME1:nginx}
+        # The Service Instance Name need to relate to the process entity
+        # By default the instance name is the host IP v4 address from "en0" 
net interface
+        instance_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME1:test}
+        # The Process Name need to relate to the process entity
+        # By default, the process name is the executable name of the process
+        process_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME1:{{.Process.ExeName}}-{{.Process.Pid}}}
+        # The Process Labels, used to aggregate similar process from service 
entity
+        # Multiple labels split by ","
+        labels: ${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS:}
+      - match_cmd: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD2:/service$}
+        # The Layer need to relate to the process entity
+        layer: ${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER2:OS_LINUX}
+        # The Service Name need to relate to the process entity
+        service_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME2:service}
+        # The Service Instance Name need to relate to the process entity
+        # By default the instance name is the host IP v4 address from "en0" 
net interface
+        instance_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME2:test}
+        # The Process Name need to relate to the process entity
+        # By default, the process name is the executable name of the process
+        process_name: 
${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME2:{{.Process.ExeName}}}
+        # The Process Labels, used to aggregate similar process from service 
entity
+        # Multiple labels split by ","
+        labels: ${ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS:}
+  kubernetes:
+    # Is active the kubernetes process detector
+    active: ${ROVER_PROCESS_DISCOVERY_KUBERNETES_ACTIVE:false}
+    # Current node name in kubernetes environment
+    node_name: ${ROVER_PROCESS_DISCOVERY_KUBERNETES_NODE_NAME:}
+    # include namespaces, multiple namespace split by ",", if empty means 
including all namespaces
+    namespaces: ${ROVER_PROCESS_DISCOVERY_KUBERNETES_NAMESPACES:}
+    analyzers:
+      - active: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_ACTIVE:true}
+        filters:
+          - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
+          - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_CONTAINER_IS_ENVOY:eq 
.Container.Name "istio-proxy"}
+        layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LAYER:MESH_DP}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_INSTANCE_NAME:{{.Pod.Name}}}
+        process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_PROCESS_NAME:{{.Process.ExeName}}}
+        labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LABELS:mesh-envoy}
+      - active: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_ACTIVE:true}
+        filters:
+          - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
+          - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_CONTAINER_NOT_ENVOY:ne
 .Container.Name "istio-proxy"}
+        layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LAYER:MESH}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_INSTANCE_NAME:{{.Pod.Name}}}
+        process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_PROCESS_NAME:{{.Process.ExeName}}}
+        labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LABELS:mesh-application}
+      - active: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_ACTIVE:true}
+        filters:
+          - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_HAS_SERVICE:.Pod.HasServiceName}
+        layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_LAYER:K8S_SERVICE}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.ServiceName}}}
+        instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_INSTANCE_NAME:{{.Pod.Name}}}
+        process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_PROCESS_NAME:{{.Process.ExeName}}}
+        labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_LABLES:k8s-service}
+
+profiling:
+  # Is active the process profiling
+  active: ${ROVER_PROFILING_ACTIVE:true}
+  # Check the profiling task interval
+  check_interval: ${ROVER_PROFILING_CHECK_INTERVAL:10s}
+  # Combine existing profiling data and report to the backend interval
+  flush_interval: ${ROVER_PROFILING_FLUSH_INTERVAL:5s}
+  # Customize profiling task config
+  task:
+    # The config when executing ON_CPU profiling task
+    on_cpu:
+      # The profiling stack dump period
+      dump_period: ${ROVER_PROFILING_TASK_ON_CPU_DUMP_PERIOD:9ms}
+    network:
+      # The interval of send metrics to the backend
+      report_interval: 
${ROVER_PROFILING_TASK_NETWORK_TOPOLOGY_REPORT_INTERVAL:2s}
+      # The prefix of network profiling metrics name
+      meter_prefix: 
${ROVER_PROFILING_TASK_NETWORK_TOPOLOGY_METER_PREFIX:rover_net_p}
+      # The protocol analyzer config for 7-Layer
+      protocol_analyze:
+        # The size of socket data buffer on each CPU
+        per_cpu_buffer: 
${ROVER_PROFILING_TASK_NETWORK_PROTOCOL_ANALYZE_PER_CPU_BUFFER:400KB}
+        # The count of parallel protocol analyzer
+        parallels: ${ROVER_PROFILING_TASK_NETWORK_PROTOCOL_ANALYZE_PARALLELS:2}
+        # The size of per paralleled analyzer queue
+        queue_size: 
${ROVER_PROFILING_TASK_NETWORK_PROTOCOL_ANALYZE_QUEUE_SIZE:5000}
+        # The profiling config of the protocols
+        sampling:
+          # The HTTP/1.x and HTTP/2.x profiling config
+          http:
+            # The default body encoding when sampling the request
+            default_request_encoding: 
${ROVER_PROFILING_TASK_NETWORK_PROTOCOL_ANALYZE_SAMPLING_HTTP_DEFAULT_REQUEST_ENCODING:UTF-8}
+            # The default body encoding when sampling the response
+            default_response_encoding: 
${ROVER_PROFILING_TASK_NETWORK_PROTOCOL_ANALYZE_SAMPLING_HTTP_DEFAULT_RESPONSE_ENCODING:UTF-8}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/sampling.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/sampling.yaml
new file mode 100644
index 0000000000..2ed2eaba86
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/sampling.yaml
@@ -0,0 +1,29 @@
+# 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.
+
+# The command `dashboard global` supports displaying three kinds of data:
+# `global metrics`, `global response latency`, `Global heat map`.
+# If you don't want to display an item, you can just delete or comment its 
whole configuration below.
+# Generally, there is no need to modify properties unless there is a 
explanatory comment.
+
+
+samplings:
+  - min_duration: 1
+    when_4xx: true
+    when_5xx: true
+    setting:
+      require_request: true
+      require_response: true
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/service.go 
b/test/e2e-v2/cases/profiling/ebpf/network/service.go
new file mode 100644
index 0000000000..e6d4b98999
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/service.go
@@ -0,0 +1,89 @@
+// Licensed to 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. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package main
+
+import (
+       "io/ioutil"
+       "log"
+       "net/http"
+       "os"
+       "time"
+
+       "github.com/SkyAPM/go2sky"
+       "github.com/SkyAPM/go2sky/reporter"
+)
+
+var skyWalkingTracer *go2sky.Tracer
+
+func provider(w http.ResponseWriter, req *http.Request) {
+       time.Sleep(time.Second * 1)
+       if req.URL.Query().Get("error") == "true" {
+               w.WriteHeader(500)
+               return
+       }
+       w.Header().Set("Content-Type", "text/plain")
+       _, _ = w.Write([]byte("service provider\n"))
+}
+
+func consumer(w http.ResponseWriter, req *http.Request) {
+       typeData := req.URL.Query().Get("type")
+       addr := "http://proxy/provider";
+       if typeData == "notfound" {
+               addr = "http://proxy/notfound";
+       } else if typeData == "error" {
+               addr = "http://proxy/provider?error=true";
+       }
+
+       request, err := http.NewRequest("GET", addr, nil)
+       exitSpan, err := skyWalkingTracer.CreateExitSpan(req.Context(), 
"/provider", addr, func(headerKey, headerValue string) error {
+               request.Header.Set(headerKey, headerValue)
+               return nil
+       })
+       get, err := http.DefaultClient.Do(request)
+       if err != nil {
+               log.Printf("send request error: %v", err)
+       }
+       all, err := ioutil.ReadAll(get.Body)
+       _ = get.Body.Close()
+       if err != nil {
+               log.Printf("get response body error: %v", err)
+       }
+
+       w.Header().Set("Content-Type", "text/plain")
+       _, _ = w.Write(all)
+       exitSpan.End()
+}
+
+func main() {
+       // init skywalking tracer
+       r, err := reporter.NewGRPCReporter(os.Getenv("OAP_BACKEND_ADDR"))
+       if err != nil {
+               log.Fatalf("new reporter error %v \n", err)
+       }
+       defer r.Close()
+       skyWalkingTracer, err = go2sky.NewTracer("service", 
go2sky.WithReporter(r))
+       if err != nil {
+               log.Fatalf("init skyWalkingTracer failure: %v", err)
+       }
+
+       http.HandleFunc("/provider", provider)
+       http.HandleFunc("/consumer", consumer)
+
+       err = http.ListenAndServe(":80", nil)
+       log.Fatal(err)
+}
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/slow-trace-lal.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/slow-trace-lal.yaml
new file mode 100644
index 0000000000..3b3fa8f7a6
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/slow-trace-lal.yaml
@@ -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.
+
+rules:
+  - name: network-profiling-slow-trace
+    layer: OS_LINUX
+    dsl: |
+      filter {
+        json{
+        }
+        extractor{
+          if (tag("LOG_KIND") == "NET_PROFILING_SAMPLED_TRACE") {
+            sampledTrace {
+              latency parsed.latency as Long
+              uri ((parsed.trace_provider as String) + "-" + (parsed.uri as 
String))
+              reason parsed.reason as String
+
+              if (parsed.client_process.process_id as String != "") {
+               processId parsed.client_process.process_id as String
+              } else if (parsed.client_process.local as Boolean
+                  || (parsed.client_process.address as 
String).split(":")[0].endsWith('.1')
+                  || (parsed.client_process.address as String).split(":")[1] 
== "53") {
+                processId 
ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, 
parsed.serviceInstance as String) as String
+              } else {
+                processId 
ProcessRegistry.generateVirtualProcess(parsed.service as String, 
parsed.serviceInstance as String, 'UNKNOWN_REMOTE') as String
+              }
+
+              if (parsed.server_process.process_id as String != "") {
+                destProcessId parsed.server_process.process_id as String
+              } else if (parsed.server_process.local as Boolean
+                  || (parsed.server_process.address as 
String).split(":")[0].endsWith('.1')
+                  || (parsed.server_process.address as String).split(":")[1] 
== "53") {
+                destProcessId 
ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, 
parsed.serviceInstance as String) as String
+              } else {
+                destProcessId 
ProcessRegistry.generateVirtualProcess(parsed.service as String, 
parsed.serviceInstance as String, 'UNKNOWN_REMOTE') as String
+              }
+
+              detectPoint parsed.detect_point as String
+
+              if (parsed.component as String == "http" && parsed.ssl as 
Boolean) {
+                componentId 129
+              } else if (parsed.component as String == "http") {
+                componentId 49
+              } else if (parsed.ssl as Boolean) {
+                componentId 130
+              } else {
+                componentId 110
+              }
+            }
+          }
+        }
+      }
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/tidb/docker-compose.yml 
b/test/e2e-v2/cases/profiling/ebpf/network/tidb/docker-compose.yml
new file mode 100644
index 0000000000..4d7b63f9b1
--- /dev/null
+++ b/test/e2e-v2/cases/profiling/ebpf/network/tidb/docker-compose.yml
@@ -0,0 +1,91 @@
+# 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.
+
+version: '2.1'
+
+services:
+  tidb:
+    image: pingcap/tidb:v4.0.12
+    expose:
+      - 4000
+    volumes:
+      - ../../../storage/tidb/tidbconfig/tidb.toml:/tidb.toml:ro
+    restart: on-failure
+    healthcheck:
+      test: [ "CMD", "sh", "-c", "nc -zn 127.0.0.1 4000" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    networks:
+      - e2e
+
+  oap:
+    extends:
+      file: ../docker-compose.yml
+      service: oap
+    networks:
+      - e2e
+    environment:
+      SW_STORAGE: tidb
+      SW_JDBC_URL: "jdbc:mysql://tidb:4000/test"
+      SW_DATA_SOURCE_PASSWORD: ""
+    entrypoint: ['sh', '-c', '/download-mysql.sh /skywalking/oap-libs && 
/skywalking/docker-entrypoint.sh']
+    depends_on:
+      tidb:
+        condition: service_healthy
+    ports:
+    - 12800
+
+  rover:
+    extends:
+      file: ../docker-compose.yml
+      service: rover
+    networks:
+      - e2e
+    depends_on:
+      oap:
+        condition: service_healthy
+
+  service:
+    extends:
+      file: ../docker-compose.yml
+      service: service
+    networks:
+      - e2e
+    environment:
+      OAP_BACKEND_ADDR: oap:11800
+    ports:
+      - 80
+    depends_on:
+      oap:
+        condition: service_healthy
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/80" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  proxy:
+    extends:
+      file: ../docker-compose.yml
+      service: proxy
+    networks:
+      - e2e
+    depends_on:
+      service:
+        condition: service_healthy
+
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml 
b/test/e2e-v2/cases/profiling/ebpf/network/tidb/e2e.yaml
similarity index 51%
rename from test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
rename to test/e2e-v2/cases/profiling/ebpf/network/tidb/e2e.yaml
index 73853c7418..765e5a2ec2 100644
--- a/test/e2e-v2/cases/profiling/ebpf/network/traffic-gen.yaml
+++ b/test/e2e-v2/cases/profiling/ebpf/network/tidb/e2e.yaml
@@ -13,28 +13,32 @@
 # 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: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d2000m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
-          resources:
-            requests:
-              cpu: 0.1
\ No newline at end of file
+# This file is used to show how to write configuration files and can be used 
to test.
+
+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 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
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: http://${service_host}:${service_80}/consumer
+  method: GET
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - ../network-cases.yaml
\ No newline at end of file
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index cbb66b5aa3..e843c82ac6 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=b670c41d94a82ddefcf466d54bab5c492d88d772
-SW_ROVER_COMMIT=d956eaede57b62108b78bca48045bd09ba88e653
+SW_ROVER_COMMIT=8550199e98c9f5a4b2058878a0a899ffb73fe461
 SW_BANYANDB_COMMIT=e7b08bea242e76c68950509529339995ac0646df
 
-SW_CTL_COMMIT=e684fae0107045fc23799146d62f04cb68bd5a3b
+SW_CTL_COMMIT=0883266bfaa36612927b69e35781b64ea181758d

Reply via email to