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

wu-sheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-satellite.git


The following commit(s) were added to refs/heads/main by this push:
     new 3cfaf59  Support transmit pprof protocol (#255)
3cfaf59 is described below

commit 3cfaf59a755e7ffcd900d6695a8bc4174397cace
Author: mrproliu <[email protected]>
AuthorDate: Thu May 21 16:56:23 2026 +0800

    Support transmit pprof protocol (#255)
---
 .github/workflows/e2e-istio.yaml                   |   8 +-
 .github/workflows/e2e-native.yaml                  |   7 +-
 CHANGES.md                                         |   1 +
 configs/satellite_config.yaml                      |  26 ++++
 go.mod                                             |   2 +-
 go.sum                                             | 150 +--------------------
 plugins/forwarder/forwarder_repository.go          |   2 +
 plugins/forwarder/grpc/nativepprof/forwarder.go    | 112 +++++++++++++++
 plugins/receiver/grpc/nativepprof/pprof_service.go | 100 ++++++++++++++
 plugins/receiver/grpc/nativepprof/receiver.go      |  67 +++++++++
 plugins/receiver/receiver_repository.go            |   2 +
 test/e2e/base/base-compose.yml                     |  19 ++-
 test/e2e/base/env                                  |   6 +-
 test/e2e/base/go-provider/Dockerfile               |  34 +++++
 test/e2e/base/go-provider/go.mod                   |  25 ++++
 test/e2e/base/go-provider/go.sum                   |   2 +
 test/e2e/base/go-provider/main.go                  |  68 ++++++++++
 .../case/istio/als/expected/metrics-has-value.yml  |   4 +-
 test/e2e/case/istio/kind.yaml                      |   8 +-
 .../metrics/expected/metrics-has-value-label.yml   |   4 +-
 .../istio/metrics/expected/metrics-has-value.yml   |   4 +-
 test/e2e/case/istio/traffic-gen.yaml               |  10 +-
 test/e2e/case/istio/values.yaml                    |   2 +-
 .../case/native-asyncprofiler/docker-compose.yml   |   7 +
 test/e2e/case/native-ebpf/docker-compose.yml       |   8 ++
 .../docker-compose.yml                             |  59 ++++----
 test/e2e/case/native-pprof/e2e.yaml                |  64 +++++++++
 .../expected/analysis.yml}                         |  20 ++-
 .../expected/create.yml}                           |  14 +-
 .../expected/list.yml}                             |  20 +--
 .../expected/progress.yml}                         |  22 +--
 .../native-pprof/expected/service-instance.yml     |  28 ++++
 .../expected/service.yml}                          |  17 ++-
 test/e2e/case/native-protocols/docker-compose.yml  |   8 ++
 test/e2e/case/native-protocols/e2e.yaml            |  78 ++++++-----
 .../{service.yml => dependency-services.yml}       |  33 +++--
 .../case/native-protocols/expected/event-list.yml  |  20 ++-
 .../case/native-protocols/expected/logs-list.yml   |   4 +-
 .../expected/metrics-has-value.yml                 |  30 +++--
 .../expected/metrics-no-value.yml}                 |   4 +-
 .../expected/profile-segment-analyze.yml           |   2 +-
 .../expected/profile-segment-list.yml              |  52 ++++---
 .../e2e/case/native-protocols/expected/service.yml |  10 +-
 .../expected/trace-info-detail.yml                 |  97 +++++++------
 .../expected/trace-users-detail.yml                |  60 +++++----
 .../case/native-protocols/expected/traces-list.yml |  40 ++++--
 46 files changed, 934 insertions(+), 426 deletions(-)

diff --git a/.github/workflows/e2e-istio.yaml b/.github/workflows/e2e-istio.yaml
index bfe51fb..409b19b 100644
--- a/.github/workflows/e2e-istio.yaml
+++ b/.github/workflows/e2e-istio.yaml
@@ -34,7 +34,7 @@ jobs:
       fail-fast: true
       matrix:
         analyzer: [k8s-mesh, mx-mesh]
-        istio_version: [ 1.15.0, 1.16.0, 1.17.0, 1.18.0 ]
+        istio_version: [ 1.21.0, 1.22.0, 1.23.0, 1.24.0, 1.25.0, 1.26.0, 
1.27.0, 1.28.0, 1.29.0 ]
     name: Istio(${{ matrix.istio_version }})+ALS(${{ matrix.analyzer }})
     env:
       ISTIO_VERSION: ${{ matrix.istio_version }}
@@ -51,7 +51,7 @@ jobs:
       - name: Build Docker Image
         shell: bash
         run: make docker
-      - uses: 
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+      - uses: 
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
         with:
           e2e-file: test/e2e/case/istio/als/e2e.yaml
       - uses: actions/upload-artifact@v4
@@ -68,7 +68,7 @@ jobs:
     strategy:
       fail-fast: true
       matrix:
-        istio_version: [1.15.0, 1.16.0, 1.17.0, 1.18.0]
+        istio_version: [ 1.21.0, 1.22.0, 1.23.0, 1.24.0, 1.25.0, 1.26.0, 
1.27.0, 1.28.0, 1.29.0 ]
     env:
       ISTIO_VERSION: ${{ matrix.istio_version }}
     steps:
@@ -83,7 +83,7 @@ jobs:
       - name: Build Docker Image
         shell: bash
         run: make docker
-      - uses: 
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+      - uses: 
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
         with:
           e2e-file: test/e2e/case/istio/metrics/e2e.yaml
       - uses: actions/upload-artifact@v4
diff --git a/.github/workflows/e2e-native.yaml 
b/.github/workflows/e2e-native.yaml
index 8fbde96..3d8e7ab 100644
--- a/.github/workflows/e2e-native.yaml
+++ b/.github/workflows/e2e-native.yaml
@@ -32,6 +32,8 @@ jobs:
             config: test/e2e/case/native-ebpf/e2e.yaml
           - name: Native Process/Async Profiler
             config: test/e2e/case/native-asyncprofiler/e2e.yaml
+          - name: Native Process/Pprof Profiler
+            config: test/e2e/case/native-pprof/e2e.yaml
       fail-fast: true
     name: Native E2E test
     runs-on: ubuntu-latest
@@ -39,6 +41,9 @@ jobs:
       - uses: actions/checkout@v2
         with:
           submodules: true
+      - uses: actions/setup-go@v5
+        with:
+          go-version: 1.26
       - name: Build Test Service
         shell: bash
         run: |
@@ -46,7 +51,7 @@ jobs:
           ./mvnw --batch-mode -f provider/pom.xml clean package 
-Dsw.version=8.7.0
           ./mvnw --batch-mode -f consumer/pom.xml clean package 
-Dsw.version=8.7.0
       - name: ${{ matrix.test.name }}
-        uses: 
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+        uses: 
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
         with:
           e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
       - uses: actions/upload-artifact@v4
diff --git a/CHANGES.md b/CHANGES.md
index 819d424..254d38e 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,6 +8,7 @@ Release Notes.
 * Support native eBPF Access Log protocol.
 * Update go library to `1.24`.
 * Support async profiler protocol.
+* Support pprof protocol.
 
 #### Bug Fixes
 
diff --git a/configs/satellite_config.yaml b/configs/satellite_config.yaml
index 37f9298..56a3d1a 100644
--- a/configs/satellite_config.yaml
+++ b/configs/satellite_config.yaml
@@ -273,6 +273,32 @@ pipes:
       client_name: grpc-client
       forwarders:
         - plugin_name: native-async-profiler-grpc-forwarder
+  - common_config:
+      pipe_name: pprofpipe
+    gatherer:
+      server_name: "grpc-server"
+      receiver:
+        plugin_name: "grpc-native-pprof-receiver"
+      queue:
+        plugin_name: "memory-queue"
+        # The maximum buffer event size.
+        event_buffer_size: ${SATELLITE_QUEUE_EVENT_BUFFER_SIZE:5000}
+        # The partition count of queue.
+        partition: ${SATELLITE_QUEUE_PARTITION:4}
+    processor:
+      filters:
+    sender:
+      fallbacker:
+        plugin_name: none-fallbacker
+      # The time interval between two flush operations. And the time unit is 
millisecond.
+      flush_time: ${SATELLITE_PPROFPIPE_SENDER_FLUSH_TIME:1000}
+      # The maximum buffer elements.
+      max_buffer_size: ${SATELLITE_PPROFPIPE_SENDER_MAX_BUFFER_SIZE:200}
+      # The minimum flush elements.
+      min_flush_events: ${SATELLITE_PPROFPIPE_SENDER_MIN_FLUSH_EVENTS:1}
+      client_name: grpc-client
+      forwarders:
+        - plugin_name: native-pprof-grpc-forwarder
   - common_config:
       pipe_name: cdspipe
     gatherer:
diff --git a/go.mod b/go.mod
index f162029..ad1aa10 100644
--- a/go.mod
+++ b/go.mod
@@ -24,7 +24,7 @@ require (
        google.golang.org/protobuf v1.36.11
        gopkg.in/yaml.v3 v3.0.1
        k8s.io/apimachinery v0.35.3
-       skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128
+       skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce
 )
 
 require (
diff --git a/go.sum b/go.sum
index f8d5da5..13a3284 100644
--- a/go.sum
+++ b/go.sum
@@ -1,24 +1,13 @@
-cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/BurntSushi/toml v0.3.1/go.mod 
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Masterminds/semver/v3 v3.4.0 
h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
 github.com/Masterminds/semver/v3 v3.4.0/go.mod 
h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
-github.com/OneOfOne/xxhash v1.2.2/go.mod 
h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/Shopify/sarama v1.27.2 
h1:1EyY1dsxNDUQEv0O/4TsjosHI2CgB1uo9H/v56xzTxc=
 github.com/Shopify/sarama v1.27.2/go.mod 
h1:g5s5osgELxgM+Md9Qni9rzo7Rbt+vvFQI4bt/Mc93II=
 github.com/Shopify/toxiproxy v2.1.4+incompatible 
h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod 
h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/antihax/optional v1.0.0/go.mod 
h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod 
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod 
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0/go.mod 
h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.3.0 
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod 
h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod 
h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cpuguy83/go-md2man/v2 v2.0.7 
h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
 github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod 
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -36,13 +25,6 @@ github.com/emicklei/go-restful/v3 v3.12.2 
h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf
 github.com/emicklei/go-restful/v3 v3.12.2/go.mod 
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/enriquebris/goconcurrentqueue v0.7.0 
h1:JYrDa45N3xo3Sr9mjvlRaWiBHvBEJIhAdLXO3VGVghA=
 github.com/enriquebris/goconcurrentqueue v0.7.0/go.mod 
h1:OZ+KC2BcRYzjg0vgoUs1GFqdAjkD9mz2Ots7Jbm1yS4=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod 
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane 
v0.9.1-0.20191026205805-5f8ba28d4473/go.mod 
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod 
h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/go-control-plane 
v0.9.9-0.20201210154907-fd9021fe5dad/go.mod 
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane 
v0.9.9-0.20210217033140-668b12f5399d/go.mod 
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane 
v0.9.9-0.20210512163311-63b5d3c536b0/go.mod 
h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod 
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fortytw2/leaktest v1.3.0 
h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod 
h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.10.2/go.mod 
h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
@@ -52,7 +34,6 @@ github.com/fsnotify/fsnotify v1.9.0 
h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
 github.com/fsnotify/fsnotify v1.9.0/go.mod 
h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.9.0 
h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/ghodss/yaml v1.0.0/go.mod 
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod 
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -99,21 +80,6 @@ github.com/go-viper/mapstructure/v2 v2.5.0 
h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPE
 github.com/go-viper/mapstructure/v2 v2.5.0/go.mod 
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
 github.com/golang-jwt/jwt/v5 v5.3.1 
h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
 github.com/golang-jwt/jwt/v5 v5.3.1/go.mod 
h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod 
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod 
h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod 
h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod 
h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod 
h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod 
h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod 
h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod 
h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod 
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod 
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/protobuf v1.5.4 
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod 
h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/golang/snappy v0.0.1/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -121,27 +87,18 @@ github.com/golang/snappy v1.0.0 
h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
 github.com/golang/snappy v1.0.0/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/gnostic-models v0.7.0 
h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
 github.com/google/gnostic-models v0.7.0/go.mod 
h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
-github.com/google/go-cmp v0.2.0/go.mod 
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.2/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc 
h1:VBbFa1lDYWEeV5FZKUiYKYT0VxCp9twUmmaq9eb8sXw=
 github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc/go.mod 
h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI=
-github.com/google/uuid v1.1.2/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 
h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM=
 github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod 
h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk=
 github.com/grandecola/mmap v0.7.0 
h1:p3x6GiNdwuVo21xauBvmJE3qUhUZPsONI1OdkIXtI/8=
 github.com/grandecola/mmap v0.7.0/go.mod 
h1:AxuKbHbB37A8XVWcLn/EuS8l6v0JSfUcIuKvQxqoAPo=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod 
h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/hashicorp/errwrap v1.0.0/go.mod 
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/errwrap v1.1.0 
h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
 github.com/hashicorp/errwrap v1.1.0/go.mod 
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -193,7 +150,6 @@ github.com/prashantv/gostub v1.1.0 
h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4
 github.com/prashantv/gostub v1.1.0/go.mod 
h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
 github.com/prometheus/client_golang v1.23.2 
h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod 
h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod 
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.6.2 
h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
 github.com/prometheus/client_model v0.6.2/go.mod 
h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
 github.com/prometheus/common v0.67.5 
h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4=
@@ -204,7 +160,6 @@ github.com/prometheus/prometheus v0.311.3 
h1:3IrVxQv6v5i/ZCGi6OrYeBhtCwaPTn6Z3DY
 github.com/prometheus/prometheus v0.311.3/go.mod 
h1:gjsCxTKtHO1Q8T9333u1s+lUR1OjPyM7ruuGH8RvVyo=
 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 
h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ=
 github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod 
h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod 
h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.14.1 
h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
 github.com/rogpeppe/go-internal v1.14.1/go.mod 
h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/russross/blackfriday/v2 v2.1.0 
h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -217,7 +172,6 @@ github.com/sirupsen/logrus v1.9.4 
h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w
 github.com/sirupsen/logrus v1.9.4/go.mod 
h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
 github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 
h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
 github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod 
h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
 github.com/spf13/afero v1.15.0/go.mod 
h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
 github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
@@ -230,7 +184,6 @@ github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
 github.com/stretchr/objx v0.5.2/go.mod 
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.5.1/go.mod 
h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.11.1 
h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
 github.com/stretchr/testify v1.11.1/go.mod 
h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
@@ -248,8 +201,6 @@ github.com/xdg/scram 
v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhe
 github.com/xdg/stringprep v1.0.0/go.mod 
h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
 github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 
h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
 github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod 
h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
-github.com/yuin/goldmark v1.3.5/go.mod 
h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.13/go.mod 
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yusufpapurcu/wmi v1.2.2 
h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
 github.com/yusufpapurcu/wmi v1.2.2/go.mod 
h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
 go.opentelemetry.io/auto/sdk v1.2.1 
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
@@ -264,7 +215,6 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0 
h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC
 go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod 
h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
 go.opentelemetry.io/otel/trace v1.43.0 
h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
 go.opentelemetry.io/otel/trace v1.43.0/go.mod 
h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
-go.opentelemetry.io/proto/otlp v0.7.0/go.mod 
h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
 go.uber.org/atomic v1.11.0/go.mod 
h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
 go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
@@ -276,138 +226,46 @@ go.yaml.in/yaml/v2 v2.4.4/go.mod 
h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod 
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.18.0/go.mod 
h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
 golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
 golang.org/x/crypto v0.50.0/go.mod 
h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod 
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod 
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod 
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod 
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod 
h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod 
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod 
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
 golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod 
h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod 
h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod 
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod 
h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
 golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
 golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
 golang.org/x/oauth2 v0.36.0/go.mod 
h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
 golang.org/x/sync v0.20.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
 golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.16.0/go.mod 
h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
 golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
 golang.org/x/term v0.42.0/go.mod 
h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.14.0/go.mod 
h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
 golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
 golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
 golang.org/x/time v0.15.0/go.mod 
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod 
h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod 
h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod 
h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.1.3/go.mod 
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.12/go.mod 
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0/go.mod 
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
 golang.org/x/tools v0.44.0/go.mod 
h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
 gonum.org/v1/gonum v0.17.0/go.mod 
h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
-google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod 
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod 
h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod 
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod 
h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c 
h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260311181403-84a4fc48630c/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod 
h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.1/go.mod 
h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
-google.golang.org/grpc v1.36.0/go.mod 
h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.38.0/go.mod 
h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.40.0/go.mod 
h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
 google.golang.org/grpc v1.81.1/go.mod 
h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod 
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod 
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod 
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod 
h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod 
h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod 
h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod 
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod 
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.32.0/go.mod 
h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 google.golang.org/protobuf v1.36.11 
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
 google.golang.org/protobuf v1.36.11/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -428,14 +286,10 @@ gopkg.in/jcmturner/gokrb5.v7 v7.5.0 
h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlI
 gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod 
h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM=
 gopkg.in/jcmturner/rpc.v1 v1.1.0 
h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=
 gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod 
h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 k8s.io/api v0.35.3 h1:pA2fiBc6+N9PDf7SAiluKGEBuScsTzd2uYBkA5RzNWQ=
 k8s.io/api v0.35.3/go.mod h1:9Y9tkBcFwKNq2sxwZTQh1Njh9qHl81D0As56tu42GA4=
 k8s.io/apimachinery v0.35.3 h1:MeaUwQCV3tjKP4bcwWGgZ/cp/vpsRnQzqO6J6tJyoF8=
@@ -456,5 +310,5 @@ sigs.k8s.io/structured-merge-diff/v6 v6.3.0 
h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/
 sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod 
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
 sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
 sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
-skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128 
h1:wrHG0+CwYwqcgPWwJf/JI1x1sk+jD1Wdy93M1YuecO0=
-skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128/go.mod 
h1:+n8BMuS8eRdzdnGh15ElRGBXPi0eYZSs2TKySBDmRTE=
+skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce 
h1:KZOFEve4GtOekeIAF/v3j+J9mEG7tBboMbB3AXoNWI0=
+skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce/go.mod 
h1:tsTLCXFg0zZ1lqr5+7tDMsZvZA+YFUCQe0lRctv23yc=
diff --git a/plugins/forwarder/forwarder_repository.go 
b/plugins/forwarder/forwarder_repository.go
index e9c3b8c..644b8aa 100644
--- a/plugins/forwarder/forwarder_repository.go
+++ b/plugins/forwarder/forwarder_repository.go
@@ -34,6 +34,7 @@ import (
        grpc_nativelog 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativelog"
        grpc_nativemanagement 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativemanagement"
        grpc_meter 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativemeter"
+       grpc_nativepprof 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativepprof"
        grpc_nativeprocess 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativeprocess"
        grpc_nativeprofile 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativeprofile"
        grpc_nativetracing 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativetracing"
@@ -68,6 +69,7 @@ func RegisterForwarderPlugins() {
                new(otlpmetricsv1.Forwarder),
                new(grpc_nativeebpfaccesslog.Forwarder),
                new(grpc_asyncprofiler.Forwarder),
+               new(grpc_nativepprof.Forwarder),
        }
        for _, forwarder := range forwarders {
                plugin.RegisterPlugin(forwarder)
diff --git a/plugins/forwarder/grpc/nativepprof/forwarder.go 
b/plugins/forwarder/grpc/nativepprof/forwarder.go
new file mode 100644
index 0000000..4fc5da8
--- /dev/null
+++ b/plugins/forwarder/grpc/nativepprof/forwarder.go
@@ -0,0 +1,112 @@
+// 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 nativepprof
+
+import (
+       "context"
+       "fmt"
+       "reflect"
+
+       client_grpc "github.com/apache/skywalking-satellite/plugins/client/grpc"
+       server_grpc "github.com/apache/skywalking-satellite/plugins/server/grpc"
+
+       "google.golang.org/grpc"
+       pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+       v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+       "github.com/apache/skywalking-satellite/internal/pkg/config"
+       "github.com/apache/skywalking-satellite/internal/pkg/log"
+       "github.com/apache/skywalking-satellite/internal/satellite/event"
+)
+
+const (
+       Name     = "native-pprof-grpc-forwarder"
+       ShowName = "Native Pprof GRPC Forwarder"
+)
+
+type Forwarder struct {
+       config.CommonFields
+
+       pprofClient pprof.PprofTaskClient
+}
+
+func (f *Forwarder) Name() string     { return Name }
+func (f *Forwarder) ShowName() string { return ShowName }
+func (f *Forwarder) Description() string {
+       return "This is a grpc forwarder with the SkyWalking native pprof 
protocol."
+}
+func (f *Forwarder) DefaultConfig() string { return `` }
+
+func (f *Forwarder) Prepare(connection interface{}) error {
+       client, ok := connection.(*grpc.ClientConn)
+       if !ok {
+               return fmt.Errorf("the %s only accepts a grpc client, but 
received a %s",
+                       f.Name(), reflect.TypeOf(connection).String())
+       }
+       f.pprofClient = pprof.NewPprofTaskClient(client)
+       return nil
+}
+
+func (f *Forwarder) Forward(_ event.BatchEvents) error {
+       return fmt.Errorf("unsupport forward")
+}
+
+func (f *Forwarder) SyncForward(e *v1.SniffData) (*v1.SniffData, 
grpc.ClientStream, error) {
+       switch requestData := e.GetData().(type) {
+       case *v1.SniffData_PprofTaskCommandQuery:
+               cmds, err := 
f.pprofClient.GetPprofTaskCommands(context.Background(), 
requestData.PprofTaskCommandQuery)
+               if err != nil {
+                       return nil, nil, err
+               }
+               return &v1.SniffData{Data: &v1.SniffData_Commands{Commands: 
cmds}}, nil, nil
+
+       case *v1.SniffData_PprofData:
+               ctx := context.WithValue(context.Background(), 
client_grpc.CtxBidirectionalStreamKey, true)
+               stream, err := f.pprofClient.Collect(ctx)
+               if err != nil {
+                       log.Logger.Errorf("%s open collect stream error: %v", 
f.Name(), err)
+                       return nil, nil, err
+               }
+               metaData := server_grpc.NewOriginalData(requestData.PprofData)
+               if err = stream.SendMsg(metaData); err != nil {
+                       log.Logger.Errorf("%s send meta data error: %v", 
f.Name(), err)
+                       f.closeStream(stream)
+                       return nil, nil, err
+               }
+               resp, err := stream.Recv()
+               if err != nil {
+                       log.Logger.Errorf("%s receive meta data response error: 
%v", f.Name(), err)
+                       f.closeStream(stream)
+                       return nil, nil, err
+               }
+               return &v1.SniffData{
+                       Data: 
&v1.SniffData_PprofCollectionResponse{PprofCollectionResponse: resp},
+               }, stream, nil
+       }
+
+       return nil, nil, fmt.Errorf("unsupport data")
+}
+
+func (f *Forwarder) ForwardType() v1.SniffType { return v1.SniffType_PprofType 
}
+func (f *Forwarder) SupportedSyncInvoke() bool { return true }
+
+func (f *Forwarder) closeStream(stream pprof.PprofTask_CollectClient) {
+       if err := stream.CloseSend(); err != nil {
+               log.Logger.Errorf("%s close stream error: %v", f.Name(), err)
+       }
+}
diff --git a/plugins/receiver/grpc/nativepprof/pprof_service.go 
b/plugins/receiver/grpc/nativepprof/pprof_service.go
new file mode 100644
index 0000000..6da5ad0
--- /dev/null
+++ b/plugins/receiver/grpc/nativepprof/pprof_service.go
@@ -0,0 +1,100 @@
+// 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 nativepprof
+
+import (
+       "context"
+       "fmt"
+       "io"
+
+       "github.com/apache/skywalking-satellite/internal/pkg/log"
+
+       common "skywalking.apache.org/repo/goapi/collect/common/v3"
+       pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+       v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+       module 
"github.com/apache/skywalking-satellite/internal/satellite/module/api"
+       "github.com/apache/skywalking-satellite/plugins/server/grpc"
+)
+
+type PprofService struct {
+       receiveChannel chan *v1.SniffData
+
+       module.SyncInvoker
+       pprof.UnimplementedPprofTaskServer
+}
+
+func (p *PprofService) GetPprofTaskCommands(_ context.Context,
+       query *pprof.PprofTaskCommandQuery,
+) (*common.Commands, error) {
+       event := &v1.SniffData{
+               Data: &v1.SniffData_PprofTaskCommandQuery{
+                       PprofTaskCommandQuery: query,
+               },
+       }
+       data, _, err := p.SyncInvoke(event)
+       if err != nil {
+               return nil, err
+       }
+       return data.GetCommands(), nil
+}
+
+func (p *PprofService) Collect(clientStream pprof.PprofTask_CollectServer) 
error {
+       metaData := grpc.NewOriginalData(nil)
+       err := clientStream.RecvMsg(metaData)
+       if err == io.EOF {
+               return nil
+       }
+       if err != nil {
+               return err
+       }
+       event := &v1.SniffData{
+               Data: &v1.SniffData_PprofData{
+                       PprofData: metaData.Content,
+               },
+       }
+       serverStreamAndResp, serverStream, err := p.SyncInvoke(event)
+       if err != nil {
+               return fmt.Errorf("satellite send pprof metadata to server but 
get err: %s", err)
+       }
+       resp := 
serverStreamAndResp.GetData().(*v1.SniffData_PprofCollectionResponse)
+       err = clientStream.Send(resp.PprofCollectionResponse)
+       if err == io.EOF {
+               return nil
+       }
+       if err != nil {
+               return err
+       }
+
+       for {
+               chunk := grpc.NewOriginalData(nil)
+               err := clientStream.RecvMsg(chunk)
+               if err == io.EOF {
+                       if cerr := serverStream.CloseSend(); cerr != nil {
+                               log.Logger.Errorf("pprof service close server 
stream error: %s", cerr)
+                       }
+                       return nil
+               }
+               if err != nil {
+                       return err
+               }
+               if err = serverStream.SendMsg(chunk); err != nil {
+                       return fmt.Errorf("satellite send pprof chunk to server 
but get err: %s", err)
+               }
+       }
+}
diff --git a/plugins/receiver/grpc/nativepprof/receiver.go 
b/plugins/receiver/grpc/nativepprof/receiver.go
new file mode 100644
index 0000000..d74f92d
--- /dev/null
+++ b/plugins/receiver/grpc/nativepprof/receiver.go
@@ -0,0 +1,67 @@
+// 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 nativepprof
+
+import (
+       pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+       v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+       "github.com/apache/skywalking-satellite/internal/pkg/config"
+       module 
"github.com/apache/skywalking-satellite/internal/satellite/module/api"
+       forwarder "github.com/apache/skywalking-satellite/plugins/forwarder/api"
+       forwarder_nativepprof 
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativepprof"
+       "github.com/apache/skywalking-satellite/plugins/receiver/grpc"
+)
+
+const (
+       Name     = "grpc-native-pprof-receiver"
+       ShowName = "GRPC Native Pprof Receiver"
+)
+
+type Receiver struct {
+       config.CommonFields
+       grpc.CommonGRPCReceiverFields
+       service *PprofService
+}
+
+func (r *Receiver) Name() string     { return Name }
+func (r *Receiver) ShowName() string { return ShowName }
+func (r *Receiver) Description() string {
+       return "This is a receiver for SkyWalking native pprof format, " +
+               "which is defined at 
https://github.com/apache/skywalking-data-collect-protocol/blob/master/pprof/Pprof.proto.";
+}
+
+func (r *Receiver) DefaultConfig() string { return "" }
+
+func (r *Receiver) RegisterHandler(server interface{}) {
+       r.CommonGRPCReceiverFields = *grpc.InitCommonGRPCReceiverFields(server)
+       r.service = &PprofService{receiveChannel: r.OutputChannel}
+       pprof.RegisterPprofTaskServer(r.Server, r.service)
+}
+
+func (r *Receiver) RegisterSyncInvoker(invoker module.SyncInvoker) {
+       r.service.SyncInvoker = invoker
+}
+
+func (r *Receiver) Channel() <-chan *v1.SniffData { return r.OutputChannel }
+
+func (r *Receiver) SupportForwarders() []forwarder.Forwarder {
+       return []forwarder.Forwarder{
+               new(forwarder_nativepprof.Forwarder),
+       }
+}
diff --git a/plugins/receiver/receiver_repository.go 
b/plugins/receiver/receiver_repository.go
index 0b12ae4..9351859 100644
--- a/plugins/receiver/receiver_repository.go
+++ b/plugins/receiver/receiver_repository.go
@@ -36,6 +36,7 @@ import (
        grpcnavtivelog 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativelog"
        grpcnativemanagement 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativemanagement"
        grpcnativemeter 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativemeter"
+       grpcnativepprof 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativepprof"
        grpcnativeprocess 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativeprocess"
        grpcnativeprofile 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativeprofile"
        grpcnativetracing 
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativetracing"
@@ -67,6 +68,7 @@ func RegisterReceiverPlugins() {
                new(otlpmetricsv1.Receiver),
                new(grpcnativeebpfaccesslog.Receiver),
                new(grpcasyncprofiler.Receiver),
+               new(grpcnativepprof.Receiver),
        }
        for _, receiver := range receivers {
                plugin.RegisterPlugin(receiver)
diff --git a/test/e2e/base/base-compose.yml b/test/e2e/base/base-compose.yml
index ef9a13c..888bd09 100644
--- a/test/e2e/base/base-compose.yml
+++ b/test/e2e/base/base-compose.yml
@@ -26,12 +26,13 @@ services:
       - e2e
     restart: on-failure
     environment:
-      SW_STORAGE: h2
+      SW_STORAGE: banyandb
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
       SW_CLUSTER_ZK_HOST_PORT: zk:2181
       SW_STORAGE_ES_CLUSTER_NODES: es:9200
       SW_JDBC_URL: jdbc:mysql://mysql:3306/swtest
       SW_STORAGE_INFLUXDB_URL: http://influxdb:8086
-      SW_METER_ANALYZER_ACTIVE_FILES: spring-sleuth
+      SW_METER_ANALYZER_ACTIVE_FILES: go-agent
       SW_CLUSTER_ETCD_ENDPOINTS: http://etcd:2379
       SW_SCLUSTER_ETCD_ERVICE_NAME: s1
       SW_CONFIG_ETCD_PERIOD: 1
@@ -42,6 +43,20 @@ services:
       timeout: 60s
       retries: 120
 
+  banyandb:
+    image: "ghcr.io/apache/skywalking-banyandb:${SW_BANYANDB_COMMIT}"
+    networks:
+      - e2e
+    expose:
+      - 17912
+      - 17913
+    command: standalone --measure-metadata-cache-wait-duration 1m 
--stream-metadata-cache-wait-duration 1m
+    healthcheck:
+      test: ["CMD", "sh", "-c", "nc -nz 127.0.0.1 17912"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
   provider:
     build:
       context: provider
diff --git a/test/e2e/base/env b/test/e2e/base/env
index c76246b..cff3de3 100644
--- a/test/e2e/base/env
+++ b/test/e2e/base/env
@@ -14,10 +14,12 @@
 # limitations under the License.
 
 SW_AGENT_JAVA_COMMIT=f0245864e4388a388fe7445b56b6ce7cedc94aaf
-SW_OAP_COMMIT=df7450b4b4744257012c2f1608b634f44fbe7d66
+SW_OAP_COMMIT=5b481a41a99861249410118e4cfbf591c4508dae
 SW_UI_COMMIT=1acba5d2467f6d905a6261e999f85464d5432562
 SW_KUBERNETES_COMMIT_SHA=2850db1502283a2d8516146c57cc2b49f1da934b
 SW_AGENT_JDK_VERSION=8
 SW_ROVER_COMMIT=a58b40e01c670003c211fc9d498a58c70098c364
+SW_AGENT_GO_COMMIT=afa75a3cc8c31f142102443af6164b825d63d8fc
+SW_BANYANDB_COMMIT=69c8f4d20ebb6532ea4c16a7ed7114dd6ec9770b
 
-SW_CTL_COMMIT=bce7faaabbd57ed1f40156af8a8eb6c3eccea4ae
+SW_CTL_COMMIT=8c709ce6999ce3d8503f54475afe9083d0ecb070
diff --git a/test/e2e/base/go-provider/Dockerfile 
b/test/e2e/base/go-provider/Dockerfile
new file mode 100644
index 0000000..77e23fd
--- /dev/null
+++ b/test/e2e/base/go-provider/Dockerfile
@@ -0,0 +1,34 @@
+# Licensed to Apache Software Foundation (ASF) under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Apache Software Foundation (ASF) licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+ARG SW_AGENT_GO_COMMIT=
+FROM ghcr.io/apache/skywalking-go/skywalking-go:${SW_AGENT_GO_COMMIT}-go1.19 
AS base
+
+ENV CGO_ENABLED=0
+ENV GO111MODULE=on
+
+WORKDIR /go-service
+COPY . /go-service
+
+RUN go mod tidy && go build -toolexec="skywalking-go-agent" -a -o service
+
+FROM alpine:3.19
+
+COPY --from=base /go-service/service /service
+
+EXPOSE 8080
+ENTRYPOINT ["/service"]
diff --git a/test/e2e/base/go-provider/go.mod b/test/e2e/base/go-provider/go.mod
new file mode 100644
index 0000000..2d0c025
--- /dev/null
+++ b/test/e2e/base/go-provider/go.mod
@@ -0,0 +1,25 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+module sw-e2e
+
+go 1.19
+
+require (
+       github.com/apache/skywalking-go v0.6.1-0.20251023090254-afa75a3cc8c3
+       github.com/gin-gonic/gin v1.10.0
+)
diff --git a/test/e2e/base/go-provider/go.sum b/test/e2e/base/go-provider/go.sum
new file mode 100644
index 0000000..e497d21
--- /dev/null
+++ b/test/e2e/base/go-provider/go.sum
@@ -0,0 +1,2 @@
+github.com/apache/skywalking-go v0.6.1-0.20251023090254-afa75a3cc8c3/go.mod 
h1:EIbOxJezWSf22p4P0p0RAgpEOvaN0sNQAtfYPX2wAyc=
+github.com/gin-gonic/gin v1.10.0/go.mod 
h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
diff --git a/test/e2e/base/go-provider/main.go 
b/test/e2e/base/go-provider/main.go
new file mode 100644
index 0000000..4c50b9d
--- /dev/null
+++ b/test/e2e/base/go-provider/main.go
@@ -0,0 +1,68 @@
+// 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"
+       "time"
+
+       "github.com/gin-gonic/gin"
+
+       _ "github.com/apache/skywalking-go"
+)
+
+func main() {
+       // Produce light, recurring CPU work so the pprof CPU profile captures
+       // observable stacks without saturating the CI runner (~20% duty cycle).
+       go func() {
+               for {
+                       start := time.Now()
+                       for time.Since(start) < 100*time.Millisecond {
+                               for i := 0; i < 1e5; i++ {
+                                       _ = i * i
+                               }
+                       }
+                       time.Sleep(400 * time.Millisecond)
+               }
+       }()
+
+       engine := gin.New()
+
+       engine.Handle("GET", "/health", func(c *gin.Context) {
+               c.String(200, "ok")
+       })
+
+       engine.Handle("GET", "/profile", func(c *gin.Context) {
+               log.Printf("=== /profile called ===")
+               doWork()
+               c.String(200, "Profiling completed")
+       })
+
+       _ = engine.Run(":8080")
+}
+
+func doWork() {
+       start := time.Now()
+       for time.Since(start) < 10*time.Second {
+               _ = 1
+               for i := 0; i < 1e6; i++ {
+                       _ = i * i
+               }
+       }
+       log.Printf("doWork() completed after %v", time.Since(start))
+}
diff --git a/test/e2e/case/istio/als/expected/metrics-has-value.yml 
b/test/e2e/case/istio/als/expected/metrics-has-value.yml
index 445dceb..cae6688 100644
--- a/test/e2e/case/istio/als/expected/metrics-has-value.yml
+++ b/test/e2e/case/istio/als/expected/metrics-has-value.yml
@@ -22,10 +22,12 @@ results:
     values:
       {{- contains .values }}
       - id: {{ notEmpty .id }}
-        value: {{ .value }}
+        value: {{ notEmpty .value }}
+        owner: null
         traceid: null
       - id: {{ notEmpty .id }}
         value: null
+        owner: null
         traceid: null
       {{- end}}
   {{- end}}
diff --git a/test/e2e/case/istio/kind.yaml b/test/e2e/case/istio/kind.yaml
index 08ff4c7..2f21ed2 100644
--- a/test/e2e/case/istio/kind.yaml
+++ b/test/e2e/case/istio/kind.yaml
@@ -19,10 +19,10 @@ kind: Cluster
 apiVersion: kind.x-k8s.io/v1alpha4
 nodes:
   - role: control-plane
-    image: 
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+    image: 
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
   - role: worker
-    image: 
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+    image: 
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
   - role: worker
-    image: 
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+    image: 
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
   - role: worker
-    image: 
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+    image: 
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
diff --git a/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml 
b/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
index bb8b7f2..19e88f7 100644
--- a/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
+++ b/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
@@ -24,10 +24,12 @@ results:
     values:
       {{- contains .values }}
       - id: {{ notEmpty .id }}
-        value: {{ .value }}
+        value: {{ notEmpty .value }}
+        owner: null
         traceid: null
       - id: {{ notEmpty .id }}
         value: null
+        owner: null
         traceid: null
       {{- end}}
   {{- end}}
diff --git a/test/e2e/case/istio/metrics/expected/metrics-has-value.yml 
b/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
index 445dceb..cae6688 100644
--- a/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
+++ b/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
@@ -22,10 +22,12 @@ results:
     values:
       {{- contains .values }}
       - id: {{ notEmpty .id }}
-        value: {{ .value }}
+        value: {{ notEmpty .value }}
+        owner: null
         traceid: null
       - id: {{ notEmpty .id }}
         value: null
+        owner: null
         traceid: null
       {{- end}}
   {{- end}}
diff --git a/test/e2e/case/istio/traffic-gen.yaml 
b/test/e2e/case/istio/traffic-gen.yaml
index 549bcfd..e97fdda 100644
--- a/test/e2e/case/istio/traffic-gen.yaml
+++ b/test/e2e/case/istio/traffic-gen.yaml
@@ -33,8 +33,14 @@ spec:
     spec:
       containers:
         - name: trafficgenerator
-          image: williamyeh/wrk
-          command: ["wrk", "-t1", "-c1", "-d20m", 
"http://istio-ingressgateway.istio-system:80/productpage";]
+          image: alpine/curl:8.9.1
+          command: ["/bin/sh", "-c", "--"]
+          args:
+            - |
+              while true; do
+                curl -s -o /dev/null -w "%{http_code}\n" 
http://istio-ingressgateway.istio-system:80/productpage
+                sleep 1
+              done
           resources:
             requests:
               cpu: 0.1
\ No newline at end of file
diff --git a/test/e2e/case/istio/values.yaml b/test/e2e/case/istio/values.yaml
index 8b42ad4..27426bb 100644
--- a/test/e2e/case/istio/values.yaml
+++ b/test/e2e/case/istio/values.yaml
@@ -16,7 +16,7 @@
 oap:
   config:
     metadata-service-mapping.yaml: |
-      serviceName: e2e::${LABELS."service.istio.io/canonical-name"}
+      serviceName: e2e::${LABELS."service.istio.io/canonical-name",SERVICE}
       serviceInstanceName: ${NAME}
 
 elasticsearch:
diff --git a/test/e2e/case/native-asyncprofiler/docker-compose.yml 
b/test/e2e/case/native-asyncprofiler/docker-compose.yml
index 7028650..a7a9431 100644
--- a/test/e2e/case/native-asyncprofiler/docker-compose.yml
+++ b/test/e2e/case/native-asyncprofiler/docker-compose.yml
@@ -38,6 +38,11 @@ services:
       timeout: 60s
       retries: 120
 
+  banyandb:
+    extends:
+      file: ../../base/base-compose.yml
+      service: banyandb
+
   oap:
     extends:
       file: ../../base/base-compose.yml
@@ -51,6 +56,8 @@ services:
     depends_on:
       etcd:
         condition: service_healthy
+      banyandb:
+        condition: service_healthy
 
   satellite:
     extends:
diff --git a/test/e2e/case/native-ebpf/docker-compose.yml 
b/test/e2e/case/native-ebpf/docker-compose.yml
index 598b586..f09f4df 100644
--- a/test/e2e/case/native-ebpf/docker-compose.yml
+++ b/test/e2e/case/native-ebpf/docker-compose.yml
@@ -16,12 +16,20 @@
 version: '2.1'
 
 services:
+  banyandb:
+    extends:
+      file: ../../base/base-compose.yml
+      service: banyandb
+
   oap:
     extends:
       file: ../../base/base-compose.yml
       service: oap
     ports:
       - 12800:12800
+    depends_on:
+      banyandb:
+        condition: service_healthy
 
   satellite:
     extends:
diff --git a/test/e2e/case/native-asyncprofiler/docker-compose.yml 
b/test/e2e/case/native-pprof/docker-compose.yml
similarity index 69%
copy from test/e2e/case/native-asyncprofiler/docker-compose.yml
copy to test/e2e/case/native-pprof/docker-compose.yml
index 7028650..5f3c766 100644
--- a/test/e2e/case/native-asyncprofiler/docker-compose.yml
+++ b/test/e2e/case/native-pprof/docker-compose.yml
@@ -16,40 +16,19 @@
 version: '2.1'
 
 services:
-
-  etcd:
-    hostname: etcd
-    image: quay.io/coreos/etcd:v3.5.0
-    ports:
-      - 2379
-    networks:
-      - e2e
-    environment:
-      ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
-      ETCD_ADVERTISE_CLIENT_URLS: http://0.0.0.0:2379
-      ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
-      ETCD_INITIAL_ADVERTISE_PEER_URLS: http://0.0.0.0:2380
-      ETCD_INITIAL_CLUSTER: s1=http://0.0.0.0:2380
-      ETCD_NAME: s1
-      ETCD_DATA_DIR: /etcd-data
-    healthcheck:
-      test: ["CMD", "sh", "-c", "etcdctl endpoint health" ]
-      interval: 5s
-      timeout: 60s
-      retries: 120
+  banyandb:
+    extends:
+      file: ../../base/base-compose.yml
+      service: banyandb
 
   oap:
     extends:
       file: ../../base/base-compose.yml
       service: oap
-    environment:
-      SW_LOG_LAL_FILES: test
-      SW_CLUSTER: etcd
-      SW_CONFIGURATION: etcd
     ports:
       - 12800
     depends_on:
-      etcd:
+      banyandb:
         condition: service_healthy
 
   satellite:
@@ -59,22 +38,36 @@ services:
     environment:
       SATELLITE_GRPC_CLIENT_FINDER: static
       SATELLITE_GRPC_CLIENT: oap:11800
-      SATELLITE_LOGPIPE_SENDER_MIN_FLUSH_EVENTS: 1
       SATELLITE_GRPC_ACCEPT_LIMIT_CPU_UTILIZATION: 100
+      SATELLITE_PPROFPIPE_SENDER_MIN_FLUSH_EVENTS: 1
     ports:
       - 11800
     depends_on:
       oap:
         condition: service_healthy
 
-  provider:
-    extends:
-      file: ../../base/base-compose.yml
-      service: provider
-    privileged: true
+  go-service:
+    build:
+      context: ../../base/go-provider
+      dockerfile: Dockerfile
+      args:
+        - SW_AGENT_GO_COMMIT=${SW_AGENT_GO_COMMIT}
+    expose:
+      - 8080
+    networks:
+      - e2e
+    environment:
+      SW_AGENT_NAME: go-service
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE: satellite:11800
+    healthcheck:
+      test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:8080/health";]
+      interval: 5s
+      timeout: 60s
+      retries: 120
     depends_on:
       satellite:
         condition: service_healthy
 
 networks:
-  e2e:
\ No newline at end of file
+  e2e:
diff --git a/test/e2e/case/native-pprof/e2e.yaml 
b/test/e2e/case/native-pprof/e2e.yaml
new file mode 100644
index 0000000..b575d3a
--- /dev/null
+++ b/test/e2e/case/native-pprof/e2e.yaml
@@ -0,0 +1,64 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+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:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    # service list
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql service ls
+      expected: expected/service.yml
+    # service instance list
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql instance list 
--service-name=go-service
+      expected: expected/service-instance.yml
+    # create task
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql \
+          profiling pprof create --service-name=go-service \
+          --duration=1 --events=CPU \
+          --instance-name-list=provider1
+      expected: expected/create.yml
+    # list task
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql \
+          profiling pprof list --service-name=go-service
+      expected: expected/list.yml
+    # task progress (CPU sampling lasts duration minutes + agent upload 
latency)
+    - query: |
+        sleep 75 && swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql \
+          profiling pprof progress \
+          --task-id=$(swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling pprof list 
--service-name=go-service | yq e '.tasks[0].id')
+      expected: expected/progress.yml
+    # task analysis
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql \
+          profiling pprof analysis --service-name=go-service \
+          --instance-name-list=provider1 \
+          --task-id=$(swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling pprof list 
--service-name=go-service | yq e '.tasks[0].id')
+      expected: expected/analysis.yml
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml 
b/test/e2e/case/native-pprof/expected/analysis.yml
similarity index 76%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/analysis.yml
index 5aa1e36..31d6b80 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/analysis.yml
@@ -13,14 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- contains . }}
-- key: {{ notEmpty .key }}
-  value:
-    {{ if .value.isemptyvalue }}
-    isemptyvalue: true
-    value: 0
-    {{ else }}
-    isemptyvalue: false
-    value: {{ ge .value.value 0 }}
-    {{ end }}
-{{- end }}
+tree:
+  elements:
+  {{- contains .tree.elements }}
+  - id: {{ notEmpty .id }}
+    parentid: {{ notEmpty .parentid }}
+    codesignature: {{ notEmpty .codesignature }}
+    total: {{ gt .total -1 }}
+    self: {{ gt .self -1 }}
+  {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml 
b/test/e2e/case/native-pprof/expected/create.yml
similarity index 77%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/create.yml
index 5aa1e36..85bd887 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/create.yml
@@ -13,14 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- contains . }}
-- key: {{ notEmpty .key }}
-  value:
-    {{ if .value.isemptyvalue }}
-    isemptyvalue: true
-    value: 0
-    {{ else }}
-    isemptyvalue: false
-    value: {{ ge .value.value 0 }}
-    {{ end }}
-{{- end }}
+errorreason: null
+code: SUCCESS
+id: {{ notEmpty .id }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/traces-list.yml 
b/test/e2e/case/native-pprof/expected/list.yml
similarity index 73%
copy from test/e2e/case/native-protocols/expected/traces-list.yml
copy to test/e2e/case/native-pprof/expected/list.yml
index e529898..b95911c 100644
--- a/test/e2e/case/native-protocols/expected/traces-list.yml
+++ b/test/e2e/case/native-pprof/expected/list.yml
@@ -13,15 +13,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-debuggingtrace: null
-traces:
-  {{- contains .traces }}
-- segmentid: {{ notEmpty .segmentid }}
-  endpointnames:
-    - POST:/info
+errorreason: null
+tasks:
+  {{- contains .tasks }}
+- id: {{ notEmpty .id }}
+  serviceid: {{ b64enc "go-service" }}.1
+  serviceinstanceids:
+    - {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
+  createtime: {{ gt .createtime 0 }}
+  dumpperiod: {{ ge .dumpperiod 0 }}
+  events: CPU
   duration: {{ ge .duration 0 }}
-  start: "{{ notEmpty .start}}"
-  iserror: false
-  traceids:
-    - {{ (index .traceids 0) }}
   {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml 
b/test/e2e/case/native-pprof/expected/progress.yml
similarity index 69%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/progress.yml
index 5aa1e36..56de9d6 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/progress.yml
@@ -13,14 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- contains . }}
-- key: {{ notEmpty .key }}
-  value:
-    {{ if .value.isemptyvalue }}
-    isemptyvalue: true
-    value: 0
-    {{ else }}
-    isemptyvalue: false
-    value: {{ ge .value.value 0 }}
-    {{ end }}
-{{- end }}
+logs:
+  {{- contains .logs }}
+- id: {{ notEmpty .id}}
+  instanceid: {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
+  instancename: provider1
+  operationtype: EXECUTION_FINISHED
+  operationtime: {{ ge .operationtime 0 }}
+  {{- end }}
+errorinstanceids: []
+successinstanceids:
+  - {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
diff --git a/test/e2e/case/native-pprof/expected/service-instance.yml 
b/test/e2e/case/native-pprof/expected/service-instance.yml
new file mode 100644
index 0000000..630d58c
--- /dev/null
+++ b/test/e2e/case/native-pprof/expected/service-instance.yml
@@ -0,0 +1,28 @@
+# 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.
+
+{{- contains . }}
+- id: {{ notEmpty .id }}
+  name: {{ notEmpty .name }}
+  attributes:
+  {{- contains .attributes }}
+  - name: ipv4s
+    value: {{ notEmpty .value }}
+  {{- end}}
+  language: GO
+  instanceuuid: {{ notEmpty .instanceuuid }}
+{{- end}}
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml 
b/test/e2e/case/native-pprof/expected/service.yml
similarity index 80%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/service.yml
index 5aa1e36..5744ee6 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/service.yml
@@ -14,13 +14,12 @@
 # limitations under the License.
 
 {{- contains . }}
-- key: {{ notEmpty .key }}
-  value:
-    {{ if .value.isemptyvalue }}
-    isemptyvalue: true
-    value: 0
-    {{ else }}
-    isemptyvalue: false
-    value: {{ ge .value.value 0 }}
-    {{ end }}
+- id: {{ b64enc "go-service" }}.1
+  name: go-service
+  group: ""
+  shortname: go-service
+  normal: true
+  layers:
+    - GENERAL
+    - SO11Y_GO_AGENT
 {{- end }}
diff --git a/test/e2e/case/native-protocols/docker-compose.yml 
b/test/e2e/case/native-protocols/docker-compose.yml
index 2741707..6419043 100644
--- a/test/e2e/case/native-protocols/docker-compose.yml
+++ b/test/e2e/case/native-protocols/docker-compose.yml
@@ -38,6 +38,11 @@ services:
       timeout: 60s
       retries: 120
 
+  banyandb:
+    extends:
+      file: ../../base/base-compose.yml
+      service: banyandb
+
   oap:
     extends:
       file: ../../base/base-compose.yml
@@ -45,6 +50,7 @@ services:
     environment:
       SW_LOG_LAL_FILES: test
       SW_CLUSTER: etcd
+      SW_METER_ANALYZER_ACTIVE_FILES: spring-micrometer
       SW_CONFIGURATION: etcd
     volumes:
       - ./lal.yaml:/skywalking/config/lal/test.yaml
@@ -53,6 +59,8 @@ services:
     depends_on:
       etcd:
         condition: service_healthy
+      banyandb:
+        condition: service_healthy
 
   satellite:
     extends:
diff --git a/test/e2e/case/native-protocols/e2e.yaml 
b/test/e2e/case/native-protocols/e2e.yaml
index c2504d9..9b61f19 100644
--- a/test/e2e/case/native-protocols/e2e.yaml
+++ b/test/e2e/case/native-protocols/e2e.yaml
@@ -21,6 +21,8 @@ setup:
   timeout: 1200
   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
@@ -31,93 +33,102 @@ setup:
 trigger:
   action: http
   interval: 3s
-  times: 5
+  times: -1
   url: http://${consumer_host}:${consumer_9090}/info
   method: POST
 
 verify:
-  # verify with retry strategy
   retry:
-    # max retry count
     count: 20
-    # the interval between two retries, in millisecond.
     interval: 10s
   cases:
     # basic check: service list
     - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql service ls
       expected: expected/service.yml
     # basic check: service metrics
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name 
service_sla --service-name e2e-service-provider |yq e 'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=service_sla --service-name=e2e-service-provider
       expected: expected/metrics-has-value.yml
     # basic check: service endpoint
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list --keyword=info 
--service-name e2e-service-provider
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list --keyword=info 
--service-name=e2e-service-provider
       expected: expected/service-endpoint.yml
     # basic check: service endpoint metrics
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name 
endpoint_cpm --endpoint-name POST:/info --service-name e2e-service-provider |yq 
e 'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=endpoint_cpm --endpoint-name=POST:/info 
--service-name=e2e-service-provider
       expected: expected/metrics-has-value.yml
+    # basic check: dependency service
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service 
--service-name="e2e-service-provider"
+      expected: expected/dependency-services.yml
 
     # native management: service instance list
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql instance list --service-name 
e2e-service-provider
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql instance list 
--service-name=e2e-service-provider
       expected: expected/service-instance.yml
 
     # native jvm: service instance jvm metrics
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name 
instance_jvm_thread_live_count --service-name e2e-service-provider 
--instance-name provider1 |yq e 'to_entries' -
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=instance_jvm_thread_live_count --instance-name=provider1 
--service-name=e2e-service-provider
       expected: expected/metrics-has-value.yml
 
     # native tracing: trace segment list
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls
       expected: expected/traces-list.yml
     # native tracing: trace detail
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace $(swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls|grep -A 5 
'/info'|tail -n1|awk -F ' ' '{print $2}')
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls
       expected: expected/trace-info-detail.yml
 
     # native meter: instance meter
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name 
meter_jvm_memory_used --instance-name provider1 --service-name 
e2e-service-provider |yq e 'to_entries' -
-      expected: expected/metrics-has-value.yml
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec 
--expression=meter_jvm_memory_used --instance-name=provider1 
--service-name=e2e-service-provider
+      expected: expected/metrics-no-value.yml
 
     # native event: event list
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql event list --service-name 
e2e-service-provider --instance-name provider1
+    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql event list
       expected: expected/event-list.yml
 
     # native log: logs list
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql logs list 
--service-name=e2e-service-provider --trace-id=$( \
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls \
-        | yq e '.traces | select(.[].endpointnames[0]=="POST:/info") | 
.[0].traceids[0]' -
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql logs list 
--service-name=e2e-service-provider --tags level=INFO --trace-id=$( \
+            swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql logs list 
--service-name=e2e-service-provider --tags level=INFO | yq e '.logs | 
map(select(.traceid != null)) | .[0].traceid' - \
         )
       expected: expected/logs-list.yml
 
     # native profile: create task
-    - query: swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace create 
--service-name e2e-service-provider --endpoint-name POST:/info 
--start-time=$((($(date +%s)+5)*1000)) --duration=1 --min-duration-threshold=0 
--dump-period=10 --max-sampling-count=9
+    - query: |
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql \
+          profiling trace create --service-name=e2e-service-provider \
+            --endpoint-name=POST:/info \
+            --start-time=$((($(date +%s)+5)*1000)) \
+            --duration=1 --min-duration-threshold=0 \
+            --dump-period=10 --max-sampling-count=9
       expected: expected/profile-create.yml
     # native profile: sleep to wait agent notices and query profile list
-    - query: sleep 10 && swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name e2e-service-provider --endpoint-name POST:/info
+    - query: sleep 10 && swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info
       expected: expected/profile-list.yml
     # native profile: sleep to wait segment report and query profiled segment 
list
     - query: |
         curl -X POST http://${consumer_host}:${consumer_9090}/info > /dev/null;
         sleep 5;
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$(swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name e2e-service-provider --endpoint-name POST:/info|yq e '.[0].id' -)
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
+          swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
+        )
       expected: expected/profile-segment-list.yml
     # native profile: query profiled segment
     - query: |
         segmentid=$( \
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
-        ) | yq e '.[0].spans.[] | select(.spanid == 0) | .segmentid' - \
+          swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
+            swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
+          ) | yq e '.[0].spans.[] | select(.spanid == 0) | .segmentid' - \
         );
         start=$(
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
-        ) | yq e '.[0].spans.[] | select(.spanid == 0) | .starttime' - \
+          swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
+            swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
+          ) | yq e '.[0].spans.[] | select(.spanid == 0) | .starttime' - \
         );
         end=$(
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
-        ) | yq e '.[0].spans.[] | select(.spanid == 0) | .endtime' - \
+          swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list 
--task-id=$( \
+            swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list 
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id' 
- \
+          ) | yq e '.[0].spans.[] | select(.spanid == 0) | .endtime' - \
         );
         swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace analysis 
--segment-ids=$segmentid --time-ranges=$(echo $start"-"$end)
-
       expected: expected/profile-segment-analyze.yml
+
     # native CDS: using etcdctl to update trace span limit, "/users" should 
have more than one span because it need DB save
     - query: |
         etcdctl --endpoints http://${etcd_host}:${etcd_2379}/ put 
/skywalking/configuration-discovery.default.agentConfigurations 'configurations:
@@ -127,8 +138,5 @@ verify:
     - query: |
         curl -s -XPOST http://${provider_host}:${provider_9090}/users -d 
'{"id":"123","name":"SinglesBar"}' -H "Content-Type: application/json" > 
/dev/null;
         sleep 5;
-        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace $( \
-          swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls --order startTime 
--service-name "e2e-service-provider" --endpoint-name "POST:/users" \
-            | yq e '.traces[0].traceids[0]' - \
-        )
-      expected: expected/trace-users-detail.yml
\ No newline at end of file
+        swctl --display yaml 
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls --order startTime 
--service-name "e2e-service-provider" --endpoint-name "POST:/users"
+      expected: expected/trace-users-detail.yml
diff --git a/test/e2e/case/native-protocols/expected/service.yml 
b/test/e2e/case/native-protocols/expected/dependency-services.yml
similarity index 62%
copy from test/e2e/case/native-protocols/expected/service.yml
copy to test/e2e/case/native-protocols/expected/dependency-services.yml
index b9bd7c5..8660dde 100644
--- a/test/e2e/case/native-protocols/expected/service.yml
+++ b/test/e2e/case/native-protocols/expected/dependency-services.yml
@@ -13,19 +13,32 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- contains . }}
-- id: {{ b64enc "e2e-service-provider" }}.1
+debuggingtrace: null
+nodes:
+{{- contains .nodes }}
+- id: {{ b64enc "e2e-service-provider"}}.1
   name: e2e-service-provider
-  shortname: e2e-service-provider
-  group: ""
+  type: Tomcat
+  isreal: true
   layers:
     - GENERAL
-  normal: true
-- id: {{ b64enc "e2e-service-consumer" }}.1
+- id: {{ b64enc "e2e-service-consumer"}}.1
   name: e2e-service-consumer
-  shortname: e2e-service-consumer
-  group: ""
+  type: Tomcat
+  isreal: true
   layers:
     - GENERAL
-  normal: true
-{{- end }}
\ No newline at end of file
+{{- end }}
+calls:
+{{- contains .calls }}
+- source: {{ b64enc "e2e-service-consumer"}}.1
+  sourcecomponents:
+    - SpringRestTemplate
+  target: {{ b64enc "e2e-service-provider"}}.1
+  targetcomponents:
+    - Tomcat
+  id: {{ b64enc "e2e-service-consumer"}}.1-{{ b64enc "e2e-service-provider"}}.1
+  detectpoints:
+    - CLIENT
+    - SERVER
+{{- end }}
diff --git a/test/e2e/case/native-protocols/expected/event-list.yml 
b/test/e2e/case/native-protocols/expected/event-list.yml
index 4b4dde2..8cf1259 100644
--- a/test/e2e/case/native-protocols/expected/event-list.yml
+++ b/test/e2e/case/native-protocols/expected/event-list.yml
@@ -25,8 +25,24 @@ events:
   message: Start Java Application
   parameters:
   {{- contains .parameters }}
-  - key: OPTS
-    value: {{ notEmpty .value }}
+    - key: OPTS
+      value: {{ notEmpty .value }}
+  {{- end }}
+  starttime: {{ gt .starttime 0 }}
+  endtime: {{ gt .endtime 0 }}
+  layer: GENERAL
+- uuid: {{ notEmpty .uuid }}
+  source:
+    service: e2e-service-consumer
+    serviceinstance: consumer1
+    endpoint: ""
+  name: Start
+  type: Normal
+  message: Start Java Application
+  parameters:
+  {{- contains .parameters }}
+    - key: OPTS
+      value: {{ notEmpty .value }}
   {{- end }}
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
diff --git a/test/e2e/case/native-protocols/expected/logs-list.yml 
b/test/e2e/case/native-protocols/expected/logs-list.yml
index d044721..9046a24 100644
--- a/test/e2e/case/native-protocols/expected/logs-list.yml
+++ b/test/e2e/case/native-protocols/expected/logs-list.yml
@@ -21,8 +21,8 @@ logs:
     serviceid: {{ b64enc "e2e-service-provider" }}.1
     serviceinstancename: provider1
     serviceinstanceid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc 
"provider1" }}
-    endpointname: POST:/info
-    endpointid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc "POST:/info" }}
+    endpointname: {{ notEmpty .endpointname }}
+    endpointid: {{ notEmpty .endpointid }}
     traceid: {{ notEmpty .traceid }}
     timestamp: {{ gt .timestamp 0 }}
     contenttype: TEXT
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml 
b/test/e2e/case/native-protocols/expected/metrics-has-value.yml
index 5aa1e36..cae6688 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-protocols/expected/metrics-has-value.yml
@@ -13,14 +13,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-{{- contains . }}
-- key: {{ notEmpty .key }}
-  value:
-    {{ if .value.isemptyvalue }}
-    isemptyvalue: true
-    value: 0
-    {{ else }}
-    isemptyvalue: false
-    value: {{ ge .value.value 0 }}
-    {{ end }}
-{{- end }}
+debuggingtrace: null
+type: TIME_SERIES_VALUES
+results:
+  {{- contains .results }}
+  - metric:
+      labels: []
+    values:
+      {{- contains .values }}
+      - id: {{ notEmpty .id }}
+        value: {{ notEmpty .value }}
+        owner: null
+        traceid: null
+      - id: {{ notEmpty .id }}
+        value: null
+        owner: null
+        traceid: null
+      {{- end}}
+  {{- end}}
+error: null
diff --git a/test/e2e/case/istio/als/expected/metrics-has-value.yml 
b/test/e2e/case/native-protocols/expected/metrics-no-value.yml
similarity index 92%
copy from test/e2e/case/istio/als/expected/metrics-has-value.yml
copy to test/e2e/case/native-protocols/expected/metrics-no-value.yml
index 445dceb..19fffb9 100644
--- a/test/e2e/case/istio/als/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-protocols/expected/metrics-no-value.yml
@@ -21,11 +21,9 @@ results:
       labels: []
     values:
       {{- contains .values }}
-      - id: {{ notEmpty .id }}
-        value: {{ .value }}
-        traceid: null
       - id: {{ notEmpty .id }}
         value: null
+        owner: null
         traceid: null
       {{- end}}
   {{- end}}
diff --git 
a/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml 
b/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
index e5a8e3e..9471b07 100644
--- a/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
+++ b/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
@@ -20,7 +20,7 @@ trees:
     {{- contains .elements }}
     - id: "{{ notEmpty .id }}"
       parentid: "{{ notEmpty .parentid }}"
-      codesignature: java.lang.Thread.sleep:-2
+      codesignature: "java.lang.Thread.sleep:-2"
       duration: {{ gt .duration 0 }}
       durationchildexcluded: {{ gt .durationchildexcluded 0 }}
       count: {{ gt .count 0 }}
diff --git a/test/e2e/case/native-protocols/expected/profile-segment-list.yml 
b/test/e2e/case/native-protocols/expected/profile-segment-list.yml
index 8d530d5..f0e2d07 100644
--- a/test/e2e/case/native-protocols/expected/profile-segment-list.yml
+++ b/test/e2e/case/native-protocols/expected/profile-segment-list.yml
@@ -22,31 +22,29 @@
   duration: {{ gt .duration 0 }}
   start: "{{ notEmpty .start }}"
   spans:
-    {{- contains .spans}}
-    - spanid: {{ ge .spanid 0 }}
-      parentspanid: {{ .parentspanid }}
-      segmentid: {{ notEmpty .segmentid }}
-      refs: []
-      servicecode: e2e-service-provider
-      serviceinstancename: provider1
-      starttime: {{ gt .starttime 0 }}
-      endtime: {{ gt .endtime 0 }}
-      endpointname: POST:/info
-      type: Entry
-      peer: ""
-      component: Tomcat
-      iserror: false
-      layer: Http
-      tags:
-        {{- contains .tags }}
-        - key: url
-          value: {{ notEmpty .value }}
-        - key: http.method
-          value: POST
-        - key: http.status_code
-          value: 200
-        {{- end }}
-      logs: []
-      profiled: true
-    {{- end}}
+  {{- contains .spans}}
+  - spanid: {{ ge .spanid 0 }}
+    parentspanid: {{ .parentspanid }}
+    segmentid: {{ notEmpty .segmentid }}
+    refs: []
+    servicecode: e2e-service-provider
+    serviceinstancename: provider1
+    starttime: {{ gt .starttime 0 }}
+    endtime: {{ gt .endtime 0 }}
+    endpointname: POST:/info
+    type: Entry
+    peer: ""
+    component: Tomcat
+    iserror: false
+    layer: Http
+    tags:
+      {{- contains .tags }}
+      - key: url
+        value: {{ notEmpty .value }}
+      - key: http.method
+        value: POST
+      {{- end }}
+    logs: []
+    profiled: true
+  {{- end}}
   {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/service.yml 
b/test/e2e/case/native-protocols/expected/service.yml
index b9bd7c5..8b2684e 100644
--- a/test/e2e/case/native-protocols/expected/service.yml
+++ b/test/e2e/case/native-protocols/expected/service.yml
@@ -16,16 +16,16 @@
 {{- contains . }}
 - id: {{ b64enc "e2e-service-provider" }}.1
   name: e2e-service-provider
-  shortname: e2e-service-provider
   group: ""
+  shortname: e2e-service-provider
+  normal: true
   layers:
     - GENERAL
-  normal: true
 - id: {{ b64enc "e2e-service-consumer" }}.1
   name: e2e-service-consumer
-  shortname: e2e-service-consumer
   group: ""
+  shortname: e2e-service-consumer
+  normal: true
   layers:
     - GENERAL
-  normal: true
-{{- end }}
\ No newline at end of file
+{{- end }}
diff --git a/test/e2e/case/native-protocols/expected/trace-info-detail.yml 
b/test/e2e/case/native-protocols/expected/trace-info-detail.yml
index 68a5cb8..be5a7d8 100644
--- a/test/e2e/case/native-protocols/expected/trace-info-detail.yml
+++ b/test/e2e/case/native-protocols/expected/trace-info-detail.yml
@@ -14,52 +14,65 @@
 # limitations under the License.
 
 debuggingtrace: null
-spans:
-  {{- contains .spans}}
-  - traceid: {{ notEmpty .traceid }}
-    attachedevents: []
-    segmentid: {{ notEmpty .segmentid }}
-    spanid: {{ .spanid }}
-    parentspanid: {{ .parentspanid }}
-    refs:
-      {{- if eq .servicecode "e2e-service-provider" }}
+retrievedtimerange:
+  {{- with .retrievedtimerange }}
+  starttime: {{ gt .starttime 0 }}
+  endtime: {{ gt .endtime 0 }}
+  {{- end }}
+traces:
+  {{- contains .traces }}
+  - spans:
+    {{- contains .spans }}
+    - traceid: {{ notEmpty .traceid }}
+      segmentid: {{ notEmpty .segmentid }}
+      spanid: {{ .spanid }}
+      parentspanid: {{ .parentspanid }}
+      refs:
+        {{- if eq .servicecode "e2e-service-provider" }}
         {{- contains .refs }}
-        - traceid: {{ notEmpty .traceid }}
-          parentsegmentid: {{ notEmpty .parentsegmentid }}
-          parentspanid: 1
-          type: CROSS_PROCESS
+          - traceid: {{ notEmpty .traceid }}
+            parentsegmentid: {{ notEmpty .parentsegmentid }}
+            parentspanid: 1
+            type: CROSS_PROCESS
         {{- end }}
         {{- end }}
         {{- if eq .servicecode "e2e-service-consumer" }}
-        []
+          []
         {{- end }}
-    servicecode: {{ notEmpty .servicecode }}
-    serviceinstancename: {{ notEmpty .serviceinstancename }}
-    starttime: {{ gt .starttime 0 }}
-    endtime: {{ gt .endtime 0 }}
-    endpointname: POST:/info
-    type: {{ notEmpty .type }}
-    peer:
-    {{- if eq .type "Exit" }}
-    provider:9090
-    {{ else }}
-    ""
-    {{- end }}
-    component:
-    {{- if eq .type "Exit" }}
-    SpringRestTemplate
-    {{- end }}
-    {{- if eq .type "Entry" }}
-    Tomcat
-    {{- end }}
-    iserror: false
-    layer: Http
-    tags:
-      {{- contains .tags }}
-      - key: http.method
-        value: POST
-      - key: url
-        value: {{ notEmpty .value }}
+      servicecode: {{ notEmpty .servicecode }}
+      serviceinstancename: {{ notEmpty .serviceinstancename }}
+      starttime: {{ gt .starttime 0 }}
+      endtime: {{ gt .endtime 0 }}
+      endpointname:
+        {{- if eq .type "Exit" }}
+          /info
+        {{ else }}
+          POST:/info
+        {{- end }}
+      type: {{ notEmpty .type }}
+      peer:
+      {{- if eq .type "Exit" }}
+        provider:9090
+      {{ else }}
+        ""
       {{- end }}
-    logs: []
+      component:
+      {{- if eq .type "Exit" }}
+        SpringRestTemplate
+      {{- end }}
+      {{- if eq .type "Entry" }}
+        Tomcat
+      {{- end }}
+      iserror: false
+      layer: Http
+      tags:
+        {{- contains .tags }}
+        - key: http.method
+          value: POST
+        - key: url
+          value: {{ notEmpty .value }}
+        {{- end }}
+      logs: []
+      attachedevents: []
+    {{- end }}
   {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/trace-users-detail.yml 
b/test/e2e/case/native-protocols/expected/trace-users-detail.yml
index 4481f43..87f036a 100644
--- a/test/e2e/case/native-protocols/expected/trace-users-detail.yml
+++ b/test/e2e/case/native-protocols/expected/trace-users-detail.yml
@@ -14,30 +14,38 @@
 # limitations under the License.
 
 debuggingtrace: null
-spans:
-  {{- contains .spans}}
-  - traceid: {{ notEmpty .traceid }}
-    segmentid: {{ notEmpty .segmentid }}
-    attachedevents: []
-    spanid: 0
-    parentspanid: -1
-    refs: []
-    servicecode: {{ notEmpty .servicecode }}
-    serviceinstancename: {{ notEmpty .serviceinstancename }}
-    starttime: {{ gt .starttime 0 }}
-    endtime: {{ gt .endtime 0 }}
-    endpointname: POST:/users
-    type: Entry
-    peer: ""
-    component: Tomcat
-    iserror: false
-    layer: Http
-    tags:
-      {{- contains .tags }}
-      - key: http.method
-        value: POST
-      - key: url
-        value: {{ notEmpty .value }}
-      {{- end }}
-    logs: []
+retrievedtimerange:
+  {{- with .retrievedtimerange }}
+  starttime: {{ gt .starttime 0 }}
+  endtime: {{ gt .endtime 0 }}
+  {{- end }}
+traces:
+  {{- contains .traces }}
+  - spans:
+    {{- with (index .spans 0) }}
+    - traceid: {{ .traceid }}
+      segmentid: {{ .segmentid }}
+      spanid: {{ .spanid }}
+      parentspanid: {{ .parentspanid }}
+      refs: []
+      servicecode: e2e-service-provider
+      serviceinstancename: provider1
+      starttime: {{ gt .starttime 0 }}
+      endtime: {{ gt .endtime 0 }}
+      endpointname: POST:/users
+      type: Entry
+      peer: ""
+      component: Tomcat
+      iserror: false
+      layer: Http
+      tags:
+        {{- contains .tags }}
+        - key: http.method
+          value: POST
+        - key: url
+          value: {{ notEmpty .value }}
+        {{- end }}
+      logs: []
+      attachedevents: []
+    {{- end }}
   {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/traces-list.yml 
b/test/e2e/case/native-protocols/expected/traces-list.yml
index e529898..f576ee6 100644
--- a/test/e2e/case/native-protocols/expected/traces-list.yml
+++ b/test/e2e/case/native-protocols/expected/traces-list.yml
@@ -14,14 +14,36 @@
 # limitations under the License.
 
 debuggingtrace: null
+retrievedtimerange:
+  {{- with .retrievedtimerange }}
+  starttime: {{ gt .starttime 0 }}
+  endtime: {{ gt .endtime 0 }}
+  {{- end }}
 traces:
   {{- contains .traces }}
-- segmentid: {{ notEmpty .segmentid }}
-  endpointnames:
-    - POST:/info
-  duration: {{ ge .duration 0 }}
-  start: "{{ notEmpty .start}}"
-  iserror: false
-  traceids:
-    - {{ (index .traceids 0) }}
-  {{- end }}
\ No newline at end of file
+  - spans:
+    {{- contains .spans }}
+    - traceid: {{ .traceid }}
+      segmentid: {{ .segmentid }}
+      spanid: {{ .spanid }}
+      parentspanid: {{ .parentspanid }}
+      refs: []
+      servicecode: {{ .servicecode }}
+      serviceinstancename: {{ .serviceinstancename }}
+      starttime: {{ gt .starttime 0 }}
+      endtime: {{ gt .endtime 0 }}
+      endpointname: {{ .endpointname }}
+      type: {{ .type }}
+      peer: {{ .peer }}
+      component: {{ .component }}
+      iserror: {{ .iserror }}
+      layer: {{ .layer }}
+      tags:
+        {{- contains .tags }}
+        - key: {{ .key }}
+          value: {{ .value }}
+        {{- end }}
+      logs: []
+      attachedevents: []
+    {{- end }}
+    {{- end }}

Reply via email to