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