未验证 提交 2b40270f 编写于 作者: 静夜思朝颜's avatar 静夜思朝颜 提交者: GitHub

Add the eBPF network profiling E2E Test in per storage (#10245)

上级 2756e0cf
......@@ -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
......
......@@ -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
......
......@@ -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;
......
......@@ -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();
......
# 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
# 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
......@@ -13,27 +13,32 @@
# 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
# 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
# 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
# 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
......@@ -16,17 +16,10 @@
# This file is used to show how to write configuration files and can be used to test.
setup:
env: kind
file: ../kind.yaml
env: compose
file: docker-compose.yml
timeout: 20m
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
......@@ -34,62 +27,13 @@ setup:
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
trigger:
action: http
interval: 3s
times: 10
url: http://${service_host}:${service_80}/consumer
method: GET
verify:
retry:
......@@ -97,4 +41,4 @@ verify:
interval: 10s
cases:
- includes:
- ../network-cases.yaml
- ../network-cases.yaml
\ No newline at end of file
# 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
......@@ -16,17 +16,10 @@
# 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
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
......@@ -34,61 +27,13 @@ setup:
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
trigger:
action: http
interval: 3s
times: 10
url: http://${service_host}:${service_80}/consumer
method: GET
verify:
retry:
......@@ -96,4 +41,4 @@ verify:
interval: 10s
cases:
- includes:
- ./network-cases.yaml
- ../../network-cases.yaml
\ No newline at end of file
......@@ -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
......@@ -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
......@@ -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
......@@ -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
# 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
......@@ -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
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
{{- contains . }}
- name: skywalking-/provider
id: {{ notEmpty .id }}
value: {{ notEmpty .value }}
refid: {{ notEmpty .refid }}
{{- end }}
\ No newline at end of file
// 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
)
# 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
# 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: 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
# 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
# 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: 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
......@@ -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
# 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
# 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
# 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
# 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: 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
# 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
# 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: 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
# 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
#
# 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
# 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
// 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)
}
# 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
# 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
# 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: 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
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册