Add continuous profiling E2E tests (#84)

diff --git a/.github/workflows/rover.yaml b/.github/workflows/rover.yaml
index ab504b0..5451533 100644
--- a/.github/workflows/rover.yaml
+++ b/.github/workflows/rover.yaml
@@ -76,22 +76,22 @@
       matrix:
         test:
           - name: Golang On CPU Profiling
-            config: test/e2e/cases/profiling/oncpu/golang/e2e.yaml
+            config: test/e2e/cases/profiling/task/oncpu/golang/e2e.yaml
           - name: C++ On CPU Profiling
-            config: test/e2e/cases/profiling/oncpu/c++/e2e.yaml
+            config: test/e2e/cases/profiling/task/oncpu/c++/e2e.yaml
           - name: C On CPU Profiling
-            config: test/e2e/cases/profiling/oncpu/c/e2e.yaml
+            config: test/e2e/cases/profiling/task/oncpu/c/e2e.yaml
           - name: Rust On CPU Profiling
-            config: test/e2e/cases/profiling/oncpu/rust/e2e.yaml
+            config: test/e2e/cases/profiling/task/oncpu/rust/e2e.yaml
 
           - name: Golang Off CPU Profiling
-            config: test/e2e/cases/profiling/offcpu/golang/e2e.yaml
+            config: test/e2e/cases/profiling/task/offcpu/golang/e2e.yaml
           - name: C++ Off CPU Profiling
-            config: test/e2e/cases/profiling/offcpu/c++/e2e.yaml
+            config: test/e2e/cases/profiling/task/offcpu/c++/e2e.yaml
           - name: C Off CPU Profiling
-            config: test/e2e/cases/profiling/offcpu/c/e2e.yaml
+            config: test/e2e/cases/profiling/task/offcpu/c/e2e.yaml
           - name: Rust Off CPU Profiling
-            config: test/e2e/cases/profiling/offcpu/rust/e2e.yaml
+            config: test/e2e/cases/profiling/task/offcpu/rust/e2e.yaml
 
           - name: go2sky Agent Sensor
             config: test/e2e/cases/process/agent_sensor/golang/e2e.yaml
@@ -139,8 +139,8 @@
           path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
 
 
-  https-e2e-test:
-    name: HTTPS E2E test
+  network-profiling-https-e2e-test:
+    name: Network Profiling HTTPS E2E test
     needs: [ docker ]
     runs-on: ubuntu-22.04
     timeout-minutes: 60
@@ -149,18 +149,18 @@
       matrix:
         test:
           - name: Golang Profiling
-            config: test/e2e/cases/profiling/network/golang/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/golang/e2e.yaml
           - name: Python Profiling
-            config: test/e2e/cases/profiling/network/golang/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/golang/e2e.yaml
           - name: Envoy Profiling
-            config: test/e2e/cases/profiling/network/envoy/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/envoy/e2e.yaml
             env: ISTIO_VERSION=1.13.1
           - name: C++ Profiling
-            config: test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/c_plus_plus/e2e.yaml
           - name: Nodejs Profiling
-            config: test/e2e/cases/profiling/network/nodejs/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/nodejs/e2e.yaml
           - name: HTTP2 Profiling
-            config: test/e2e/cases/profiling/network/http2/e2e.yaml
+            config: test/e2e/cases/profiling/task/network/http2/e2e.yaml
     steps:
       - uses: actions/checkout@v3
         with:
@@ -176,8 +176,53 @@
         run: echo "${{ matrix.test.env }}"  >> $GITHUB_ENV
       - name: Setup SSL Certs
         run: |
-          bash test/e2e/cases/profiling/network/base/ssl/gen-selfsigned-ssl.sh service
-          bash test/e2e/cases/profiling/network/base/ssl/gen-selfsigned-ssl.sh proxy
+          bash test/e2e/base/scripts/gen-selfsigned-ssl.sh service $(pwd)/test/e2e/cases/profiling/task/network/base/ssl/
+          bash test/e2e/base/scripts/gen-selfsigned-ssl.sh proxy $(pwd)/test/e2e/cases/profiling/task/network/base/ssl/
+      - name: ${{ matrix.test.name }}
+        uses: apache/skywalking-infra-e2e@c3eb3241f649289465eda12af8214ca60aaaaa5f
+        with:
+          e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
+      - uses: actions/upload-artifact@v2
+        if: ${{ failure() }}
+        name: Upload Logs
+        with:
+          name: logs
+          path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
+
+  continuous-profiling-e2e-tests:
+    name: Continuous Profiling E2E tests
+    needs: [ docker ]
+    runs-on: ubuntu-22.04
+    timeout-minutes: 60
+    strategy:
+      fail-fast: false
+      matrix:
+        test:
+          - name: HTTP Avg Response Time
+            config: test/e2e/cases/profiling/continuous/http_avg_response_time/e2e.yaml
+          - name: HTTP Error Rate
+            config: test/e2e/cases/profiling/continuous/http_error_rate/e2e.yaml
+          - name: Process CPU
+            config: test/e2e/cases/profiling/continuous/process_cpu/e2e.yaml
+          - name: Process Thread Count
+            config: test/e2e/cases/profiling/continuous/process_thread_count/e2e.yaml
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          submodules: true
+      - uses: actions/download-artifact@v2
+        name: Download docker images
+        with:
+          name: docker-images-skywalking-rover
+          path: docker-images
+      - name: Load docker images
+        run: find docker-images -name "*.tar" -exec docker load -i {} \;
+      - name: Set env var
+        run: echo "${{ matrix.test.env }}"  >> $GITHUB_ENV
+      - name: Setup SSL Certs
+        run: |
+          mkdir -p $(pwd)/test/e2e/cases/profiling/continuous/ssl/
+          bash test/e2e/base/scripts/gen-selfsigned-ssl.sh service $(pwd)/test/e2e/cases/profiling/continuous/ssl/
       - name: ${{ matrix.test.name }}
         uses: apache/skywalking-infra-e2e@c3eb3241f649289465eda12af8214ca60aaaaa5f
         with:
@@ -195,7 +240,8 @@
     needs:
       - build
       - e2e-test
-      - https-e2e-test
+      - network-profiling-https-e2e-test
+      - continuous-profiling-e2e-tests
     runs-on: ubuntu-latest
     timeout-minutes: 10
     steps:
@@ -207,6 +253,9 @@
           if [[ ${{ needs.e2e-test.result }} != 'success' ]]; then
             exit -1
           fi
-          if [[ ${{ needs.https-e2e-test.result }} != 'success' ]]; then
+          if [[ ${{ needs.network-profiling-https-e2e-test.result }} != 'success' ]]; then
+            exit -1
+          fi
+          if [[ ${{ needs.continuous-profiling-e2e-tests.result }} != 'success' ]]; then
             exit -1
           fi
diff --git a/test/e2e/base/env b/test/e2e/base/env
index 434bc95..62c59f9 100644
--- a/test/e2e/base/env
+++ b/test/e2e/base/env
@@ -13,8 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_CTL_COMMIT=0883266bfaa36612927b69e35781b64ea181758d
-SW_OAP_COMMIT=108260681ea9657217488685779a20cb84c2f288
+SW_CTL_COMMIT=f3eed66ee2ff330e3218fdc995b6f9952901e37c
+SW_OAP_COMMIT=d88d887a32f791d0670e4e8d5c2fd615126234cf
 SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
 
 SW_AGENT_GO_COMMIT=216f122d942cb683f48578d3014cc5ea83637582
diff --git a/test/e2e/base/scripts/gen-selfsigned-ssl.sh b/test/e2e/base/scripts/gen-selfsigned-ssl.sh
new file mode 100644
index 0000000..1d45fd3
--- /dev/null
+++ b/test/e2e/base/scripts/gen-selfsigned-ssl.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+#
+# 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.
+#
+
+set -e
+
+HOST=${1:-localhost}
+PASSWORD=test
+TARGET_DIR="$(cd "$(dirname "$0")" && pwd)"
+TARGET_DIR=$2
+
+root_key="$TARGET_DIR/root_${HOST}.key"
+root_csr="$TARGET_DIR/root_${HOST}.csr"
+root_crt="$TARGET_DIR/root_${HOST}.crt"
+
+key="$TARGET_DIR/${HOST}.key"
+csr="$TARGET_DIR/${HOST}.csr"
+crt="$TARGET_DIR/${HOST}.crt"
+
+CountryName=CN
+StateORProvinceName=beijing
+LocalityName=beijing
+OrgName=sky
+OrgUnitName=sky
+CommonName=$HOST
+Email=xx@gmail.com
+ChallengePwd=.
+OptionalComName=.
+
+# root ca
+openssl genrsa -des3 -out $root_key -passout pass:$PASSWORD 2048
+
+openssl req -new -key $root_key -out $root_csr -passin pass:$PASSWORD -passout pass:$PASSWORD <<EOF
+${CountryName}
+${StateORProvinceName}
+${LocalityName}
+${OrgName}
+${OrgUnitName}
+${CommonName}
+${Email}
+${ChallengePwd}
+${OptionalComName}
+EOF
+
+openssl x509 -req -days 365 -sha256 -signkey $root_key -in $root_csr -out $root_crt -passin pass:$PASSWORD -extfile <(printf "subjectAltName=DNS:$HOST,DNS:localhost,IP:127.0.0.1")
+
+openssl genrsa -des3 -out $key -passout pass:$PASSWORD 2048
+
+openssl rsa -in $key -out $key -passin pass:$PASSWORD
+
+openssl req -new -key $key -out $csr <<EOF
+${CountryName}
+${StateORProvinceName}
+${LocalityName}
+${OrgName}
+${OrgUnitName}
+${CommonName}
+${Email}
+${ChallengePwd}
+${OptionalComName}
+EOF
+
+openssl x509 -req -days 365 -sha256 -CA $root_crt -CAkey $root_key -CAcreateserial -in $csr -out $crt -passin pass:$PASSWORD -extfile <(printf "subjectAltName=DNS:$HOST,DNS:localhost,IP:127.0.0.1")
+
+# adding trusted root certificates to the server
+sudo cp $root_crt $crt /usr/local/share/ca-certificates/
+sudo update-ca-certificates
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/Dockerfile b/test/e2e/cases/profiling/continuous/http_avg_response_time/Dockerfile
new file mode 100644
index 0000000..638f11f
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/Dockerfile
@@ -0,0 +1,28 @@
+# 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 http_avg_response_time/ /service
+
+WORKDIR /service
+RUN go build -o response_timeout response_timeout.go
+
+COPY ssl /usr/local/share/ca-certificates/ssl
+RUN update-ca-certificates
+
+CMD ["/service/response_timeout"]
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/docker-compose.yml
new file mode 100644
index 0000000..1c0bc74
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/docker-compose.yml
@@ -0,0 +1,54 @@
+# 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:
+  service:
+    build:
+      context: ../
+      dockerfile: http_avg_response_time/Dockerfile
+    ports:
+      - 10443:10443
+    volumes:
+      - ../ssl:/ssl_data
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/10443" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../../../../base/base-compose.yml
+      service: oap
+    ports:
+      - 12800:12800
+
+  rover:
+    extends:
+      file: ../../../../base/base-compose.yml
+      service: rover
+    environment:
+      ROVER_LOGGER_LEVEL: "DEBUG"
+      ROVER_PROCESS_DISCOVERY_SCAN_MODE: "REGEX"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: response_timeout
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER: OS_LINUX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: test-continuous
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME: test-instance
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME: "{{.Process.ExeName}}"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS: ""
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/e2e.yaml b/test/e2e/cases/profiling/continuous/http_avg_response_time/e2e.yaml
new file mode 100644
index 0000000..2a517cb
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/e2e.yaml
@@ -0,0 +1,68 @@
+# 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.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../../../base/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: https://${service_host}:${service_10443}/provider
+  method: GET
+
+verify:
+  # verify with retry strategy
+  retry:
+    # max retry count
+    count: 20
+    # the interval between two retries, in millisecond.
+    interval: 10s
+  cases:
+    # metadata
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml service ls
+      expected: expected/service.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml instance ls --service-name test-continuous
+      expected: expected/instance.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml process ls --service-name test-continuous --instance-name test-instance
+      expected: expected/process.yml
+
+    # policy setting
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous set --service-name test-continuous --config test/e2e/cases/profiling/continuous/http_avg_response_time/policy.yaml
+      expected: expected/policy-set.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous ls --service-name test-continuous
+      expected: expected/query-policy.yml
+
+    # check profiling metrics
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml metrics multiple-linear \
+          --service-name test-continuous --instance-name test-instance --process-name response_timeout --name continuous_profiling_http_avg_response_time |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+      expected: expected/metrics-has-value-labeld.yml
+
+    # check triggered profiling task
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name test-continuous --trigger CONTINUOUS_PROFILING
+      expected: expected/trigger-task.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/instance.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/instance.yml
index faa04bc..b2ac6e7 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/instance.yml
@@ -14,19 +14,9 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  name: test-instance
+  attributes: []
+  language: UNKNOWN
+  instanceuuid: {{ notEmpty .instanceuuid }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/metrics-has-value-labeld.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/metrics-has-value-labeld.yml
index faa04bc..8ba301b 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/metrics-has-value-labeld.yml
@@ -14,19 +14,10 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- key: {{ notEmpty .key }}
+  value:
+  {{- contains .value }}
+  - key: {{ notEmpty .key }}
+    value: {{ ge .value 1 }}
+  {{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/policy-set.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/policy-set.yml
index 0df418f..a51bce7 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/policy-set.yml
@@ -13,30 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+status: true
+errorreason: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/process.yml
similarity index 61%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/process.yml
index faa04bc..1331630 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/process.yml
@@ -14,19 +14,22 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
+- id: {{ notEmpty .id }}
+  name: response_timeout
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  instanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  instancename: test-instance
+  agentid: {{ notEmpty .agentid }}
+  detecttype: VM
+  attributes:
+    {{- contains .attributes }}
+    - name: host_ip
+      value: {{ notEmpty .value }}
+    - name: pid
+      value: {{ notEmpty .value }}
+    - name: command_line
+      value: /service/response_timeout
     {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+  labels: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/query-policy.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/query-policy.yml
index 0df418f..dbab173 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/query-policy.yml
@@ -13,30 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+- type: NETWORK
+  checkitems:
+    - type: HTTP_AVG_RESPONSE_TIME
+      threshold: "500"
+      period: 10
+      count: 1
+      urilist:
+        - /provider
+      uriregex: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/service.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_avg_response_time/expected/service.yml
index faa04bc..09f5874 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/service.yml
@@ -14,19 +14,11 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1
+  name: test-continuous
+  group: ""
+  shortname: test-continuous
+  layers:
+    - OS_LINUX
+  normal: true
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/trigger-task.yml b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/trigger-task.yml
new file mode 100644
index 0000000..367e165
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/expected/trigger-task.yml
@@ -0,0 +1,38 @@
+# 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 . }}
+- taskid: {{ notEmpty .taskid }}
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  serviceinstanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  serviceinstancename: test-instance
+  processlabels: []
+  processid: {{ notEmpty .processid }}
+  processname: response_timeout
+  taskstarttime: {{ ge .taskstarttime 1 }}
+  triggertype: CONTINUOUS_PROFILING
+  fixedtriggerduration: 600
+  continuousprofilingcauses:
+    - type: HTTP_AVG_RESPONSE_TIME
+      singlevalue: null
+      uri:
+        uriregex: null
+        uripath: /provider
+        threshold: 50000
+        current: {{ ge (index .continuousprofilingcauses 0).uri.current 1 }}
+  targettype: NETWORK
+  createtime: {{ ge .createtime 1 }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/policy.yaml b/test/e2e/cases/profiling/continuous/http_avg_response_time/policy.yaml
new file mode 100644
index 0000000..1b18411
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/policy.yaml
@@ -0,0 +1,43 @@
+# 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.
+
+# Policy config
+# policy: the policy config list
+# - type: the profiling target type when reached the threshold, support: "ON_CPU", "OFF_CPU", "NETWORK"
+#   checks: define the thresholds, when any configuration item reaches the threshold, it will trigger profiling task
+#     - type: monitoring type, please see the below monitoring type with threshold description
+#       threshold: monitor threshold, please see the below monitoring type with threshold description
+#       period: the length of time to evaluate the metrics
+#       count: how many times after the metrics match the threshold, will trigger profiling
+#       uriList: the URI paths filter when monitor the HTTP related types
+#       uriRegex: the URI regex filter when monitor the HTTP related types
+
+# Monitoring type with threshold
+# PROCESS_CPU: Monitoring Process CPU percent, threshold value in [0-100]
+# PROCESS_THREAD_COUNT: Monitoring process thread count, threshold value must bigger than zero
+# SYSTEM_LOAD: Monitoring current system load, threshold value must bigger than zero
+# HTTP_ERROR_RATE: Monitoring the process HTTP response error(status>=500) percent, threshold value in [0-100]
+# HTTP_AVG_RESPONSE_TIME: Monitoring the process HTTP response duration(ms), threshold value must be bigger than zero
+
+policy:
+  - type: NETWORK
+    checkers:
+      - type: HTTP_AVG_RESPONSE_TIME
+        threshold: 500
+        period: 10
+        count: 1
+        uriList:
+          - /provider
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_avg_response_time/response_timeout.go b/test/e2e/cases/profiling/continuous/http_avg_response_time/response_timeout.go
new file mode 100644
index 0000000..1d453fb
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_avg_response_time/response_timeout.go
@@ -0,0 +1,40 @@
+// 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 (
+	"log"
+	"net/http"
+	"os"
+	"time"
+)
+
+func provider(w http.ResponseWriter, req *http.Request) {
+	time.Sleep(time.Second)
+	w.Header().Set("Content-Type", "text/plain")
+	_, _ = w.Write([]byte("success:" + req.Proto))
+}
+
+func main() {
+	// force as http/1.1 server, we only support analyze http1 server for now
+	os.Setenv("GODEBUG", "http2server=0")
+	http.HandleFunc("/provider", provider)
+
+	err := http.ListenAndServeTLS(":10443", "/ssl_data/service.crt", "/ssl_data/service.key", nil)
+	log.Fatal(err)
+}
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/Dockerfile b/test/e2e/cases/profiling/continuous/http_error_rate/Dockerfile
new file mode 100644
index 0000000..12ae46c
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/Dockerfile
@@ -0,0 +1,28 @@
+# 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 http_error_rate/ /service
+
+WORKDIR /service
+RUN go build -o response_error response_error.go
+
+COPY ssl /usr/local/share/ca-certificates/ssl
+RUN update-ca-certificates
+
+CMD ["/service/response_error"]
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_error_rate/docker-compose.yml
new file mode 100644
index 0000000..6448433
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/docker-compose.yml
@@ -0,0 +1,54 @@
+# 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:
+  service:
+    build:
+      context: ../
+      dockerfile: http_error_rate/Dockerfile
+    ports:
+      - 10443:10443
+    volumes:
+      - ../ssl:/ssl_data
+    healthcheck:
+      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/10443" ]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  oap:
+    extends:
+      file: ../../../../base/base-compose.yml
+      service: oap
+    ports:
+      - 12800:12800
+
+  rover:
+    extends:
+      file: ../../../../base/base-compose.yml
+      service: rover
+    environment:
+      ROVER_LOGGER_LEVEL: "DEBUG"
+      ROVER_PROCESS_DISCOVERY_SCAN_MODE: "REGEX"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: response_error
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER: OS_LINUX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: test-continuous
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME: test-instance
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME: "{{.Process.ExeName}}"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS: ""
+networks:
+  e2e:
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/e2e.yaml b/test/e2e/cases/profiling/continuous/http_error_rate/e2e.yaml
new file mode 100644
index 0000000..5c163b0
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/e2e.yaml
@@ -0,0 +1,68 @@
+# 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.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../../../base/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: 10
+  url: https://${service_host}:${service_10443}/provider
+  method: GET
+
+verify:
+  # verify with retry strategy
+  retry:
+    # max retry count
+    count: 20
+    # the interval between two retries, in millisecond.
+    interval: 10s
+  cases:
+    # metadata
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml service ls
+      expected: expected/service.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml instance ls --service-name test-continuous
+      expected: expected/instance.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml process ls --service-name test-continuous --instance-name test-instance
+      expected: expected/process.yml
+
+    # policy setting
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous set --service-name test-continuous --config test/e2e/cases/profiling/continuous/http_error_rate/policy.yaml
+      expected: expected/policy-set.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous ls --service-name test-continuous
+      expected: expected/query-policy.yml
+
+    # check profiling metrics
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml metrics multiple-linear \
+          --service-name test-continuous --instance-name test-instance --process-name response_error --name continuous_profiling_http_error_rate |yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+      expected: expected/metrics-has-value-labeld.yml
+
+    # check triggered profiling task
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name test-continuous --trigger CONTINUOUS_PROFILING
+      expected: expected/trigger-task.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/instance.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/instance.yml
index faa04bc..b2ac6e7 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/instance.yml
@@ -14,19 +14,9 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  name: test-instance
+  attributes: []
+  language: UNKNOWN
+  instanceuuid: {{ notEmpty .instanceuuid }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/metrics-has-value-labeld.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/metrics-has-value-labeld.yml
index faa04bc..8ba301b 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/metrics-has-value-labeld.yml
@@ -14,19 +14,10 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- key: {{ notEmpty .key }}
+  value:
+  {{- contains .value }}
+  - key: {{ notEmpty .key }}
+    value: {{ ge .value 1 }}
+  {{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/policy-set.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/policy-set.yml
index 0df418f..a51bce7 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/policy-set.yml
@@ -13,30 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+status: true
+errorreason: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/process.yml
similarity index 61%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/process.yml
index faa04bc..9cd7566 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/process.yml
@@ -14,19 +14,22 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
+- id: {{ notEmpty .id }}
+  name: response_error
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  instanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  instancename: test-instance
+  agentid: {{ notEmpty .agentid }}
+  detecttype: VM
+  attributes:
+    {{- contains .attributes }}
+    - name: host_ip
+      value: {{ notEmpty .value }}
+    - name: pid
+      value: {{ notEmpty .value }}
+    - name: command_line
+      value: /service/response_error
     {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+  labels: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/query-policy.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/query-policy.yml
index 0df418f..ad24cf5 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/query-policy.yml
@@ -13,30 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+- type: NETWORK
+  checkitems:
+    - type: HTTP_ERROR_RATE
+      threshold: "10"
+      period: 10
+      count: 1
+      urilist:
+        - /provider
+      uriregex: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/service.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/http_error_rate/expected/service.yml
index faa04bc..09f5874 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/service.yml
@@ -14,19 +14,11 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1
+  name: test-continuous
+  group: ""
+  shortname: test-continuous
+  layers:
+    - OS_LINUX
+  normal: true
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/expected/trigger-task.yml b/test/e2e/cases/profiling/continuous/http_error_rate/expected/trigger-task.yml
new file mode 100644
index 0000000..9424a82
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/expected/trigger-task.yml
@@ -0,0 +1,38 @@
+# 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 . }}
+- taskid: {{ notEmpty .taskid }}
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  serviceinstanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  serviceinstancename: test-instance
+  processlabels: []
+  processid: {{ notEmpty .processid }}
+  processname: response_error
+  taskstarttime: {{ ge .taskstarttime 1 }}
+  triggertype: CONTINUOUS_PROFILING
+  fixedtriggerduration: 600
+  continuousprofilingcauses:
+    - type: HTTP_ERROR_RATE
+      singlevalue: null
+      uri:
+        uriregex: null
+        uripath: /provider
+        threshold: 1000
+        current: {{ ge (index .continuousprofilingcauses 0).uri.current 1 }}
+  targettype: NETWORK
+  createtime: {{ ge .createtime 1 }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/policy.yaml b/test/e2e/cases/profiling/continuous/http_error_rate/policy.yaml
new file mode 100644
index 0000000..b52a89b
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/policy.yaml
@@ -0,0 +1,43 @@
+# 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.
+
+# Policy config
+# policy: the policy config list
+# - type: the profiling target type when reached the threshold, support: "ON_CPU", "OFF_CPU", "NETWORK"
+#   checks: define the thresholds, when any configuration item reaches the threshold, it will trigger profiling task
+#     - type: monitoring type, please see the below monitoring type with threshold description
+#       threshold: monitor threshold, please see the below monitoring type with threshold description
+#       period: the length of time to evaluate the metrics
+#       count: how many times after the metrics match the threshold, will trigger profiling
+#       uriList: the URI paths filter when monitor the HTTP related types
+#       uriRegex: the URI regex filter when monitor the HTTP related types
+
+# Monitoring type with threshold
+# PROCESS_CPU: Monitoring Process CPU percent, threshold value in [0-100]
+# PROCESS_THREAD_COUNT: Monitoring process thread count, threshold value must bigger than zero
+# SYSTEM_LOAD: Monitoring current system load, threshold value must bigger than zero
+# HTTP_ERROR_RATE: Monitoring the process HTTP response error(status>=500) percent, threshold value in [0-100]
+# HTTP_AVG_RESPONSE_TIME: Monitoring the process HTTP response duration(ms), threshold value must be bigger than zero
+
+policy:
+  - type: NETWORK
+    checkers:
+      - type: HTTP_ERROR_RATE
+        threshold: 10
+        period: 10
+        count: 1
+        uriList:
+          - /provider
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/http_error_rate/response_error.go b/test/e2e/cases/profiling/continuous/http_error_rate/response_error.go
new file mode 100644
index 0000000..88556d8
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/http_error_rate/response_error.go
@@ -0,0 +1,43 @@
+// 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 (
+	"log"
+	"math/rand"
+	"net/http"
+	"os"
+)
+
+func provider(w http.ResponseWriter, req *http.Request) {
+	if rand.Float64() > 0.5 {
+		w.WriteHeader(500)
+		return
+	}
+	w.Header().Set("Content-Type", "text/plain")
+	_, _ = w.Write([]byte("success"))
+}
+
+func main() {
+	// force as http/1.1 server, we only support analyze http1 server for now
+	os.Setenv("GODEBUG", "http2server=0")
+	http.HandleFunc("/provider", provider)
+
+	err := http.ListenAndServeTLS(":10443", "/ssl_data/service.crt", "/ssl_data/service.key", nil)
+	log.Fatal(err)
+}
diff --git a/test/e2e/cases/profiling/oncpu/golang/Dockerfile.sqrt b/test/e2e/cases/profiling/continuous/process_cpu/Dockerfile
similarity index 100%
copy from test/e2e/cases/profiling/oncpu/golang/Dockerfile.sqrt
copy to test/e2e/cases/profiling/continuous/process_cpu/Dockerfile
diff --git a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_cpu/docker-compose.yml
similarity index 69%
copy from test/e2e/cases/profiling/offcpu/c/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/docker-compose.yml
index 816e685..5717b7d 100644
--- a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/docker-compose.yml
@@ -27,17 +27,22 @@
     extends:
       file: ../../../../base/base-compose.yml
       service: rover
-    environment:
-      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
-      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: file
     depends_on:
       oap:
         condition: service_healthy
+    environment:
+      ROVER_PROCESS_DISCOVERY_SCAN_MODE: "REGEX"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: sqrt
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER: OS_LINUX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: test-continuous
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME: test-instance
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME: "{{.Process.ExeName}}"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS: ""
 
-  file_c:
+  continuous_process_cpu:
     build:
       context: .
-      dockerfile: Dockerfile.file
+      dockerfile: Dockerfile
     networks:
       - e2e
 
diff --git a/test/e2e/cases/profiling/continuous/process_cpu/e2e.yaml b/test/e2e/cases/profiling/continuous/process_cpu/e2e.yaml
new file mode 100644
index 0000000..b6be9a2
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_cpu/e2e.yaml
@@ -0,0 +1,61 @@
+# 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.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../../../base/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
+
+verify:
+  # verify with retry strategy
+  retry:
+    # max retry count
+    count: 20
+    # the interval between two retries, in millisecond.
+    interval: 10s
+  cases:
+    # metadata
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml service ls
+      expected: expected/service.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml instance ls --service-name test-continuous
+      expected: expected/instance.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml process ls --service-name test-continuous --instance-name test-instance
+      expected: expected/process.yml
+
+    # policy setting
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous set --service-name test-continuous --config test/e2e/cases/profiling/continuous/process_cpu/policy.yaml
+      expected: expected/policy-set.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous ls --service-name test-continuous
+      expected: expected/query-policy.yml
+
+    # check profiling metrics
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml metrics linear \
+          --service-name test-continuous --instance-name test-instance --process-name sqrt --name continuous_profiling_process_cpu |yq e 'to_entries' -
+      expected: expected/metrics-has-value.yml
+
+    # check triggered profiling task
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name test-continuous --trigger CONTINUOUS_PROFILING
+      expected: expected/trigger-task.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/instance.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/instance.yml
index faa04bc..b2ac6e7 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/instance.yml
@@ -14,19 +14,9 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  name: test-instance
+  attributes: []
+  language: UNKNOWN
+  instanceuuid: {{ notEmpty .instanceuuid }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/metrics-has-value.yml
similarity index 100%
copy from test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/metrics-has-value.yml
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/policy-set.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/policy-set.yml
index 0df418f..a51bce7 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/policy-set.yml
@@ -13,30 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+status: true
+errorreason: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/process.yml
similarity index 62%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/process.yml
index faa04bc..c73cff5 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/process.yml
@@ -14,19 +14,22 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
+- id: {{ notEmpty .id }}
+  name: sqrt
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  instanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  instancename: test-instance
+  agentid: {{ notEmpty .agentid }}
+  detecttype: VM
+  attributes:
+    {{- contains .attributes }}
+    - name: host_ip
+      value: {{ notEmpty .value }}
+    - name: pid
+      value: {{ notEmpty .value }}
+    - name: command_line
+      value: /sqrt
     {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+  labels: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/query-policy.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/query-policy.yml
index 0df418f..8e8ed39 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/query-policy.yml
@@ -13,30 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+- type: ON_CPU
+  checkitems:
+    - type: PROCESS_CPU
+      threshold: "10"
+      period: 10
+      count: 3
+      urilist: []
+      uriregex: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/service.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_cpu/expected/service.yml
index faa04bc..09f5874 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/service.yml
@@ -14,19 +14,11 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1
+  name: test-continuous
+  group: ""
+  shortname: test-continuous
+  layers:
+    - OS_LINUX
+  normal: true
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/process_cpu/expected/trigger-task.yml b/test/e2e/cases/profiling/continuous/process_cpu/expected/trigger-task.yml
new file mode 100644
index 0000000..13c94ed
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_cpu/expected/trigger-task.yml
@@ -0,0 +1,36 @@
+# 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 . }}
+- taskid: {{ notEmpty .taskid }}
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  serviceinstanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  serviceinstancename: test-instance
+  processlabels: []
+  processid: {{ notEmpty .processid }}
+  processname: sqrt
+  taskstarttime: {{ ge .taskstarttime 1 }}
+  triggertype: CONTINUOUS_PROFILING
+  fixedtriggerduration: 600
+  continuousprofilingcauses:
+    - type: PROCESS_CPU
+      singlevalue:
+        threshold: 1000
+        current: {{ ge (index .continuousprofilingcauses 0).singlevalue.current 1 }}
+      uri: null
+  targettype: ON_CPU
+  createtime: {{ ge .createtime 1 }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/process_cpu/policy.yaml b/test/e2e/cases/profiling/continuous/process_cpu/policy.yaml
new file mode 100644
index 0000000..9cbafe2
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_cpu/policy.yaml
@@ -0,0 +1,41 @@
+# 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.
+
+# Policy config
+# policy: the policy config list
+# - type: the profiling target type when reached the threshold, support: "ON_CPU", "OFF_CPU", "NETWORK"
+#   checks: define the thresholds, when any configuration item reaches the threshold, it will trigger profiling task
+#     - type: monitoring type, please see the below monitoring type with threshold description
+#       threshold: monitor threshold, please see the below monitoring type with threshold description
+#       period: the length of time to evaluate the metrics
+#       count: how many times after the metrics match the threshold, will trigger profiling
+#       uriList: the URI paths filter when monitor the HTTP related types
+#       uriRegex: the URI regex filter when monitor the HTTP related types
+
+# Monitoring type with threshold
+# PROCESS_CPU: Monitoring Process CPU percent, threshold value in [0-100]
+# PROCESS_THREAD_COUNT: Monitoring process thread count, threshold value must bigger than zero
+# SYSTEM_LOAD: Monitoring current system load, threshold value must bigger than zero
+# HTTP_ERROR_RATE: Monitoring the process HTTP response error(status>=500) percent, threshold value in [0-100]
+# HTTP_AVG_RESPONSE_TIME: Monitoring the process HTTP response duration(ms), threshold value must be bigger than zero
+
+policy:
+  - type: ON_CPU
+    checkers:
+      - type: PROCESS_CPU
+        threshold: 10
+        period: 10
+        count: 3
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/sqrt.go b/test/e2e/cases/profiling/continuous/process_cpu/sqrt.go
similarity index 100%
copy from test/e2e/cases/profiling/oncpu/golang/sqrt.go
copy to test/e2e/cases/profiling/continuous/process_cpu/sqrt.go
diff --git a/test/e2e/cases/profiling/continuous/process_thread_count/Dockerfile b/test/e2e/cases/profiling/continuous/process_thread_count/Dockerfile
new file mode 100644
index 0000000..42bca1e
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/Dockerfile
@@ -0,0 +1,24 @@
+# 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 eclipse-temurin:11-jdk
+
+WORKDIR /
+COPY MultiThread.java /
+
+RUN javac /MultiThread.java
+
+CMD ["java", "MultiThread"]
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/process_thread_count/MultiThread.java b/test/e2e/cases/profiling/continuous/process_thread_count/MultiThread.java
new file mode 100644
index 0000000..024c8da
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/MultiThread.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class MultiThread {
+    private static final int THREAD_COUNT = 10;
+    public static void main(String[] args) throws Exception {
+        for (int i = 0; i< THREAD_COUNT; i++) {
+            new Thread(() -> {
+                try {
+                    new LinkedBlockingQueue<Object>().take();
+                } catch (InterruptedException e) {
+                }
+            }).start();
+        }
+        new LinkedBlockingQueue<Object>().take();
+    }
+}
diff --git a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_thread_count/docker-compose.yml
similarity index 69%
copy from test/e2e/cases/profiling/offcpu/c/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/docker-compose.yml
index 816e685..0373a56 100644
--- a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/docker-compose.yml
@@ -27,17 +27,22 @@
     extends:
       file: ../../../../base/base-compose.yml
       service: rover
-    environment:
-      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
-      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: file
     depends_on:
       oap:
         condition: service_healthy
+    environment:
+      ROVER_PROCESS_DISCOVERY_SCAN_MODE: "REGEX"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: MultiThread
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER: OS_LINUX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: test-continuous
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME: test-instance
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME: "{{.Process.ExeName}}"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS: ""
 
-  file_c:
+  continuous_process_thread:
     build:
       context: .
-      dockerfile: Dockerfile.file
+      dockerfile: Dockerfile
     networks:
       - e2e
 
diff --git a/test/e2e/cases/profiling/continuous/process_thread_count/e2e.yaml b/test/e2e/cases/profiling/continuous/process_thread_count/e2e.yaml
new file mode 100644
index 0000000..c6111af
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/e2e.yaml
@@ -0,0 +1,61 @@
+# 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.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../../../base/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
+
+verify:
+  # verify with retry strategy
+  retry:
+    # max retry count
+    count: 20
+    # the interval between two retries, in millisecond.
+    interval: 10s
+  cases:
+    # metadata
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml service ls
+      expected: expected/service.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml instance ls --service-name test-continuous
+      expected: expected/instance.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml process ls --service-name test-continuous --instance-name test-instance
+      expected: expected/process.yml
+
+    # policy setting
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous set --service-name test-continuous --config test/e2e/cases/profiling/continuous/process_thread_count/policy.yaml
+      expected: expected/policy-set.yml
+    - query: swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling continuous ls --service-name test-continuous
+      expected: expected/query-policy.yml
+
+    # check profiling metrics
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml metrics linear \
+          --service-name test-continuous --instance-name test-instance --process-name java --name continuous_profiling_process_thread_count |yq e 'to_entries' -
+      expected: expected/metrics-has-value.yml
+
+    # check triggered profiling task
+    - query: |
+        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name test-continuous --trigger CONTINUOUS_PROFILING
+      expected: expected/trigger-task.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/instance.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/instance.yml
index faa04bc..b2ac6e7 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/instance.yml
@@ -14,19 +14,9 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  name: test-instance
+  attributes: []
+  language: UNKNOWN
+  instanceuuid: {{ notEmpty .instanceuuid }}
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/metrics-has-value.yml
similarity index 100%
copy from test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/metrics-has-value.yml
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/policy-set.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/policy-set.yml
index 0df418f..a51bce7 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/policy-set.yml
@@ -13,30 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+status: true
+errorreason: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/process.yml
similarity index 64%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/process.yml
index faa04bc..b6d26ae 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/process.yml
@@ -14,19 +14,20 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
+- id: {{ notEmpty .id }}
+  name: java
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  instanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  instancename: test-instance
+  agentid: {{ notEmpty .agentid }}
+  detecttype: VM
+  attributes:
+    {{- contains .attributes }}
+    - name: host_ip
+      value: {{ notEmpty .value }}
+    - name: pid
+      value: {{ notEmpty .value }}
     {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+  labels: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/query-policy.yml
similarity index 65%
copy from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/query-policy.yml
index 0df418f..5e4a730 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/query-policy.yml
@@ -13,30 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-version: '2.1'
-
-services:
-  oap:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: oap
-    ports:
-      - 12800:12800
-
-  rover:
-    extends:
-      file: ../../../../base/base-compose.yml
-      service: rover
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  sqrt_go:
-    build:
-      context: .
-      dockerfile: Dockerfile.sqrt
-    networks:
-      - e2e
-
-networks:
-  e2e:
\ No newline at end of file
+- type: ON_CPU
+  checkitems:
+    - type: PROCESS_THREAD_COUNT
+      threshold: "5"
+      period: 10
+      count: 3
+      urilist: []
+      uriregex: null
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/service.yml
similarity index 66%
copy from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
copy to test/e2e/cases/profiling/continuous/process_thread_count/expected/service.yml
index faa04bc..09f5874 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/service.yml
@@ -14,19 +14,11 @@
 # limitations under the License.
 
 {{- contains . }}
-- taskid: {{ notEmpty .taskid }}
-  serviceid: {{ b64enc "sqrt" }}.1
-  servicename: sqrt
-  serviceinstanceid: null
-  serviceinstancename: null
-  processlabels:
-    {{- contains .processlabels }}
-    - e2e-label1
-    - e2e-label2
-    {{- end }}
-  taskstarttime: {{ gt .taskstarttime 0 }}
-  triggertype: FIXED_TIME
-  fixedtriggerduration: 60
-  targettype: ON_CPU
-  createtime: {{ gt .createtime 0 }}
+- id: {{ b64enc "test-continuous" }}.1
+  name: test-continuous
+  group: ""
+  shortname: test-continuous
+  layers:
+    - OS_LINUX
+  normal: true
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/process_thread_count/expected/trigger-task.yml b/test/e2e/cases/profiling/continuous/process_thread_count/expected/trigger-task.yml
new file mode 100644
index 0000000..8c7a402
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/expected/trigger-task.yml
@@ -0,0 +1,36 @@
+# 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 . }}
+- taskid: {{ notEmpty .taskid }}
+  serviceid: {{ b64enc "test-continuous" }}.1
+  servicename: test-continuous
+  serviceinstanceid: {{ b64enc "test-continuous" }}.1_{{ b64enc "test-instance" }}
+  serviceinstancename: test-instance
+  processlabels: []
+  processid: {{ notEmpty .processid }}
+  processname: java
+  taskstarttime: {{ ge .taskstarttime 1 }}
+  triggertype: CONTINUOUS_PROFILING
+  fixedtriggerduration: 600
+  continuousprofilingcauses:
+    - type: PROCESS_THREAD_COUNT
+      singlevalue:
+        threshold: 500
+        current: {{ ge (index .continuousprofilingcauses 0).singlevalue.current 1 }}
+      uri: null
+  targettype: ON_CPU
+  createtime: {{ ge .createtime 1 }}
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/continuous/process_thread_count/policy.yaml b/test/e2e/cases/profiling/continuous/process_thread_count/policy.yaml
new file mode 100644
index 0000000..09970da
--- /dev/null
+++ b/test/e2e/cases/profiling/continuous/process_thread_count/policy.yaml
@@ -0,0 +1,41 @@
+# 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.
+
+# Policy config
+# policy: the policy config list
+# - type: the profiling target type when reached the threshold, support: "ON_CPU", "OFF_CPU", "NETWORK"
+#   checks: define the thresholds, when any configuration item reaches the threshold, it will trigger profiling task
+#     - type: monitoring type, please see the below monitoring type with threshold description
+#       threshold: monitor threshold, please see the below monitoring type with threshold description
+#       period: the length of time to evaluate the metrics
+#       count: how many times after the metrics match the threshold, will trigger profiling
+#       uriList: the URI paths filter when monitor the HTTP related types
+#       uriRegex: the URI regex filter when monitor the HTTP related types
+
+# Monitoring type with threshold
+# PROCESS_CPU: Monitoring Process CPU percent, threshold value in [0-100]
+# PROCESS_THREAD_COUNT: Monitoring process thread count, threshold value must bigger than zero
+# SYSTEM_LOAD: Monitoring current system load, threshold value must bigger than zero
+# HTTP_ERROR_RATE: Monitoring the process HTTP response error(status>=500) percent, threshold value in [0-100]
+# HTTP_AVG_RESPONSE_TIME: Monitoring the process HTTP response duration(ms), threshold value must be bigger than zero
+
+policy:
+  - type: ON_CPU
+    checkers:
+      - type: PROCESS_THREAD_COUNT
+        threshold: 5
+        period: 10
+        count: 3
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/network/nodejs/e2e.yaml b/test/e2e/cases/profiling/network/nodejs/e2e.yaml
deleted file mode 100644
index 72e75bf..0000000
--- a/test/e2e/cases/profiling/network/nodejs/e2e.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-trigger:
-  action: http
-  interval: 3s
-  times: 10
-  url: https://${service_host}:${service_10443}/consumer
-  method: GET
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../base-cases.yaml
-        - ../http1-metrics-cases.yaml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/network/python/e2e.yaml b/test/e2e/cases/profiling/network/python/e2e.yaml
deleted file mode 100644
index 72e75bf..0000000
--- a/test/e2e/cases/profiling/network/python/e2e.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-trigger:
-  action: http
-  interval: 3s
-  times: 10
-  url: https://${service_host}:${service_10443}/consumer
-  method: GET
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../base-cases.yaml
-        - ../http1-metrics-cases.yaml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/offcpu/c/e2e.yaml b/test/e2e/cases/profiling/offcpu/c/e2e.yaml
deleted file mode 100644
index 8c9d512..0000000
--- a/test/e2e/cases/profiling/offcpu/c/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name file |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/offcpu/golang/e2e.yaml b/test/e2e/cases/profiling/offcpu/golang/e2e.yaml
deleted file mode 100644
index 8c9d512..0000000
--- a/test/e2e/cases/profiling/offcpu/golang/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name file |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/offcpu/rust/e2e.yaml b/test/e2e/cases/profiling/offcpu/rust/e2e.yaml
deleted file mode 100644
index 8c9d512..0000000
--- a/test/e2e/cases/profiling/offcpu/rust/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name file |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/c/e2e.yaml b/test/e2e/cases/profiling/oncpu/c/e2e.yaml
deleted file mode 100644
index f607abd..0000000
--- a/test/e2e/cases/profiling/oncpu/c/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name sqrt |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/golang/e2e.yaml b/test/e2e/cases/profiling/oncpu/golang/e2e.yaml
deleted file mode 100644
index f607abd..0000000
--- a/test/e2e/cases/profiling/oncpu/golang/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name sqrt |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/rust/e2e.yaml b/test/e2e/cases/profiling/oncpu/rust/e2e.yaml
deleted file mode 100644
index f607abd..0000000
--- a/test/e2e/cases/profiling/oncpu/rust/e2e.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-setup:
-  env: compose
-  file: docker-compose.yml
-  timeout: 20m
-  init-system-environment: ../../../../base/env
-  steps:
-    - name: set PATH
-      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
-    - name: install yq
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
-    - name: install swctl
-      command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh swctl
-
-verify:
-  # verify with retry strategy
-  retry:
-    # max retry count
-    count: 20
-    # the interval between two retries, in millisecond.
-    interval: 10s
-  cases:
-    - includes:
-        - ../profiling-cases.yaml
-    - query: |
-        taskid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf list --service-name sqrt |yq e '.[0].taskid' -)
-        scheduleid=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid |yq e '.[0].scheduleid' -);
-        start=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].starttime' -)
-        end=$(swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf schedules --task-id=$taskid | yq e '.[0].endtime' -)
-        swctl --base-url=http://${oap_host}:${oap_12800}/graphql --display yaml profiling ebpf analysis --schedule-id=$scheduleid --time-ranges=$start-$end
-      expected: profiling-analysis.yml
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/network/base-cases.yaml b/test/e2e/cases/profiling/task/network/base-cases.yaml
similarity index 99%
rename from test/e2e/cases/profiling/network/base-cases.yaml
rename to test/e2e/cases/profiling/task/network/base-cases.yaml
index c3d377d..a52484b 100644
--- a/test/e2e/cases/profiling/network/base-cases.yaml
+++ b/test/e2e/cases/profiling/task/network/base-cases.yaml
@@ -24,7 +24,7 @@
     expected: expected/process.yml
 
   # create network profiling task
-  - 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/cases/profiling/network/sampling.yaml
+  - 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/cases/profiling/task/network/sampling.yaml
     expected: expected/profiling-create.yml
   - 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
diff --git a/test/e2e/cases/profiling/network/base/Dockerfile.nginx b/test/e2e/cases/profiling/task/network/base/Dockerfile.nginx
similarity index 100%
rename from test/e2e/cases/profiling/network/base/Dockerfile.nginx
rename to test/e2e/cases/profiling/task/network/base/Dockerfile.nginx
diff --git a/test/e2e/cases/profiling/network/base/docker-compose.yml b/test/e2e/cases/profiling/task/network/base/docker-compose.yml
similarity index 95%
rename from test/e2e/cases/profiling/network/base/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/base/docker-compose.yml
index d760ac0..0e3b528 100644
--- a/test/e2e/cases/profiling/network/base/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/network/base/docker-compose.yml
@@ -51,7 +51,7 @@
 
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     environment:
       SW_METER_ANALYZER_ACTIVE_FILES: network-profiling
@@ -68,7 +68,7 @@
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     volumes:
       - ./rover_configs.yaml:/skywalking/configs/rover_configs.yaml
diff --git a/test/e2e/cases/profiling/network/base/network-profiling.yaml b/test/e2e/cases/profiling/task/network/base/network-profiling.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/base/network-profiling.yaml
rename to test/e2e/cases/profiling/task/network/base/network-profiling.yaml
diff --git a/test/e2e/cases/profiling/network/base/nginx.conf b/test/e2e/cases/profiling/task/network/base/nginx.conf
similarity index 100%
rename from test/e2e/cases/profiling/network/base/nginx.conf
rename to test/e2e/cases/profiling/task/network/base/nginx.conf
diff --git a/test/e2e/cases/profiling/network/base/rover_configs.yaml b/test/e2e/cases/profiling/task/network/base/rover_configs.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/base/rover_configs.yaml
rename to test/e2e/cases/profiling/task/network/base/rover_configs.yaml
diff --git a/test/e2e/cases/profiling/network/base/slow-trace-lal.yaml b/test/e2e/cases/profiling/task/network/base/slow-trace-lal.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/base/slow-trace-lal.yaml
rename to test/e2e/cases/profiling/task/network/base/slow-trace-lal.yaml
diff --git a/test/e2e/cases/profiling/network/base/ssl/gen-selfsigned-ssl.sh b/test/e2e/cases/profiling/task/network/base/ssl/gen-selfsigned-ssl.sh
similarity index 100%
rename from test/e2e/cases/profiling/network/base/ssl/gen-selfsigned-ssl.sh
rename to test/e2e/cases/profiling/task/network/base/ssl/gen-selfsigned-ssl.sh
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/CMakeLists.txt b/test/e2e/cases/profiling/task/network/c_plus_plus/CMakeLists.txt
similarity index 100%
rename from test/e2e/cases/profiling/network/c_plus_plus/CMakeLists.txt
rename to test/e2e/cases/profiling/task/network/c_plus_plus/CMakeLists.txt
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/Dockerfile b/test/e2e/cases/profiling/task/network/c_plus_plus/Dockerfile
similarity index 100%
rename from test/e2e/cases/profiling/network/c_plus_plus/Dockerfile
rename to test/e2e/cases/profiling/task/network/c_plus_plus/Dockerfile
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/docker-compose.yml b/test/e2e/cases/profiling/task/network/c_plus_plus/docker-compose.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/c_plus_plus/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/c_plus_plus/docker-compose.yml
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml b/test/e2e/cases/profiling/task/network/c_plus_plus/e2e.yaml
similarity index 96%
rename from test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
rename to test/e2e/cases/profiling/task/network/c_plus_plus/e2e.yaml
index 72e75bf..e12faa2 100644
--- a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/c_plus_plus/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/src/main.cpp b/test/e2e/cases/profiling/task/network/c_plus_plus/src/main.cpp
similarity index 100%
rename from test/e2e/cases/profiling/network/c_plus_plus/src/main.cpp
rename to test/e2e/cases/profiling/task/network/c_plus_plus/src/main.cpp
diff --git a/test/e2e/cases/profiling/network/envoy/e2e.yaml b/test/e2e/cases/profiling/task/network/envoy/e2e.yaml
similarity index 97%
rename from test/e2e/cases/profiling/network/envoy/e2e.yaml
rename to test/e2e/cases/profiling/task/network/envoy/e2e.yaml
index 5cc4273..f273344 100644
--- a/test/e2e/cases/profiling/network/envoy/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/envoy/e2e.yaml
@@ -18,7 +18,7 @@
 setup:
   env: kind
   file: kind.yaml
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   kind:
     import-images:
       - apache/skywalking-rover:latest
@@ -46,7 +46,7 @@
         cd skywalking-kubernetes
         git reset --hard a7d8ff959b46e70cb10428c6714013563ae38cbc
         cd chart
-        mkdir -p skywalking/files/conf.d/oap/meter-analyzer-config/ && cp ../../test/e2e/cases/profiling/network/envoy/network-profiling.yaml skywalking/files/conf.d/oap/meter-analyzer-config/network-profiling.yaml
+        mkdir -p skywalking/files/conf.d/oap/meter-analyzer-config/ && cp ../../test/e2e/cases/profiling/task/network/envoy/network-profiling.yaml skywalking/files/conf.d/oap/meter-analyzer-config/network-profiling.yaml
         helm dep up skywalking
         helm -n istio-system install skywalking skywalking \
                        --set fullnameOverride=skywalking \
@@ -77,7 +77,7 @@
           for: condition=Ready
     - name: Install SkyWalking Rover
       command: |
-        envsubst < test/e2e/cases/profiling/network/envoy/rover.yaml | kubectl apply -f -
+        envsubst < test/e2e/cases/profiling/task/network/envoy/rover.yaml | kubectl apply -f -
       wait:
         - namespace: default
           resource: pod
diff --git a/test/e2e/cases/profiling/network/envoy/expected/dependency-processs.yml b/test/e2e/cases/profiling/task/network/envoy/expected/dependency-processs.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/dependency-processs.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/dependency-processs.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/metrics-has-value-label.yml b/test/e2e/cases/profiling/task/network/envoy/expected/metrics-has-value-label.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/metrics-has-value-label.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/metrics-has-value-label.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml b/test/e2e/cases/profiling/task/network/envoy/expected/metrics-has-value.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/metrics-has-value.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/metrics-has-value.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/process.yml b/test/e2e/cases/profiling/task/network/envoy/expected/process.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/process.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/process.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/profiling-create.yml b/test/e2e/cases/profiling/task/network/envoy/expected/profiling-create.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/profiling-create.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/profiling-create.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/service-instance.yml b/test/e2e/cases/profiling/task/network/envoy/expected/service-instance.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/service-instance.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/service-instance.yml
diff --git a/test/e2e/cases/profiling/network/envoy/expected/service.yml b/test/e2e/cases/profiling/task/network/envoy/expected/service.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/expected/service.yml
rename to test/e2e/cases/profiling/task/network/envoy/expected/service.yml
diff --git a/test/e2e/cases/profiling/network/envoy/kind.yaml b/test/e2e/cases/profiling/task/network/envoy/kind.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/kind.yaml
rename to test/e2e/cases/profiling/task/network/envoy/kind.yaml
diff --git a/test/e2e/cases/profiling/network/envoy/network-profiling.yaml b/test/e2e/cases/profiling/task/network/envoy/network-profiling.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/network-profiling.yaml
rename to test/e2e/cases/profiling/task/network/envoy/network-profiling.yaml
diff --git a/test/e2e/cases/profiling/network/envoy/rover.yaml b/test/e2e/cases/profiling/task/network/envoy/rover.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/rover.yaml
rename to test/e2e/cases/profiling/task/network/envoy/rover.yaml
diff --git a/test/e2e/cases/profiling/network/envoy/traffic-gen.yaml b/test/e2e/cases/profiling/task/network/envoy/traffic-gen.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/envoy/traffic-gen.yaml
rename to test/e2e/cases/profiling/task/network/envoy/traffic-gen.yaml
diff --git a/test/e2e/cases/profiling/network/expected/dependency-processs.yml b/test/e2e/cases/profiling/task/network/expected/dependency-processs.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/dependency-processs.yml
rename to test/e2e/cases/profiling/task/network/expected/dependency-processs.yml
diff --git a/test/e2e/cases/profiling/network/expected/instance.yml b/test/e2e/cases/profiling/task/network/expected/instance.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/instance.yml
rename to test/e2e/cases/profiling/task/network/expected/instance.yml
diff --git a/test/e2e/cases/profiling/network/expected/metrics-has-value-label.yml b/test/e2e/cases/profiling/task/network/expected/metrics-has-value-label.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/metrics-has-value-label.yml
rename to test/e2e/cases/profiling/task/network/expected/metrics-has-value-label.yml
diff --git a/test/e2e/cases/profiling/network/expected/metrics-has-value.yml b/test/e2e/cases/profiling/task/network/expected/metrics-has-value.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/metrics-has-value.yml
rename to test/e2e/cases/profiling/task/network/expected/metrics-has-value.yml
diff --git a/test/e2e/cases/profiling/network/expected/process.yml b/test/e2e/cases/profiling/task/network/expected/process.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/process.yml
rename to test/e2e/cases/profiling/task/network/expected/process.yml
diff --git a/test/e2e/cases/profiling/network/expected/profiling-create.yml b/test/e2e/cases/profiling/task/network/expected/profiling-create.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/profiling-create.yml
rename to test/e2e/cases/profiling/task/network/expected/profiling-create.yml
diff --git a/test/e2e/cases/profiling/network/expected/service.yml b/test/e2e/cases/profiling/task/network/expected/service.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/service.yml
rename to test/e2e/cases/profiling/task/network/expected/service.yml
diff --git a/test/e2e/cases/profiling/network/expected/skywalking-trace.yml b/test/e2e/cases/profiling/task/network/expected/skywalking-trace.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/skywalking-trace.yml
rename to test/e2e/cases/profiling/task/network/expected/skywalking-trace.yml
diff --git a/test/e2e/cases/profiling/network/expected/slow-traces.yml b/test/e2e/cases/profiling/task/network/expected/slow-traces.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/slow-traces.yml
rename to test/e2e/cases/profiling/task/network/expected/slow-traces.yml
diff --git a/test/e2e/cases/profiling/network/expected/status-4xx-traces.yml b/test/e2e/cases/profiling/task/network/expected/status-4xx-traces.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/status-4xx-traces.yml
rename to test/e2e/cases/profiling/task/network/expected/status-4xx-traces.yml
diff --git a/test/e2e/cases/profiling/network/expected/status-5xx-traces.yml b/test/e2e/cases/profiling/task/network/expected/status-5xx-traces.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/status-5xx-traces.yml
rename to test/e2e/cases/profiling/task/network/expected/status-5xx-traces.yml
diff --git a/test/e2e/cases/profiling/network/expected/zipkin-trace.yml b/test/e2e/cases/profiling/task/network/expected/zipkin-trace.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/expected/zipkin-trace.yml
rename to test/e2e/cases/profiling/task/network/expected/zipkin-trace.yml
diff --git a/test/e2e/cases/profiling/network/golang/Dockerfile b/test/e2e/cases/profiling/task/network/golang/Dockerfile
similarity index 100%
rename from test/e2e/cases/profiling/network/golang/Dockerfile
rename to test/e2e/cases/profiling/task/network/golang/Dockerfile
diff --git a/test/e2e/cases/profiling/network/golang/docker-compose.yml b/test/e2e/cases/profiling/task/network/golang/docker-compose.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/golang/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/golang/docker-compose.yml
diff --git a/test/e2e/cases/profiling/network/golang/e2e.yaml b/test/e2e/cases/profiling/task/network/golang/e2e.yaml
similarity index 96%
rename from test/e2e/cases/profiling/network/golang/e2e.yaml
rename to test/e2e/cases/profiling/task/network/golang/e2e.yaml
index 1ce5316..30b1b0e 100644
--- a/test/e2e/cases/profiling/network/golang/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/golang/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/network/golang/go.mod b/test/e2e/cases/profiling/task/network/golang/go.mod
similarity index 100%
rename from test/e2e/cases/profiling/network/golang/go.mod
rename to test/e2e/cases/profiling/task/network/golang/go.mod
diff --git a/test/e2e/cases/profiling/network/golang/go.sum b/test/e2e/cases/profiling/task/network/golang/go.sum
similarity index 100%
rename from test/e2e/cases/profiling/network/golang/go.sum
rename to test/e2e/cases/profiling/task/network/golang/go.sum
diff --git a/test/e2e/cases/profiling/network/golang/service.go b/test/e2e/cases/profiling/task/network/golang/service.go
similarity index 100%
rename from test/e2e/cases/profiling/network/golang/service.go
rename to test/e2e/cases/profiling/task/network/golang/service.go
diff --git a/test/e2e/cases/profiling/network/http1-metrics-cases.yaml b/test/e2e/cases/profiling/task/network/http1-metrics-cases.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/http1-metrics-cases.yaml
rename to test/e2e/cases/profiling/task/network/http1-metrics-cases.yaml
diff --git a/test/e2e/cases/profiling/network/http1-sampled-traces-cases.yaml b/test/e2e/cases/profiling/task/network/http1-sampled-traces-cases.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/http1-sampled-traces-cases.yaml
rename to test/e2e/cases/profiling/task/network/http1-sampled-traces-cases.yaml
diff --git a/test/e2e/cases/profiling/network/http2/Dockerfile b/test/e2e/cases/profiling/task/network/http2/Dockerfile
similarity index 100%
rename from test/e2e/cases/profiling/network/http2/Dockerfile
rename to test/e2e/cases/profiling/task/network/http2/Dockerfile
diff --git a/test/e2e/cases/profiling/network/http2/docker-compose.yml b/test/e2e/cases/profiling/task/network/http2/docker-compose.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/http2/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/http2/docker-compose.yml
diff --git a/test/e2e/cases/profiling/network/http2/e2e.yaml b/test/e2e/cases/profiling/task/network/http2/e2e.yaml
similarity index 96%
rename from test/e2e/cases/profiling/network/http2/e2e.yaml
rename to test/e2e/cases/profiling/task/network/http2/e2e.yaml
index df48e46..452b8ed 100644
--- a/test/e2e/cases/profiling/network/http2/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/http2/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/network/http2/go.mod b/test/e2e/cases/profiling/task/network/http2/go.mod
similarity index 100%
rename from test/e2e/cases/profiling/network/http2/go.mod
rename to test/e2e/cases/profiling/task/network/http2/go.mod
diff --git a/test/e2e/cases/profiling/network/http2/grpc.go b/test/e2e/cases/profiling/task/network/http2/grpc.go
similarity index 100%
rename from test/e2e/cases/profiling/network/http2/grpc.go
rename to test/e2e/cases/profiling/task/network/http2/grpc.go
diff --git a/test/e2e/cases/profiling/network/http2/service.proto b/test/e2e/cases/profiling/task/network/http2/service.proto
similarity index 100%
rename from test/e2e/cases/profiling/network/http2/service.proto
rename to test/e2e/cases/profiling/task/network/http2/service.proto
diff --git a/test/e2e/cases/profiling/network/nodejs/Dockerfile b/test/e2e/cases/profiling/task/network/nodejs/Dockerfile
similarity index 100%
rename from test/e2e/cases/profiling/network/nodejs/Dockerfile
rename to test/e2e/cases/profiling/task/network/nodejs/Dockerfile
diff --git a/test/e2e/cases/profiling/network/nodejs/docker-compose.yml b/test/e2e/cases/profiling/task/network/nodejs/docker-compose.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/nodejs/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/nodejs/docker-compose.yml
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml b/test/e2e/cases/profiling/task/network/nodejs/e2e.yaml
similarity index 96%
copy from test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
copy to test/e2e/cases/profiling/task/network/nodejs/e2e.yaml
index 72e75bf..e12faa2 100644
--- a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/nodejs/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/network/nodejs/service.js b/test/e2e/cases/profiling/task/network/nodejs/service.js
similarity index 100%
rename from test/e2e/cases/profiling/network/nodejs/service.js
rename to test/e2e/cases/profiling/task/network/nodejs/service.js
diff --git a/test/e2e/cases/profiling/network/python/Dockerfile b/test/e2e/cases/profiling/task/network/python/Dockerfile
similarity index 100%
rename from test/e2e/cases/profiling/network/python/Dockerfile
rename to test/e2e/cases/profiling/task/network/python/Dockerfile
diff --git a/test/e2e/cases/profiling/network/python/docker-compose.yml b/test/e2e/cases/profiling/task/network/python/docker-compose.yml
similarity index 100%
rename from test/e2e/cases/profiling/network/python/docker-compose.yml
rename to test/e2e/cases/profiling/task/network/python/docker-compose.yml
diff --git a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml b/test/e2e/cases/profiling/task/network/python/e2e.yaml
similarity index 96%
copy from test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
copy to test/e2e/cases/profiling/task/network/python/e2e.yaml
index 72e75bf..e12faa2 100644
--- a/test/e2e/cases/profiling/network/c_plus_plus/e2e.yaml
+++ b/test/e2e/cases/profiling/task/network/python/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/network/python/requirements.txt b/test/e2e/cases/profiling/task/network/python/requirements.txt
similarity index 100%
rename from test/e2e/cases/profiling/network/python/requirements.txt
rename to test/e2e/cases/profiling/task/network/python/requirements.txt
diff --git a/test/e2e/cases/profiling/network/python/service.py b/test/e2e/cases/profiling/task/network/python/service.py
similarity index 100%
rename from test/e2e/cases/profiling/network/python/service.py
rename to test/e2e/cases/profiling/task/network/python/service.py
diff --git a/test/e2e/cases/profiling/network/sampling.yaml b/test/e2e/cases/profiling/task/network/sampling.yaml
similarity index 100%
rename from test/e2e/cases/profiling/network/sampling.yaml
rename to test/e2e/cases/profiling/task/network/sampling.yaml
diff --git a/test/e2e/cases/profiling/offcpu/c++/Dockerfile.file b/test/e2e/cases/profiling/task/offcpu/c++/Dockerfile.file
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c++/Dockerfile.file
rename to test/e2e/cases/profiling/task/offcpu/c++/Dockerfile.file
diff --git a/test/e2e/cases/profiling/offcpu/c++/docker-compose.yml b/test/e2e/cases/profiling/task/offcpu/c++/docker-compose.yml
similarity index 92%
rename from test/e2e/cases/profiling/offcpu/c++/docker-compose.yml
rename to test/e2e/cases/profiling/task/offcpu/c++/docker-compose.yml
index 49aee4e..6839a91 100644
--- a/test/e2e/cases/profiling/offcpu/c++/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/offcpu/c++/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     environment:
       ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
diff --git a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/offcpu/c++/e2e.yaml
similarity index 97%
rename from test/e2e/cases/profiling/offcpu/c++/e2e.yaml
rename to test/e2e/cases/profiling/task/offcpu/c++/e2e.yaml
index 8c9d512..1a462f5 100644
--- a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/offcpu/c++/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/offcpu/c++/file.cpp b/test/e2e/cases/profiling/task/offcpu/c++/file.cpp
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c++/file.cpp
rename to test/e2e/cases/profiling/task/offcpu/c++/file.cpp
diff --git a/test/e2e/cases/profiling/offcpu/c++/profiling-analysis.yml b/test/e2e/cases/profiling/task/offcpu/c++/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c++/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/offcpu/c++/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/offcpu/c/Dockerfile.file b/test/e2e/cases/profiling/task/offcpu/c/Dockerfile.file
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c/Dockerfile.file
rename to test/e2e/cases/profiling/task/offcpu/c/Dockerfile.file
diff --git a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml b/test/e2e/cases/profiling/task/offcpu/c/docker-compose.yml
similarity index 92%
rename from test/e2e/cases/profiling/offcpu/c/docker-compose.yml
rename to test/e2e/cases/profiling/task/offcpu/c/docker-compose.yml
index 816e685..3013ce5 100644
--- a/test/e2e/cases/profiling/offcpu/c/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/offcpu/c/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     environment:
       ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
diff --git a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/offcpu/c/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/offcpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/offcpu/c/e2e.yaml
index 8c9d512..1a462f5 100644
--- a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/offcpu/c/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/offcpu/c/file.c b/test/e2e/cases/profiling/task/offcpu/c/file.c
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c/file.c
rename to test/e2e/cases/profiling/task/offcpu/c/file.c
diff --git a/test/e2e/cases/profiling/offcpu/c/profiling-analysis.yml b/test/e2e/cases/profiling/task/offcpu/c/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/c/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/offcpu/c/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/offcpu/expected/instance.yml b/test/e2e/cases/profiling/task/offcpu/expected/instance.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/expected/instance.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/instance.yml
diff --git a/test/e2e/cases/profiling/offcpu/expected/process.yml b/test/e2e/cases/profiling/task/offcpu/expected/process.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/expected/process.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/process.yml
diff --git a/test/e2e/cases/profiling/offcpu/expected/profiling-create.yml b/test/e2e/cases/profiling/task/offcpu/expected/profiling-create.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/expected/profiling-create.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/profiling-create.yml
diff --git a/test/e2e/cases/profiling/offcpu/expected/profiling-schedule-list.yml b/test/e2e/cases/profiling/task/offcpu/expected/profiling-schedule-list.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/expected/profiling-schedule-list.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/profiling-schedule-list.yml
diff --git a/test/e2e/cases/profiling/offcpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/task/offcpu/expected/profiling-task-list.yml
similarity index 94%
rename from test/e2e/cases/profiling/offcpu/expected/profiling-task-list.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/profiling-task-list.yml
index 49ea171..69864ea 100644
--- a/test/e2e/cases/profiling/offcpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/task/offcpu/expected/profiling-task-list.yml
@@ -24,9 +24,12 @@
     - e2e-label1
     - e2e-label2
     {{- end }}
+  processid: null
+  processname: null
   taskstarttime: {{ gt .taskstarttime 0 }}
   triggertype: FIXED_TIME
   fixedtriggerduration: 60
   targettype: OFF_CPU
   createtime: {{ gt .createtime 0 }}
+  continuousprofilingcauses: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/offcpu/expected/service.yml b/test/e2e/cases/profiling/task/offcpu/expected/service.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/expected/service.yml
rename to test/e2e/cases/profiling/task/offcpu/expected/service.yml
diff --git a/test/e2e/cases/profiling/offcpu/golang/Dockerfile.file b/test/e2e/cases/profiling/task/offcpu/golang/Dockerfile.file
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/golang/Dockerfile.file
rename to test/e2e/cases/profiling/task/offcpu/golang/Dockerfile.file
diff --git a/test/e2e/cases/profiling/offcpu/golang/docker-compose.yml b/test/e2e/cases/profiling/task/offcpu/golang/docker-compose.yml
similarity index 92%
rename from test/e2e/cases/profiling/offcpu/golang/docker-compose.yml
rename to test/e2e/cases/profiling/task/offcpu/golang/docker-compose.yml
index e1aa572..41025d2 100644
--- a/test/e2e/cases/profiling/offcpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/offcpu/golang/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     environment:
       ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
diff --git a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/offcpu/golang/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/offcpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/offcpu/golang/e2e.yaml
index 8c9d512..1a462f5 100644
--- a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/offcpu/golang/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/offcpu/golang/file.go b/test/e2e/cases/profiling/task/offcpu/golang/file.go
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/golang/file.go
rename to test/e2e/cases/profiling/task/offcpu/golang/file.go
diff --git a/test/e2e/cases/profiling/offcpu/golang/profiling-analysis.yml b/test/e2e/cases/profiling/task/offcpu/golang/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/golang/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/offcpu/golang/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/offcpu/profiling-cases.yaml b/test/e2e/cases/profiling/task/offcpu/profiling-cases.yaml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/profiling-cases.yaml
rename to test/e2e/cases/profiling/task/offcpu/profiling-cases.yaml
diff --git a/test/e2e/cases/profiling/offcpu/rust/Dockerfile.file b/test/e2e/cases/profiling/task/offcpu/rust/Dockerfile.file
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/rust/Dockerfile.file
rename to test/e2e/cases/profiling/task/offcpu/rust/Dockerfile.file
diff --git a/test/e2e/cases/profiling/offcpu/rust/docker-compose.yml b/test/e2e/cases/profiling/task/offcpu/rust/docker-compose.yml
similarity index 92%
rename from test/e2e/cases/profiling/offcpu/rust/docker-compose.yml
rename to test/e2e/cases/profiling/task/offcpu/rust/docker-compose.yml
index 723e51e..02633df 100644
--- a/test/e2e/cases/profiling/offcpu/rust/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/offcpu/rust/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     environment:
       ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: /file
diff --git a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/offcpu/rust/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/offcpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/offcpu/rust/e2e.yaml
index 8c9d512..1a462f5 100644
--- a/test/e2e/cases/profiling/offcpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/offcpu/rust/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/offcpu/rust/file.rs b/test/e2e/cases/profiling/task/offcpu/rust/file.rs
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/rust/file.rs
rename to test/e2e/cases/profiling/task/offcpu/rust/file.rs
diff --git a/test/e2e/cases/profiling/offcpu/rust/profiling-analysis.yml b/test/e2e/cases/profiling/task/offcpu/rust/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/offcpu/rust/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/offcpu/rust/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/oncpu/c++/Dockerfile.sqrt b/test/e2e/cases/profiling/task/oncpu/c++/Dockerfile.sqrt
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c++/Dockerfile.sqrt
rename to test/e2e/cases/profiling/task/oncpu/c++/Dockerfile.sqrt
diff --git a/test/e2e/cases/profiling/oncpu/c++/docker-compose.yml b/test/e2e/cases/profiling/task/oncpu/c++/docker-compose.yml
similarity index 91%
rename from test/e2e/cases/profiling/oncpu/c++/docker-compose.yml
rename to test/e2e/cases/profiling/task/oncpu/c++/docker-compose.yml
index 613092c..05d7d6e 100644
--- a/test/e2e/cases/profiling/oncpu/c++/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/oncpu/c++/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     depends_on:
       oap:
diff --git a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/oncpu/c++/e2e.yaml
similarity index 97%
rename from test/e2e/cases/profiling/oncpu/c++/e2e.yaml
rename to test/e2e/cases/profiling/task/oncpu/c++/e2e.yaml
index f607abd..483ae8e 100644
--- a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/oncpu/c++/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/oncpu/c++/profiling-analysis.yml b/test/e2e/cases/profiling/task/oncpu/c++/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c++/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/oncpu/c++/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/oncpu/c++/sqrt.cpp b/test/e2e/cases/profiling/task/oncpu/c++/sqrt.cpp
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c++/sqrt.cpp
rename to test/e2e/cases/profiling/task/oncpu/c++/sqrt.cpp
diff --git a/test/e2e/cases/profiling/oncpu/c/Dockerfile.sqrt b/test/e2e/cases/profiling/task/oncpu/c/Dockerfile.sqrt
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c/Dockerfile.sqrt
rename to test/e2e/cases/profiling/task/oncpu/c/Dockerfile.sqrt
diff --git a/test/e2e/cases/profiling/oncpu/c/docker-compose.yml b/test/e2e/cases/profiling/task/oncpu/c/docker-compose.yml
similarity index 91%
rename from test/e2e/cases/profiling/oncpu/c/docker-compose.yml
rename to test/e2e/cases/profiling/task/oncpu/c/docker-compose.yml
index ed62923..97b8ee5 100644
--- a/test/e2e/cases/profiling/oncpu/c/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/oncpu/c/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     depends_on:
       oap:
diff --git a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/oncpu/c/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/oncpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/oncpu/c/e2e.yaml
index f607abd..483ae8e 100644
--- a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/oncpu/c/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/oncpu/c/profiling-analysis.yml b/test/e2e/cases/profiling/task/oncpu/c/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/oncpu/c/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/oncpu/c/sqrt.c b/test/e2e/cases/profiling/task/oncpu/c/sqrt.c
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/c/sqrt.c
rename to test/e2e/cases/profiling/task/oncpu/c/sqrt.c
diff --git a/test/e2e/cases/profiling/oncpu/expected/instance.yml b/test/e2e/cases/profiling/task/oncpu/expected/instance.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/instance.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/instance.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/process-estimate-scale.yml b/test/e2e/cases/profiling/task/oncpu/expected/process-estimate-scale.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/process-estimate-scale.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/process-estimate-scale.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/process.yml b/test/e2e/cases/profiling/task/oncpu/expected/process.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/process.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/process.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-create-prepare.yml b/test/e2e/cases/profiling/task/oncpu/expected/profiling-create-prepare.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/profiling-create-prepare.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/profiling-create-prepare.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-create.yml b/test/e2e/cases/profiling/task/oncpu/expected/profiling-create.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/profiling-create.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/profiling-create.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-schedule-list.yml b/test/e2e/cases/profiling/task/oncpu/expected/profiling-schedule-list.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/profiling-schedule-list.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/profiling-schedule-list.yml
diff --git a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml b/test/e2e/cases/profiling/task/oncpu/expected/profiling-task-list.yml
similarity index 94%
rename from test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/profiling-task-list.yml
index faa04bc..0147501 100644
--- a/test/e2e/cases/profiling/oncpu/expected/profiling-task-list.yml
+++ b/test/e2e/cases/profiling/task/oncpu/expected/profiling-task-list.yml
@@ -24,9 +24,12 @@
     - e2e-label1
     - e2e-label2
     {{- end }}
+  processid: null
+  processname: null
   taskstarttime: {{ gt .taskstarttime 0 }}
   triggertype: FIXED_TIME
   fixedtriggerduration: 60
   targettype: ON_CPU
   createtime: {{ gt .createtime 0 }}
+  continuousprofilingcauses: []
 {{- end }}
\ No newline at end of file
diff --git a/test/e2e/cases/profiling/oncpu/expected/service.yml b/test/e2e/cases/profiling/task/oncpu/expected/service.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/expected/service.yml
rename to test/e2e/cases/profiling/task/oncpu/expected/service.yml
diff --git a/test/e2e/cases/profiling/oncpu/golang/Dockerfile.sqrt b/test/e2e/cases/profiling/task/oncpu/golang/Dockerfile.sqrt
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/golang/Dockerfile.sqrt
rename to test/e2e/cases/profiling/task/oncpu/golang/Dockerfile.sqrt
diff --git a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml b/test/e2e/cases/profiling/task/oncpu/golang/docker-compose.yml
similarity index 91%
rename from test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
rename to test/e2e/cases/profiling/task/oncpu/golang/docker-compose.yml
index 0df418f..89645ef 100644
--- a/test/e2e/cases/profiling/oncpu/golang/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/oncpu/golang/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     depends_on:
       oap:
diff --git a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/oncpu/golang/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/oncpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/oncpu/golang/e2e.yaml
index f607abd..483ae8e 100644
--- a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/oncpu/golang/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/oncpu/golang/profiling-analysis.yml b/test/e2e/cases/profiling/task/oncpu/golang/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/golang/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/oncpu/golang/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/oncpu/golang/sqrt.go b/test/e2e/cases/profiling/task/oncpu/golang/sqrt.go
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/golang/sqrt.go
rename to test/e2e/cases/profiling/task/oncpu/golang/sqrt.go
diff --git a/test/e2e/cases/profiling/oncpu/profiling-cases.yaml b/test/e2e/cases/profiling/task/oncpu/profiling-cases.yaml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/profiling-cases.yaml
rename to test/e2e/cases/profiling/task/oncpu/profiling-cases.yaml
diff --git a/test/e2e/cases/profiling/oncpu/rust/Dockerfile.sqrt b/test/e2e/cases/profiling/task/oncpu/rust/Dockerfile.sqrt
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/rust/Dockerfile.sqrt
rename to test/e2e/cases/profiling/task/oncpu/rust/Dockerfile.sqrt
diff --git a/test/e2e/cases/profiling/oncpu/rust/docker-compose.yml b/test/e2e/cases/profiling/task/oncpu/rust/docker-compose.yml
similarity index 91%
rename from test/e2e/cases/profiling/oncpu/rust/docker-compose.yml
rename to test/e2e/cases/profiling/task/oncpu/rust/docker-compose.yml
index 405731d..b9b5ee0 100644
--- a/test/e2e/cases/profiling/oncpu/rust/docker-compose.yml
+++ b/test/e2e/cases/profiling/task/oncpu/rust/docker-compose.yml
@@ -18,14 +18,14 @@
 services:
   oap:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
 
   rover:
     extends:
-      file: ../../../../base/base-compose.yml
+      file: ../../../../../base/base-compose.yml
       service: rover
     depends_on:
       oap:
diff --git a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml b/test/e2e/cases/profiling/task/oncpu/rust/e2e.yaml
similarity index 97%
copy from test/e2e/cases/profiling/oncpu/c++/e2e.yaml
copy to test/e2e/cases/profiling/task/oncpu/rust/e2e.yaml
index f607abd..483ae8e 100644
--- a/test/e2e/cases/profiling/oncpu/c++/e2e.yaml
+++ b/test/e2e/cases/profiling/task/oncpu/rust/e2e.yaml
@@ -17,7 +17,7 @@
   env: compose
   file: docker-compose.yml
   timeout: 20m
-  init-system-environment: ../../../../base/env
+  init-system-environment: ../../../../../base/env
   steps:
     - name: set PATH
       command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
diff --git a/test/e2e/cases/profiling/oncpu/rust/profiling-analysis.yml b/test/e2e/cases/profiling/task/oncpu/rust/profiling-analysis.yml
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/rust/profiling-analysis.yml
rename to test/e2e/cases/profiling/task/oncpu/rust/profiling-analysis.yml
diff --git a/test/e2e/cases/profiling/oncpu/rust/sqrt.rs b/test/e2e/cases/profiling/task/oncpu/rust/sqrt.rs
similarity index 100%
rename from test/e2e/cases/profiling/oncpu/rust/sqrt.rs
rename to test/e2e/cases/profiling/task/oncpu/rust/sqrt.rs