You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by li...@apache.org on 2022/12/06 03:13:01 UTC

[skywalking-rover] branch main updated: Upgrade Go and eBPF library (#65)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new e0b9db7  Upgrade Go and eBPF library (#65)
e0b9db7 is described below

commit e0b9db7a305d4b6fdc88bfe16511c24f76fa1af5
Author: mrproliu <74...@qq.com>
AuthorDate: Tue Dec 6 11:12:56 2022 +0800

    Upgrade Go and eBPF library (#65)
---
 .github/workflows/rover.yaml                       |  4 +-
 CHANGES.md                                         |  1 +
 docker/Dockerfile.base                             |  2 +-
 docs/en/guides/compile/how-to-compile.md           |  2 +-
 go.mod                                             |  6 +--
 go.sum                                             | 17 ++-------
 pkg/config/config.go                               |  8 ++--
 pkg/config/env_override.go                         | 12 ++----
 pkg/config/env_override_test.go                    |  7 +---
 pkg/core/backend/client.go                         |  3 +-
 pkg/process/finders/kubernetes/registry.go         |  3 +-
 pkg/process/finders/scanner/finder.go              |  2 +-
 pkg/profiling/task/base/config.go                  |  5 ++-
 .../task/network/analyze/base/tcpresolver.go       |  3 +-
 .../analyze/layer7/protocols/http1/builder.go      |  4 +-
 .../analyze/layer7/protocols/http1/metrics.go      |  4 +-
 pkg/profiling/task/network/bpf/bpf.go              |  2 +-
 pkg/profiling/task/network/bpf/linker.go           | 42 ++++++++++-----------
 pkg/profiling/task/offcpu/runner.go                |  6 +--
 pkg/profiling/task/oncpu/runner.go                 |  4 +-
 pkg/tools/btf/ebpf.go                              | 43 ++++++++--------------
 pkg/tools/elf/elf.go                               |  2 +-
 scripts/build/lint.mk                              |  2 +-
 test/e2e/cases/profiling/offcpu/golang/file.go     |  2 +-
 24 files changed, 78 insertions(+), 108 deletions(-)

diff --git a/.github/workflows/rover.yaml b/.github/workflows/rover.yaml
index e43c120..ce0fdbe 100644
--- a/.github/workflows/rover.yaml
+++ b/.github/workflows/rover.yaml
@@ -25,10 +25,10 @@ jobs:
     runs-on: ubuntu-latest
     timeout-minutes: 30
     steps:
-      - name: Set up Go 1.17
+      - name: Set up Go 1.18
         uses: actions/setup-go@v2
         with:
-          go-version: 1.17
+          go-version: 1.18
       - name: Check out code into the Go module directory
         uses: actions/checkout@v2
         with:
diff --git a/CHANGES.md b/CHANGES.md
index a19d9e1..073d815 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -7,6 +7,7 @@ Release Notes.
 #### Features
 * Enhancing the render context for the Kubernetes process.
 * Simplify the logic of network protocol analysis.
+* Upgrade Go library to `1.18`, eBPF library to `0.9.3`.
 
 #### Bug Fixes
 
diff --git a/docker/Dockerfile.base b/docker/Dockerfile.base
index e2f0e3f..759c17e 100644
--- a/docker/Dockerfile.base
+++ b/docker/Dockerfile.base
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM golang:1.17
+FROM golang:1.18
 
 RUN apt update && \
     git clone --depth 1 --branch v0.8.0 https://github.com/libbpf/libbpf.git && \
diff --git a/docs/en/guides/compile/how-to-compile.md b/docs/en/guides/compile/how-to-compile.md
index f9aee78..a92c822 100644
--- a/docs/en/guides/compile/how-to-compile.md
+++ b/docs/en/guides/compile/how-to-compile.md
@@ -2,7 +2,7 @@
 
 ## Go version
 
-Go version `1.17` or higher is supported for compilation.
+Go version `1.18` or higher is supported for compilation.
 
 ## Platform
 
diff --git a/go.mod b/go.mod
index 82974a6..386e71b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,9 +1,9 @@
 module github.com/apache/skywalking-rover
 
-go 1.17
+go 1.18
 
 require (
-	github.com/cilium/ebpf v0.8.1
+	github.com/cilium/ebpf v0.9.3
 	github.com/docker/go-units v0.5.0
 	github.com/google/uuid v1.3.0
 	github.com/hashicorp/go-multierror v1.1.1
@@ -17,7 +17,7 @@ require (
 	github.com/zekroTJA/timedmap v1.4.0
 	golang.org/x/arch v0.0.0-20220722155209-00200b7164a7
 	golang.org/x/net v0.0.0-20220722155237-a158d28d115b
-	golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
+	golang.org/x/sys v0.3.0
 	google.golang.org/grpc v1.44.0
 	k8s.io/api v0.23.5
 	k8s.io/apimachinery v0.23.5
diff --git a/go.sum b/go.sum
index 5d1bff8..05c1c9b 100644
--- a/go.sum
+++ b/go.sum
@@ -83,8 +83,8 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/cilium/ebpf v0.8.1 h1:bLSSEbBLqGPXxls55pGr5qWZaTqcmfDJHhou7t254ao=
-github.com/cilium/ebpf v0.8.1/go.mod h1:f5zLIM0FSNuAkSyLAN7X+Hy6yznlF1mNiWUMfxMtrgk=
+github.com/cilium/ebpf v0.9.3 h1:5KtxXZU+scyERvkJMEm16TbScVvuuMrlhPly78ZMbSc=
+github.com/cilium/ebpf v0.9.3/go.mod h1:w27N4UjpaQ9X/DGrSugxUG+H+NhgntDuPb5lCzxCn8A=
 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
 github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -128,7 +128,6 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss=
-github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
@@ -243,7 +242,6 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
-github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0=
 github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
 github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -302,7 +300,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
-github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
 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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -388,11 +385,9 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig=
-github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
 github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
@@ -650,16 +645,15 @@ golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
@@ -771,7 +765,6 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr
 google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU=
 google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
 google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
-google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
 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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -872,7 +865,6 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
 google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
@@ -942,7 +934,6 @@ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
 k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE=
 k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
 sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s=
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 65d0205..3514f9a 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -19,7 +19,7 @@ package config
 
 import (
 	"bytes"
-	"io/ioutil"
+	"os"
 	"path/filepath"
 
 	"github.com/spf13/viper"
@@ -35,7 +35,7 @@ func Load(file string) (*Config, error) {
 	if err != nil {
 		return nil, err
 	}
-	content, err := ioutil.ReadFile(absolutePath)
+	content, err := os.ReadFile(absolutePath)
 	if err != nil {
 		return nil, err
 	}
@@ -46,9 +46,7 @@ func Load(file string) (*Config, error) {
 	}
 
 	// env replace
-	if err := overrideEnv(v); err != nil {
-		return nil, err
-	}
+	overrideEnv(v)
 
 	return &Config{conf: v}, nil
 }
diff --git a/pkg/config/env_override.go b/pkg/config/env_override.go
index be8a925..e64b973 100644
--- a/pkg/config/env_override.go
+++ b/pkg/config/env_override.go
@@ -24,19 +24,13 @@ import (
 	"github.com/spf13/viper"
 )
 
-const EnvRegularExpression = "\\${(?P<ENV>[_A-Z0-9]+):(?P<DEF>.*)}"
-
-func overrideEnv(v *viper.Viper) error {
-	envRegex, err := regexp.Compile(EnvRegularExpression)
-	if err != nil {
-		return err
-	}
+var EnvRegularRegex = regexp.MustCompile(`\${(?P<ENV>[_A-Z0-9]+):(?P<DEF>.*)}`)
 
+func overrideEnv(v *viper.Viper) {
 	keys := v.AllKeys()
 	for _, key := range keys {
-		overrideConfig(v, key, envRegex)
+		overrideConfig(v, key, EnvRegularRegex)
 	}
-	return nil
 }
 
 func overrideConfig(v *viper.Viper, key string, envRegex *regexp.Regexp) {
diff --git a/pkg/config/env_override_test.go b/pkg/config/env_override_test.go
index df8a79d..cedc256 100644
--- a/pkg/config/env_override_test.go
+++ b/pkg/config/env_override_test.go
@@ -19,7 +19,6 @@ package config
 
 import (
 	"bytes"
-	"io/ioutil"
 	"os"
 	"reflect"
 	"testing"
@@ -93,7 +92,7 @@ func TestOverrideEnv(t *testing.T) {
 			// load config
 			v := viper.New()
 			v.SetConfigType("yaml")
-			content, err := ioutil.ReadFile(tt.file)
+			content, err := os.ReadFile(tt.file)
 			if err != nil {
 				t.Fatalf("read config file error: %v", err)
 			}
@@ -102,9 +101,7 @@ func TestOverrideEnv(t *testing.T) {
 			}
 
 			// environment override
-			if err := overrideEnv(v); err != nil {
-				t.Fatalf("override environment failure: %v", err)
-			}
+			overrideEnv(v)
 
 			// verify result
 			realSettings := v.AllSettings()
diff --git a/pkg/core/backend/client.go b/pkg/core/backend/client.go
index 2890413..993071b 100644
--- a/pkg/core/backend/client.go
+++ b/pkg/core/backend/client.go
@@ -22,7 +22,6 @@ import (
 	"crypto/tls"
 	"crypto/x509"
 	"fmt"
-	"io/ioutil"
 	"os"
 
 	"google.golang.org/grpc"
@@ -123,7 +122,7 @@ func configTLS(conf *Config) (tc *tls.Config, tlsErr error) {
 	tlsConfig := new(tls.Config)
 	tlsConfig.Renegotiation = tls.RenegotiateNever
 	tlsConfig.InsecureSkipVerify = conf.InsecureSkipVerify
-	caPem, err := ioutil.ReadFile(conf.CaPemPath)
+	caPem, err := os.ReadFile(conf.CaPemPath)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/process/finders/kubernetes/registry.go b/pkg/process/finders/kubernetes/registry.go
index eaaa0f0..52169aa 100644
--- a/pkg/process/finders/kubernetes/registry.go
+++ b/pkg/process/finders/kubernetes/registry.go
@@ -18,7 +18,6 @@
 package kubernetes
 
 import (
-	"strings"
 	"time"
 
 	"k8s.io/apimachinery/pkg/labels"
@@ -128,7 +127,7 @@ func chooseServiceName(a, b string) string {
 		return b
 	}
 	// ascii compare
-	if strings.Compare(a, b) < 0 {
+	if a < b {
 		return a
 	}
 	return b
diff --git a/pkg/process/finders/scanner/finder.go b/pkg/process/finders/scanner/finder.go
index 758171c..81648d0 100644
--- a/pkg/process/finders/scanner/finder.go
+++ b/pkg/process/finders/scanner/finder.go
@@ -234,7 +234,7 @@ func (p *ProcessFinder) agentFindProcesses() ([]base.DetectedProcess, error) {
 
 		// modify time + recent > now
 		// means the metadata file is acceptable
-		if !metadataFile.ModTime().Add(p.conf.Agent.ProcessStatusRefreshPeriodDuration).After(time.Now()) {
+		if metadataFile.ModTime().Add(p.conf.Agent.ProcessStatusRefreshPeriodDuration).Before(time.Now()) {
 			continue
 		}
 
diff --git a/pkg/profiling/task/base/config.go b/pkg/profiling/task/base/config.go
index 2b89e0d..e8c83a4 100644
--- a/pkg/profiling/task/base/config.go
+++ b/pkg/profiling/task/base/config.go
@@ -18,6 +18,7 @@
 package base
 
 import (
+	"errors"
 	"fmt"
 	"time"
 
@@ -89,7 +90,7 @@ func (c *TaskConfig) stringNotEmpty(err error, value, message string) error {
 		return err
 	}
 	if value == "" {
-		return fmt.Errorf(message)
+		return errors.New(message)
 	}
 	return nil
 }
@@ -99,7 +100,7 @@ func (c *TaskConfig) biggerThan(err error, value, needs int, message string) err
 		return err
 	}
 	if value <= needs {
-		return fmt.Errorf(message)
+		return errors.New(message)
 	}
 	return nil
 }
diff --git a/pkg/profiling/task/network/analyze/base/tcpresolver.go b/pkg/profiling/task/network/analyze/base/tcpresolver.go
index dc27cd8..2af0e6e 100644
--- a/pkg/profiling/task/network/analyze/base/tcpresolver.go
+++ b/pkg/profiling/task/network/analyze/base/tcpresolver.go
@@ -20,7 +20,6 @@ package base
 import (
 	"encoding/binary"
 	"fmt"
-	"io/ioutil"
 	"net"
 	"os"
 	"regexp"
@@ -66,7 +65,7 @@ func foundAddressByFile(s *SocketPair, exitedError error, filename, inode string
 	if s != nil {
 		return s, nil
 	}
-	data, err := ioutil.ReadFile(filename)
+	data, err := os.ReadFile(filename)
 	if err != nil {
 		return nil, multierror.Append(exitedError, err)
 	}
diff --git a/pkg/profiling/task/network/analyze/layer7/protocols/http1/builder.go b/pkg/profiling/task/network/analyze/layer7/protocols/http1/builder.go
index 733919b..a55ae5f 100644
--- a/pkg/profiling/task/network/analyze/layer7/protocols/http1/builder.go
+++ b/pkg/profiling/task/network/analyze/layer7/protocols/http1/builder.go
@@ -81,7 +81,7 @@ func (h *BufferAnalyzer) handleUnknown(event *list.List, element *list.Element,
 	if curEvent.MsgType != base.SocketMessageTypeUnknown {
 		return false, nil, nil
 	}
-	if h.unknownEventBuffer == nil {
+	if h.unknownEventBuffer == base2.SocketDataBuffer(nil) {
 		// maybe the unknown type is response, so clean the context
 		if !curEvent.IsStart() {
 			h.cleanContext()
@@ -206,7 +206,7 @@ func (h *BufferAnalyzer) resetStartResponse(element *list.Element, curEvent *bas
 }
 
 func (h *BufferAnalyzer) tryingToAnalyzeTheUnknown(events *list.List, curEvent *base2.SocketDataUploadEvent) (req, resp base2.SocketDataBuffer) {
-	if h.unknownEventBuffer == nil {
+	if h.unknownEventBuffer == base2.SocketDataBuffer(nil) {
 		return nil, nil
 	}
 	// length not enough
diff --git a/pkg/profiling/task/network/analyze/layer7/protocols/http1/metrics.go b/pkg/profiling/task/network/analyze/layer7/protocols/http1/metrics.go
index 334dcea..5756206 100644
--- a/pkg/profiling/task/network/analyze/layer7/protocols/http1/metrics.go
+++ b/pkg/profiling/task/network/analyze/layer7/protocols/http1/metrics.go
@@ -119,7 +119,9 @@ func (u *URIMetrics) appendMetrics(traffic *base.ProcessTraffic,
 
 	collections = u.buildMetrics(collections, prefix, "request_counter", labels, url, traffic, u.RequestCounter)
 	for status, counter := range u.StatusCounter {
-		statusLabels := append(labels, &v3.Label{Name: "code", Value: fmt.Sprintf("%d", status)})
+		statusLabels := make([]*v3.Label, len(labels))
+		copy(statusLabels, labels)
+		statusLabels = append(statusLabels, &v3.Label{Name: "code", Value: fmt.Sprintf("%d", status)})
 		collections = u.buildMetrics(collections, prefix, "response_status_counter", statusLabels, url, traffic, counter)
 	}
 
diff --git a/pkg/profiling/task/network/bpf/bpf.go b/pkg/profiling/task/network/bpf/bpf.go
index 2181f09..4544176 100644
--- a/pkg/profiling/task/network/bpf/bpf.go
+++ b/pkg/profiling/task/network/bpf/bpf.go
@@ -25,7 +25,7 @@ import (
 
 // $BPF_CLANG and $BPF_CFLAGS are set by the Makefile.
 // nolint
-//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/network/netmonitor.c -- -I$REPO_ROOT/bpf/include -D__TARGET_ARCH_x86
+//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -no-global-types -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/network/netmonitor.c -- -I$REPO_ROOT/bpf/include -D__TARGET_ARCH_x86
 
 type Loader struct {
 	*Linker
diff --git a/pkg/profiling/task/network/bpf/linker.go b/pkg/profiling/task/network/bpf/linker.go
index e406fdf..b1969a9 100644
--- a/pkg/profiling/task/network/bpf/linker.go
+++ b/pkg/profiling/task/network/bpf/linker.go
@@ -43,7 +43,7 @@ var log = logger.GetLogger("profiling", "task", "network", "bpf")
 
 const defaultSymbolPrefix = "sys_"
 
-type LinkFunc func(symbol string, prog *ebpf.Program) (link.Link, error)
+type LinkFunc func(symbol string, prog *ebpf.Program, opts *link.KprobeOptions) (link.Link, error)
 type RingBufferReader func(data interface{})
 
 var syscallPrefix string
@@ -103,7 +103,7 @@ func (m *Linker) AddLink(linkF LinkFunc, p *ebpf.Program, trySymbolNames ...stri
 	var err error
 	var realSym string
 	for _, n := range trySymbolNames {
-		lk, err = linkF(n, p)
+		lk, err = linkF(n, p, nil)
 		if err == nil {
 			realSym = n
 			break
@@ -123,7 +123,7 @@ func (m *Linker) AddSysCall(call string, enter, exit *ebpf.Program) {
 }
 
 func (m *Linker) AddSysCallWithKProbe(call string, linkK LinkFunc, p *ebpf.Program) {
-	kprobe, err := linkK(syscallPrefix+call, p)
+	kprobe, err := linkK(syscallPrefix+call, p, nil)
 
 	if err != nil {
 		m.errors = multierror.Append(m.errors, fmt.Errorf("could not attach syscall with %s: %v", "sys_"+call, err))
@@ -134,7 +134,7 @@ func (m *Linker) AddSysCallWithKProbe(call string, linkK LinkFunc, p *ebpf.Progr
 }
 
 func (m *Linker) AddTracePoint(sys, name string, p *ebpf.Program) {
-	l, e := link.Tracepoint(sys, name, p)
+	l, e := link.Tracepoint(sys, name, p, nil)
 	if e != nil {
 		m.errors = multierror.Append(m.errors, fmt.Errorf("open %s error: %v", name, e))
 	} else {
@@ -229,9 +229,9 @@ func (u *UProbeExeFile) AddLinkWithType(symbol string, enter bool, p *ebpf.Progr
 	}
 }
 
-func (u *UProbeExeFile) addLinkWithType0(symbol string, enter bool, p *ebpf.Program, customizeOffset uint64) (link.Link, error) {
+func (u *UProbeExeFile) addLinkWithType0(symbol string, enter bool, p *ebpf.Program, customizeAddress uint64) (link.Link, error) {
 	// check already linked
-	uprobeIdentity := fmt.Sprintf("%s_%s_%t_%d", u.addr, symbol, enter, customizeOffset)
+	uprobeIdentity := fmt.Sprintf("%s_%s_%t_%d", u.addr, symbol, enter, customizeAddress)
 	if u.linker.linkedUProbes[uprobeIdentity] {
 		log.Debugf("the uprobe already attached, so ignored. file: %s, symbol: %s, type: %s", u.addr, symbol,
 			u.parseEnterOrExitString(enter))
@@ -247,9 +247,9 @@ func (u *UProbeExeFile) addLinkWithType0(symbol string, enter bool, p *ebpf.Prog
 	}
 
 	var opts *link.UprobeOptions
-	if customizeOffset > 0 {
+	if customizeAddress > 0 {
 		opts = &link.UprobeOptions{
-			Offset: customizeOffset,
+			Address: customizeAddress,
 		}
 	}
 	return fun(symbol, p, opts)
@@ -287,16 +287,16 @@ func (u *UProbeExeFile) addGoExitLink0(symbol string, p *ebpf.Program, elfFile *
 		return nil, fmt.Errorf("reading symbol data error: %v", err)
 	}
 
-	// find the base offset
-	targetBaseOffset := elfFile.FindBaseOffsetForAttach(targetSymbol.Location)
-	if targetBaseOffset == 0 {
-		return nil, fmt.Errorf("could not found the symbol base address")
+	// find the base addresses
+	targetBaseAddress := elfFile.FindBaseAddressForAttach(targetSymbol.Location)
+	if targetBaseAddress == 0 {
+		return nil, fmt.Errorf("could not found the symbol base addresses")
 	}
 
-	// based on the base offset and symbol data buffer
+	// based on the base addresses and symbol data buffer
 	// calculate all RET addresses
 	// https://github.com/iovisor/bcc/issues/1320#issuecomment-407927542
-	var offsets []uint64
+	var addresses []uint64
 	for i := 0; i < int(targetSymbol.Size); {
 		inst, err := x86asm.Decode(buffer[i:], 64)
 		if err != nil {
@@ -304,25 +304,25 @@ func (u *UProbeExeFile) addGoExitLink0(symbol string, p *ebpf.Program, elfFile *
 		}
 
 		if inst.Op == x86asm.RET {
-			offsets = append(offsets, targetBaseOffset+uint64(i))
+			addresses = append(addresses, targetBaseAddress+uint64(i))
 		}
 
 		i += inst.Len
 	}
 
-	if len(offsets) == 0 {
-		return nil, fmt.Errorf("could not found any return offsets")
+	if len(addresses) == 0 {
+		return nil, fmt.Errorf("could not found any return addresses")
 	}
-	log.Debugf("found reuturn offsets of the symbol, symbol: %s, size: %d", symbol, len(offsets))
+	log.Debugf("found reuturn addresses of the symbol, symbol: %s, size: %d", symbol, len(addresses))
 
 	var result []link.Link
-	for _, offset := range offsets {
-		l, err := u.addLinkWithType0(symbol, true, p, offset)
+	for _, address := range addresses {
+		l, err := u.addLinkWithType0(symbol, true, p, address)
 		if err != nil {
 			return nil, err
 		}
 		result = append(result, l)
-		log.Debugf("attach to the return probe of the go program, symbol: %s, offset: %d", symbol, offset)
+		log.Debugf("attach to the return probe of the go program, symbol: %s, addresses: %d", symbol, address)
 	}
 	return result, nil
 }
diff --git a/pkg/profiling/task/offcpu/runner.go b/pkg/profiling/task/offcpu/runner.go
index 938b579..85a8f9b 100644
--- a/pkg/profiling/task/offcpu/runner.go
+++ b/pkg/profiling/task/offcpu/runner.go
@@ -41,7 +41,7 @@ import (
 
 // $BPF_CLANG and $BPF_CFLAGS are set by the Makefile.
 // nolint
-//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/offcpu.c -- -I$REPO_ROOT/bpf/include -D__TARGET_ARCH_x86
+//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -no-global-types -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/offcpu.c -- -I$REPO_ROOT/bpf/include -D__TARGET_ARCH_x86
 
 var log = logger.GetLogger("profiling", "task", "offcpu")
 
@@ -102,7 +102,7 @@ func (r *Runner) Run(ctx context.Context, notify base.ProfilingRunningSuccessNot
 	funcName := "do_finish_task_switch"
 	replacedPid := false
 	for i, ins := range spec.Programs[funcName].Instructions {
-		if ins.Reference == "MONITOR_PID" {
+		if ins.Reference() == "MONITOR_PID" {
 			spec.Programs[funcName].Instructions[i].Constant = int64(r.pid)
 			spec.Programs[funcName].Instructions[i].Offset = 0
 			replacedPid = true
@@ -116,7 +116,7 @@ func (r *Runner) Run(ctx context.Context, notify base.ProfilingRunningSuccessNot
 	}
 	r.bpf = &objs
 
-	kprobe, err := link.Kprobe("finish_task_switch", objs.DoFinishTaskSwitch)
+	kprobe, err := link.Kprobe("finish_task_switch", objs.DoFinishTaskSwitch, nil)
 	if err != nil {
 		return fmt.Errorf("link to finish task swtich failure: %v", err)
 	}
diff --git a/pkg/profiling/task/oncpu/runner.go b/pkg/profiling/task/oncpu/runner.go
index 8ada923..d55ea1c 100644
--- a/pkg/profiling/task/oncpu/runner.go
+++ b/pkg/profiling/task/oncpu/runner.go
@@ -41,7 +41,7 @@ import (
 
 // $BPF_CLANG and $BPF_CFLAGS are set by the Makefile.
 // nolint
-//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/oncpu.c -- -I$REPO_ROOT/bpf/include
+//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -no-global-types -target bpfel -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf $REPO_ROOT/bpf/profiling/oncpu.c -- -I$REPO_ROOT/bpf/include
 
 var log = logger.GetLogger("profiling", "task", "oncpu")
 
@@ -114,7 +114,7 @@ func (r *Runner) Run(ctx context.Context, notify base.ProfilingRunningSuccessNot
 	funcName := "do_perf_event"
 	replacedPid := false
 	for i, ins := range spec.Programs[funcName].Instructions {
-		if ins.Reference == "MONITOR_PID" {
+		if ins.Reference() == "MONITOR_PID" {
 			spec.Programs[funcName].Instructions[i].Constant = int64(r.pid)
 			spec.Programs[funcName].Instructions[i].Offset = 0
 			replacedPid = true
diff --git a/pkg/tools/btf/ebpf.go b/pkg/tools/btf/ebpf.go
index f44e7d6..16c3d39 100644
--- a/pkg/tools/btf/ebpf.go
+++ b/pkg/tools/btf/ebpf.go
@@ -18,12 +18,13 @@
 package btf
 
 import (
-	"bytes"
 	"embed"
 	"fmt"
 	"path/filepath"
 	"sync"
 
+	"github.com/cilium/ebpf/btf"
+
 	"github.com/apache/skywalking-rover/pkg/logger"
 	"github.com/apache/skywalking-rover/pkg/tools/operator"
 
@@ -34,61 +35,49 @@ import (
 var assets embed.FS
 
 var (
-	customizedBTFData []byte
-	findBTFOnce       sync.Once
+	spec        *btf.Spec
+	findBTFOnce sync.Once
 
 	log = logger.GetLogger("tools", "btf")
 )
 
 func GetEBPFCollectionOptionsIfNeed() *ebpf.CollectionOptions {
 	findBTFOnce.Do(func() {
-		btfPath, isCustomizedBTF, err := getKernelBTFAddress()
+		readSpec, err := getKernelBTFAddress()
 		if err != nil {
 			log.Warnf("found BTF failure: %v", err)
 			return
 		}
 
-		if !isCustomizedBTF {
-			return
-		}
-		d, err := asset(btfPath)
-		if err != nil {
-			log.Warnf("could not found the customized BTF file: %s", btfPath)
-			return
-		}
-		customizedBTFData = d
+		spec = readSpec
 	})
 
-	if customizedBTFData == nil {
-		return nil
-	}
-
-	return &ebpf.CollectionOptions{Programs: ebpf.ProgramOptions{TargetBTF: bytes.NewReader(customizedBTFData)}}
+	return &ebpf.CollectionOptions{Programs: ebpf.ProgramOptions{KernelTypes: spec}}
 }
 
 // getKernelBTFAddress means get the kernel BTF file path
-func getKernelBTFAddress() (btfPath string, isCustomizedBTF bool, err error) {
-	path, err := ExistKernelBTF()
+func getKernelBTFAddress() (spec *btf.Spec, err error) {
+	spec, err = btf.LoadKernelSpec()
 	if err == nil {
-		return path, false, nil
+		return spec, nil
 	}
 
 	distributeInfo, err := operator.GetDistributionInfo()
 	if err != nil {
-		return "", false, fmt.Errorf("could not load the system distribute info: %v", err)
+		return nil, fmt.Errorf("could not load the system distribute info: %v", err)
 	}
 	uname, err := operator.GetOSUname()
 	if err != nil {
-		return "", false, fmt.Errorf("could not load the uname info: %v", err)
+		return nil, fmt.Errorf("could not load the uname info: %v", err)
 	}
 
-	btfPath = fmt.Sprintf("files/%s/%s/%s/%s.btf", distributeInfo.Name, distributeInfo.Version,
+	path := fmt.Sprintf("files/%s/%s/%s/%s.btf", distributeInfo.Name, distributeInfo.Version,
 		distributeInfo.Architecture, uname.Release)
-	_, err = asset(btfPath)
+	_, err = asset(path)
 	if err != nil {
-		return "", true, fmt.Errorf("could not found customized BTF file: %s", btfPath)
+		return nil, fmt.Errorf("could not found customized BTF file: %s", path)
 	}
-	return btfPath, true, nil
+	return spec, nil
 }
 
 func asset(file string) ([]byte, error) {
diff --git a/pkg/tools/elf/elf.go b/pkg/tools/elf/elf.go
index 57ece5d..b6fd466 100644
--- a/pkg/tools/elf/elf.go
+++ b/pkg/tools/elf/elf.go
@@ -93,7 +93,7 @@ func (f *File) ReadSymbolData(section string, offset, size uint64) ([]byte, erro
 	return buffer, nil
 }
 
-func (f *File) FindBaseOffsetForAttach(symbolLocation uint64) uint64 {
+func (f *File) FindBaseAddressForAttach(symbolLocation uint64) uint64 {
 	for _, prog := range f.realFile.Progs {
 		if prog.Type != elf.PT_LOAD || (prog.Flags&elf.PF_X) == 0 {
 			continue
diff --git a/scripts/build/lint.mk b/scripts/build/lint.mk
index 12f2324..0f65588 100644
--- a/scripts/build/lint.mk
+++ b/scripts/build/lint.mk
@@ -19,7 +19,7 @@
 GO_LINT = $(GO_PATH)/bin/golangci-lint
 
 linter:
-	$(GO_LINT) version || curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GO_PATH)/bin v1.39.0
+	$(GO_LINT) version || curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GO_PATH)/bin v1.50.0
 
 .PHONY: lint
 lint: linter generate
diff --git a/test/e2e/cases/profiling/offcpu/golang/file.go b/test/e2e/cases/profiling/offcpu/golang/file.go
index 128f183..f7255b1 100644
--- a/test/e2e/cases/profiling/offcpu/golang/file.go
+++ b/test/e2e/cases/profiling/offcpu/golang/file.go
@@ -24,7 +24,7 @@ import (
 func main() {
 	d1 := []byte("e2e-test")
 	for {
-		err := os.WriteFile("/tmp/skywalking-rover-e2e-test", d1, 0600)
+		err := os.WriteFile("/tmp/skywalking-rover-e2e-test", d1, 0o600)
 		if err != nil {
 			fmt.Printf("error: %v", err)
 			break