You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/06/28 07:39:16 UTC

[skywalking-goapi] 08/16: Add Satellite api (#5)

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

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

commit 0a22b4e63a690d694f0b18c6c0524935367d5835
Author: Evan <31...@users.noreply.github.com>
AuthorDate: Fri Jun 4 09:48:03 2021 +0800

    Add Satellite api (#5)
---
 .github/workflows/build.yaml       |   7 +-
 Makefile                           |  16 +-
 README.md                          |  26 +-
 go.mod                             |   6 +-
 go.sum                             |  67 +----
 satellite/data/v1/SniffData.pb.go  | 522 +++++++++++++++++++++++++++++++++++++
 satellite/data/v1/SniffData.proto  |  74 ++++++
 scripts/update.sh                  |   2 +-
 scripts/update_collect_protocol.sh |  58 -----
 scripts/update_sniff_protocol.sh   |  79 ++++++
 10 files changed, 720 insertions(+), 137 deletions(-)

diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index a140aff..0de71dd 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -5,9 +5,9 @@
 # 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
@@ -36,3 +36,6 @@ jobs:
 
       - name: Build
         run: make
+
+      - name: Check
+        run: make check
diff --git a/Makefile b/Makefile
index 05a624d..87f1038 100644
--- a/Makefile
+++ b/Makefile
@@ -17,9 +17,9 @@
 
 default: update
 
-.PHONY: update-collect
-update-collect:
-	bash scripts/update_collect_protocol.sh
+.PHONY: update-sniff
+update-sniff:
+	bash scripts/update_sniff_protocol.sh
 
 .PHONY: update-query
 update-query:
@@ -28,3 +28,13 @@ update-query:
 .PHONY: update
 update:
 	bash scripts/update.sh
+
+.PHONY: check
+check:
+	go mod tidy > /dev/null
+	@if [ ! -z "`git status -s`" ]; then \
+		echo "Following files are not consistent with CI:"; \
+		git status -s; \
+		git diff; \
+		exit 1; \
+	fi
\ No newline at end of file
diff --git a/README.md b/README.md
index f327b1a..7dce800 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # SkyWalking Go APIs
 
 This repository contains the Go files generated from
-the [data collect protocol](http://github.com/apache/skywalking-data-collect-protocol) and
+the sniff protocol([data collect protocol](http://github.com/apache/skywalking-data-collect-protocol), the satellite protocol) and
 the [query protocol](http://github.com/apache/skywalking-query-protocol) for convenient use.
 
 You can use the following commands to install this module.
@@ -10,19 +10,21 @@ You can use the following commands to install this module.
 go get skywalking.apache.org/repo/goapi
 ```
 
-## Data Collect Protocol
+## Data Sniff Protocol
 
 To use the Go files generated from
-the [data collect protocol](http://github.com/apache/skywalking-data-collect-protocol), use the import
-path `skywalking.apache.org/repo/goapi/collect`, for example,
+the [data collect protocol](http://github.com/apache/skywalking-data-collect-protocol) and the satellite protocol, use the import
+path `skywalking.apache.org/repo/goapi/collect` and `skywalking.apache.org/repo/goapi/satellite`, for example,
 
 ```go
 package main
 
 import (
 	"fmt"
+	"time"
 
-	"skywalking.apache.org/repo/goapi/collect/event/v3"
+	v3 "skywalking.apache.org/repo/goapi/collect/event/v3"
+	v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
 )
 
 func main() {
@@ -37,8 +39,19 @@ func main() {
 		EndTime:    0,
 	}
 
-	fmt.Printf("+%v", event)
+	sniffData := &v1.SniffData{
+		Timestamp: time.Now().Unix() / 1e6,
+		Name:      "Satellite_event",
+		Type:      v1.SniffType_EventType,
+		Meta:      nil,
+		Remote:    true,
+		Data: &v1.SniffData_Event{
+			Event: event,
+		},
+	}
+	fmt.Printf("+%v", sniffData)
 }
+
 ```
 
 ## Query Protocol
@@ -65,6 +78,7 @@ func main() {
 }
 ```
 
+
 ## Development
 
 To update this repo, update the commit sha in the `dependencies.sh` file, and run `make` to regenerate the Go files,
diff --git a/go.mod b/go.mod
index a6c4bd0..12bb3e9 100644
--- a/go.mod
+++ b/go.mod
@@ -3,8 +3,8 @@ module skywalking.apache.org/repo/goapi
 go 1.16
 
 require (
-	github.com/99designs/gqlgen v0.13.0
-	github.com/vektah/gqlparser/v2 v2.1.0
-	google.golang.org/grpc v1.36.1
+	golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
+	golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
+	google.golang.org/grpc v1.38.0
 	google.golang.org/protobuf v1.26.0
 )
diff --git a/go.sum b/go.sum
index a50ffb7..fc04dc6 100644
--- a/go.sum
+++ b/go.sum
@@ -1,29 +1,13 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/99designs/gqlgen v0.13.0 h1:haLTcUp3Vwp80xMVEg5KRNwzfUrgFdRmtBY8fuB8scA=
-github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
-github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
-github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
-github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c h1:TUuUh0Xgj97tLMNtWtNvI9mIV6isjEb9lBMNv+77IGM=
-github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
 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.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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
-github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 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=
@@ -45,53 +29,19 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
-github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
-github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
-github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
-github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
-github.com/vektah/gqlparser/v2 v2.1.0 h1:uiKJ+T5HMGGQM2kRKQ8Pxw8+Zq9qhhZhz/lieYvCMns=
-github.com/vektah/gqlparser/v2 v2.1.0/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
 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/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/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 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-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 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -100,20 +50,14 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 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-20190222072716-a9d3bda3a223/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-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/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-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
@@ -126,8 +70,8 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi
 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.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY=
-google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 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=
@@ -141,11 +85,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 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=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
-sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
diff --git a/satellite/data/v1/SniffData.pb.go b/satellite/data/v1/SniffData.pb.go
new file mode 100644
index 0000000..b007152
--- /dev/null
+++ b/satellite/data/v1/SniffData.pb.go
@@ -0,0 +1,522 @@
+//
+// 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.
+//
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.26.0
+// 	protoc        v3.14.0
+// source: satellite/SniffData.proto
+
+package v1
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	v35 "skywalking.apache.org/repo/goapi/collect/event/v3"
+	v3 "skywalking.apache.org/repo/goapi/collect/language/agent/v3"
+	v33 "skywalking.apache.org/repo/goapi/collect/language/profile/v3"
+	v31 "skywalking.apache.org/repo/goapi/collect/logging/v3"
+	v32 "skywalking.apache.org/repo/goapi/collect/management/v3"
+	v34 "skywalking.apache.org/repo/goapi/collect/servicemesh/v3"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// SniffType declares the supported transfer data type.
+type SniffType int32
+
+const (
+	SniffType_CLRMetricType   SniffType = 0
+	SniffType_JVMMetricType   SniffType = 1
+	SniffType_MeterType       SniffType = 2
+	SniffType_TracingType     SniffType = 3
+	SniffType_Logging         SniffType = 4
+	SniffType_ManagementType  SniffType = 5
+	SniffType_ProfileType     SniffType = 6
+	SniffType_ServiceMeshType SniffType = 7
+	SniffType_EventType       SniffType = 8
+)
+
+// Enum value maps for SniffType.
+var (
+	SniffType_name = map[int32]string{
+		0: "CLRMetricType",
+		1: "JVMMetricType",
+		2: "MeterType",
+		3: "TracingType",
+		4: "Logging",
+		5: "ManagementType",
+		6: "ProfileType",
+		7: "ServiceMeshType",
+		8: "EventType",
+	}
+	SniffType_value = map[string]int32{
+		"CLRMetricType":   0,
+		"JVMMetricType":   1,
+		"MeterType":       2,
+		"TracingType":     3,
+		"Logging":         4,
+		"ManagementType":  5,
+		"ProfileType":     6,
+		"ServiceMeshType": 7,
+		"EventType":       8,
+	}
+)
+
+func (x SniffType) Enum() *SniffType {
+	p := new(SniffType)
+	*p = x
+	return p
+}
+
+func (x SniffType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SniffType) Descriptor() protoreflect.EnumDescriptor {
+	return file_satellite_SniffData_proto_enumTypes[0].Descriptor()
+}
+
+func (SniffType) Type() protoreflect.EnumType {
+	return &file_satellite_SniffData_proto_enumTypes[0]
+}
+
+func (x SniffType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SniffType.Descriptor instead.
+func (SniffType) EnumDescriptor() ([]byte, []int) {
+	return file_satellite_SniffData_proto_rawDescGZIP(), []int{0}
+}
+
+// SniffData is the transfer unit in Satellite.
+type SniffData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The occur time.
+	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	// unique event name.
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// The data type.
+	Type SniffType `protobuf:"varint,3,opt,name=type,proto3,enum=skywalking.v3.SniffType" json:"type,omitempty"`
+	// Whether to send to remote. It is used in sampling.
+	Remote bool `protobuf:"varint,4,opt,name=remote,proto3" json:"remote,omitempty"`
+	// Additional meta-information.
+	Meta map[string]string `protobuf:"bytes,5,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// Transfer data.
+	//
+	// Types that are assignable to Data:
+	//	*SniffData_Clr
+	//	*SniffData_Jvm
+	//	*SniffData_Meter
+	//	*SniffData_Segment
+	//	*SniffData_Log
+	//	*SniffData_Instance
+	//	*SniffData_Profile
+	//	*SniffData_ServiceMesh
+	//	*SniffData_Event
+	Data isSniffData_Data `protobuf_oneof:"data"`
+}
+
+func (x *SniffData) Reset() {
+	*x = SniffData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_satellite_SniffData_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SniffData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SniffData) ProtoMessage() {}
+
+func (x *SniffData) ProtoReflect() protoreflect.Message {
+	mi := &file_satellite_SniffData_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SniffData.ProtoReflect.Descriptor instead.
+func (*SniffData) Descriptor() ([]byte, []int) {
+	return file_satellite_SniffData_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SniffData) GetTimestamp() int64 {
+	if x != nil {
+		return x.Timestamp
+	}
+	return 0
+}
+
+func (x *SniffData) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *SniffData) GetType() SniffType {
+	if x != nil {
+		return x.Type
+	}
+	return SniffType_CLRMetricType
+}
+
+func (x *SniffData) GetRemote() bool {
+	if x != nil {
+		return x.Remote
+	}
+	return false
+}
+
+func (x *SniffData) GetMeta() map[string]string {
+	if x != nil {
+		return x.Meta
+	}
+	return nil
+}
+
+func (m *SniffData) GetData() isSniffData_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (x *SniffData) GetClr() *v3.CLRMetricCollection {
+	if x, ok := x.GetData().(*SniffData_Clr); ok {
+		return x.Clr
+	}
+	return nil
+}
+
+func (x *SniffData) GetJvm() *v3.JVMMetricCollection {
+	if x, ok := x.GetData().(*SniffData_Jvm); ok {
+		return x.Jvm
+	}
+	return nil
+}
+
+func (x *SniffData) GetMeter() *v3.MeterData {
+	if x, ok := x.GetData().(*SniffData_Meter); ok {
+		return x.Meter
+	}
+	return nil
+}
+
+func (x *SniffData) GetSegment() *v3.SegmentObject {
+	if x, ok := x.GetData().(*SniffData_Segment); ok {
+		return x.Segment
+	}
+	return nil
+}
+
+func (x *SniffData) GetLog() *v31.LogData {
+	if x, ok := x.GetData().(*SniffData_Log); ok {
+		return x.Log
+	}
+	return nil
+}
+
+func (x *SniffData) GetInstance() *v32.InstanceProperties {
+	if x, ok := x.GetData().(*SniffData_Instance); ok {
+		return x.Instance
+	}
+	return nil
+}
+
+func (x *SniffData) GetProfile() *v33.ThreadSnapshot {
+	if x, ok := x.GetData().(*SniffData_Profile); ok {
+		return x.Profile
+	}
+	return nil
+}
+
+func (x *SniffData) GetServiceMesh() *v34.ServiceMeshMetric {
+	if x, ok := x.GetData().(*SniffData_ServiceMesh); ok {
+		return x.ServiceMesh
+	}
+	return nil
+}
+
+func (x *SniffData) GetEvent() *v35.Event {
+	if x, ok := x.GetData().(*SniffData_Event); ok {
+		return x.Event
+	}
+	return nil
+}
+
+type isSniffData_Data interface {
+	isSniffData_Data()
+}
+
+type SniffData_Clr struct {
+	Clr *v3.CLRMetricCollection `protobuf:"bytes,6,opt,name=clr,proto3,oneof"`
+}
+
+type SniffData_Jvm struct {
+	Jvm *v3.JVMMetricCollection `protobuf:"bytes,7,opt,name=jvm,proto3,oneof"`
+}
+
+type SniffData_Meter struct {
+	Meter *v3.MeterData `protobuf:"bytes,8,opt,name=meter,proto3,oneof"`
+}
+
+type SniffData_Segment struct {
+	Segment *v3.SegmentObject `protobuf:"bytes,9,opt,name=segment,proto3,oneof"`
+}
+
+type SniffData_Log struct {
+	Log *v31.LogData `protobuf:"bytes,10,opt,name=log,proto3,oneof"`
+}
+
+type SniffData_Instance struct {
+	Instance *v32.InstanceProperties `protobuf:"bytes,11,opt,name=instance,proto3,oneof"`
+}
+
+type SniffData_Profile struct {
+	Profile *v33.ThreadSnapshot `protobuf:"bytes,12,opt,name=profile,proto3,oneof"`
+}
+
+type SniffData_ServiceMesh struct {
+	ServiceMesh *v34.ServiceMeshMetric `protobuf:"bytes,13,opt,name=serviceMesh,proto3,oneof"`
+}
+
+type SniffData_Event struct {
+	Event *v35.Event `protobuf:"bytes,14,opt,name=event,proto3,oneof"`
+}
+
+func (*SniffData_Clr) isSniffData_Data() {}
+
+func (*SniffData_Jvm) isSniffData_Data() {}
+
+func (*SniffData_Meter) isSniffData_Data() {}
+
+func (*SniffData_Segment) isSniffData_Data() {}
+
+func (*SniffData_Log) isSniffData_Data() {}
+
+func (*SniffData_Instance) isSniffData_Data() {}
+
+func (*SniffData_Profile) isSniffData_Data() {}
+
+func (*SniffData_ServiceMesh) isSniffData_Data() {}
+
+func (*SniffData_Event) isSniffData_Data() {}
+
+var File_satellite_SniffData_proto protoreflect.FileDescriptor
+
+var file_satellite_SniffData_proto_rawDesc = []byte{
+	0x0a, 0x19, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x2f, 0x53, 0x6e, 0x69, 0x66,
+	0x66, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x73, 0x6b, 0x79,
+	0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x1a, 0x1e, 0x6c, 0x61, 0x6e, 0x67,
+	0x75, 0x61, 0x67, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x43, 0x4c, 0x52, 0x4d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6c, 0x61, 0x6e, 0x67,
+	0x75, 0x61, 0x67, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x4a, 0x56, 0x4d, 0x4d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x6c, 0x61, 0x6e, 0x67,
+	0x75, 0x61, 0x67, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x4d, 0x65, 0x74, 0x65, 0x72,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
+	0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x2f, 0x4c, 0x6f,
+	0x67, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c,
+	0x65, 0x2f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
+	0x25, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2d, 0x70, 0x72,
+	0x6f, 0x62, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x6d, 0x65, 0x73, 0x68,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2f, 0x45, 0x76,
+	0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf4, 0x05, 0x0a, 0x09, 0x53, 0x6e,
+	0x69, 0x66, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x6e, 0x69, 0x66, 0x66, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12,
+	0x36, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e,
+	0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x6e,
+	0x69, 0x66, 0x66, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x03, 0x63, 0x6c, 0x72, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e,
+	0x67, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x4c, 0x52, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f,
+	0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x63, 0x6c, 0x72, 0x12,
+	0x36, 0x0a, 0x03, 0x6a, 0x76, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73,
+	0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4a, 0x56, 0x4d,
+	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x48, 0x00, 0x52, 0x03, 0x6a, 0x76, 0x6d, 0x12, 0x30, 0x0a, 0x05, 0x6d, 0x65, 0x74, 0x65, 0x72,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b,
+	0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
+	0x48, 0x00, 0x52, 0x05, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x67,
+	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x6b, 0x79,
+	0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65,
+	0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x67, 0x6d,
+	0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x16, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33,
+	0x2e, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12,
+	0x3f, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x21, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
+	0x33, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
+	0x74, 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
+	0x12, 0x39, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
+	0x33, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74,
+	0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x73,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x20, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33,
+	0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x4d, 0x65, 0x74, 0x72,
+	0x69, 0x63, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73,
+	0x68, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x14, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33,
+	0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x1a,
+	0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x2a, 0xa7, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x69, 0x66, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11,
+	0x0a, 0x0d, 0x43, 0x4c, 0x52, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x10,
+	0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x56, 0x4d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79,
+	0x70, 0x65, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70,
+	0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x54, 0x79,
+	0x70, 0x65, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x10,
+	0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54,
+	0x79, 0x70, 0x65, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
+	0x54, 0x79, 0x70, 0x65, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x45,
+	0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x08, 0x42, 0x34, 0x5a, 0x32, 0x73, 0x6b,
+	0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
+	0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f, 0x73,
+	0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x76, 0x31,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_satellite_SniffData_proto_rawDescOnce sync.Once
+	file_satellite_SniffData_proto_rawDescData = file_satellite_SniffData_proto_rawDesc
+)
+
+func file_satellite_SniffData_proto_rawDescGZIP() []byte {
+	file_satellite_SniffData_proto_rawDescOnce.Do(func() {
+		file_satellite_SniffData_proto_rawDescData = protoimpl.X.CompressGZIP(file_satellite_SniffData_proto_rawDescData)
+	})
+	return file_satellite_SniffData_proto_rawDescData
+}
+
+var file_satellite_SniffData_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_satellite_SniffData_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_satellite_SniffData_proto_goTypes = []interface{}{
+	(SniffType)(0),                 // 0: skywalking.v3.SniffType
+	(*SniffData)(nil),              // 1: skywalking.v3.SniffData
+	nil,                            // 2: skywalking.v3.SniffData.MetaEntry
+	(*v3.CLRMetricCollection)(nil), // 3: skywalking.v3.CLRMetricCollection
+	(*v3.JVMMetricCollection)(nil), // 4: skywalking.v3.JVMMetricCollection
+	(*v3.MeterData)(nil),           // 5: skywalking.v3.MeterData
+	(*v3.SegmentObject)(nil),       // 6: skywalking.v3.SegmentObject
+	(*v31.LogData)(nil),            // 7: skywalking.v3.LogData
+	(*v32.InstanceProperties)(nil), // 8: skywalking.v3.InstanceProperties
+	(*v33.ThreadSnapshot)(nil),     // 9: skywalking.v3.ThreadSnapshot
+	(*v34.ServiceMeshMetric)(nil),  // 10: skywalking.v3.ServiceMeshMetric
+	(*v35.Event)(nil),              // 11: skywalking.v3.Event
+}
+var file_satellite_SniffData_proto_depIdxs = []int32{
+	0,  // 0: skywalking.v3.SniffData.type:type_name -> skywalking.v3.SniffType
+	2,  // 1: skywalking.v3.SniffData.meta:type_name -> skywalking.v3.SniffData.MetaEntry
+	3,  // 2: skywalking.v3.SniffData.clr:type_name -> skywalking.v3.CLRMetricCollection
+	4,  // 3: skywalking.v3.SniffData.jvm:type_name -> skywalking.v3.JVMMetricCollection
+	5,  // 4: skywalking.v3.SniffData.meter:type_name -> skywalking.v3.MeterData
+	6,  // 5: skywalking.v3.SniffData.segment:type_name -> skywalking.v3.SegmentObject
+	7,  // 6: skywalking.v3.SniffData.log:type_name -> skywalking.v3.LogData
+	8,  // 7: skywalking.v3.SniffData.instance:type_name -> skywalking.v3.InstanceProperties
+	9,  // 8: skywalking.v3.SniffData.profile:type_name -> skywalking.v3.ThreadSnapshot
+	10, // 9: skywalking.v3.SniffData.serviceMesh:type_name -> skywalking.v3.ServiceMeshMetric
+	11, // 10: skywalking.v3.SniffData.event:type_name -> skywalking.v3.Event
+	11, // [11:11] is the sub-list for method output_type
+	11, // [11:11] is the sub-list for method input_type
+	11, // [11:11] is the sub-list for extension type_name
+	11, // [11:11] is the sub-list for extension extendee
+	0,  // [0:11] is the sub-list for field type_name
+}
+
+func init() { file_satellite_SniffData_proto_init() }
+func file_satellite_SniffData_proto_init() {
+	if File_satellite_SniffData_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_satellite_SniffData_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SniffData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_satellite_SniffData_proto_msgTypes[0].OneofWrappers = []interface{}{
+		(*SniffData_Clr)(nil),
+		(*SniffData_Jvm)(nil),
+		(*SniffData_Meter)(nil),
+		(*SniffData_Segment)(nil),
+		(*SniffData_Log)(nil),
+		(*SniffData_Instance)(nil),
+		(*SniffData_Profile)(nil),
+		(*SniffData_ServiceMesh)(nil),
+		(*SniffData_Event)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_satellite_SniffData_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_satellite_SniffData_proto_goTypes,
+		DependencyIndexes: file_satellite_SniffData_proto_depIdxs,
+		EnumInfos:         file_satellite_SniffData_proto_enumTypes,
+		MessageInfos:      file_satellite_SniffData_proto_msgTypes,
+	}.Build()
+	File_satellite_SniffData_proto = out.File
+	file_satellite_SniffData_proto_rawDesc = nil
+	file_satellite_SniffData_proto_goTypes = nil
+	file_satellite_SniffData_proto_depIdxs = nil
+}
diff --git a/satellite/data/v1/SniffData.proto b/satellite/data/v1/SniffData.proto
new file mode 100644
index 0000000..02f0146
--- /dev/null
+++ b/satellite/data/v1/SniffData.proto
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ *
+ */
+
+syntax = "proto3";
+
+package skywalking.v3;
+
+option go_package = "skywalking.apache.org/repo/goapi/satellite/data/v1";
+
+import "language-agent/CLRMetric.proto";
+import "language-agent/JVMMetric.proto";
+import "language-agent/Meter.proto";
+import "language-agent/Tracing.proto";
+import "logging/Logging.proto";
+import "management/Management.proto";
+import "profile/Profile.proto";
+import "service-mesh-probe/service-mesh.proto";
+import "event/Event.proto";
+
+// SniffType declares the supported transfer data type.
+enum SniffType {
+  CLRMetricType = 0;
+  JVMMetricType = 1;
+  MeterType = 2;
+  TracingType = 3;
+  Logging = 4;
+  ManagementType = 5;
+  ProfileType = 6;
+  ServiceMeshType = 7;
+  EventType = 8;
+}
+
+// SniffData is the transfer unit in Satellite.
+message SniffData {
+
+  // The occur time.
+  int64 timestamp = 1;
+  // unique event name.
+  string name = 2;
+  // The data type.
+  SniffType type = 3;
+  // Whether to send to remote. It is used in sampling.
+  bool remote = 4;
+  // Additional meta-information.
+  map<string, string> meta = 5;
+
+  // Transfer data.
+  oneof data{
+    CLRMetricCollection clr = 6;
+    JVMMetricCollection jvm = 7;
+    MeterData meter = 8;
+    SegmentObject segment = 9;
+    LogData log = 10;
+    InstanceProperties instance = 11;
+    ThreadSnapshot profile = 12;
+    ServiceMeshMetric serviceMesh = 13;
+    Event event = 14;
+  }
+}
diff --git a/scripts/update.sh b/scripts/update.sh
index 450b490..6bb807d 100644
--- a/scripts/update.sh
+++ b/scripts/update.sh
@@ -19,7 +19,7 @@
 
 set -e
 
-bash "$(dirname "$0")"/update_collect_protocol.sh
+bash "$(dirname "$0")"/update_sniff_protocol.sh
 bash "$(dirname "$0")"/update_query_protocol.sh
 
 rm -rf temp
diff --git a/scripts/update_collect_protocol.sh b/scripts/update_collect_protocol.sh
deleted file mode 100644
index ec6b480..0000000
--- a/scripts/update_collect_protocol.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-set -e
-
-BASEDIR=$(dirname "$0")/..
-TEMPDIR="$BASEDIR"/temp
-
-. "$BASEDIR"/dependencies.sh
-
-if [[ ! -d "$TEMPDIR" ]]; then
-  mkdir -p "$TEMPDIR"
-else
-  rm -rf "${TEMPDIR:?}"/*
-fi
-
-curl -sLo "$TEMPDIR"/collect-protocol.tgz https://github.com/apache/skywalking-data-collect-protocol/archive/"${COLLECT_PROTOCOL_SHA}".tar.gz
-
-if [[ ! -d "$TEMPDIR"/collect-protocol ]]; then
-  mkdir "$TEMPDIR"/collect-protocol
-else
-  rm -rf "$TEMPDIR"/collect-protocol/*
-fi
-
-tar -zxf "$TEMPDIR"/collect-protocol.tgz -C "$TEMPDIR"/collect-protocol --strip 1
-
-find "$TEMPDIR"/collect-protocol -name "*Compat.proto" -exec rm {} \;
-
-rm -rf "$BASEDIR"/collect
-
-go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26.0
-go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
-
-"$BASEDIR"/scripts/protoc.sh \
-  --proto_path="$TEMPDIR"/collect-protocol \
-  --go_out="$BASEDIR" \
-  --go-grpc_out="$BASEDIR" \
-  "$TEMPDIR"/collect-protocol/*/*.proto
-
-mv "$BASEDIR"/skywalking.apache.org/repo/goapi/collect "$BASEDIR"/ && rm -rf "$BASEDIR"/skywalking.apache.org
-
-go mod tidy
diff --git a/scripts/update_sniff_protocol.sh b/scripts/update_sniff_protocol.sh
new file mode 100644
index 0000000..c68995e
--- /dev/null
+++ b/scripts/update_sniff_protocol.sh
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -e
+
+export BASEDIR=$(dirname "$0")/..
+export TEMPDIR="$BASEDIR"/temp
+. "$BASEDIR"/dependencies.sh
+
+function makeProtocolHome(){
+  if [[ ! -d "$TEMPDIR" ]]; then
+    mkdir -p "$TEMPDIR"
+  else
+    rm -rf "${TEMPDIR:?}"/*
+  fi
+
+  curl -sLo "$TEMPDIR"/collect-protocol.tgz https://github.com/apache/skywalking-data-collect-protocol/archive/"${COLLECT_PROTOCOL_SHA}".tar.gz
+
+  if [[ ! -d "$TEMPDIR"/collect-protocol ]]; then
+    mkdir "$TEMPDIR"/collect-protocol
+  else
+    rm -rf "$TEMPDIR"/collect-protocol/*
+  fi
+
+  tar -zxf "$TEMPDIR"/collect-protocol.tgz -C "$TEMPDIR"/collect-protocol --strip 1
+
+  find "$TEMPDIR"/collect-protocol -name "*Compat.proto" -exec rm {} \;
+
+  if [[ ! -d "$TEMPDIR"/collect-protocol/satellite ]]; then
+    mkdir "$TEMPDIR"/collect-protocol/satellite
+  else
+    rm -rf "$TEMPDIR"/collect-protocol/satellite/*
+  fi
+
+  cp -R "$BASEDIR"/satellite/data/v1/*.proto "$TEMPDIR"/collect-protocol/satellite/
+}
+
+
+function cleanHistoryCodes(){
+  rm -rf "$BASEDIR"/collect
+  find "$BASEDIR"/satellite -name "*.go" -exec rm {} \;
+}
+
+
+function generateCodes(){
+  go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26.0
+  go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
+
+  "$BASEDIR"/scripts/protoc.sh \
+    --proto_path="$TEMPDIR"/collect-protocol \
+    --go_out="$BASEDIR" \
+    --go-grpc_out="$BASEDIR" \
+    "$TEMPDIR"/collect-protocol/*/*.proto
+
+  mv "$BASEDIR"/skywalking.apache.org/repo/goapi/collect "$BASEDIR"/ \
+  && mv "$BASEDIR"/skywalking.apache.org/repo/goapi/satellite/data/v1/* "$BASEDIR"/satellite/data/v1 \
+  && rm -rf "$BASEDIR"/skywalking.apache.org
+  go mod tidy
+}
+
+makeProtocolHome
+cleanHistoryCodes
+generateCodes