From 8673fd085aad1861d96f7e0ddb6e913e29914021 Mon Sep 17 00:00:00 2001 From: Brennan Vincent Date: Fri, 25 Oct 2024 11:32:46 -0400 Subject: [PATCH 1/4] Update to latest version of our otel library fork. This entails a refactor of how we get kernel frames -- these are now just communicated via FrameMetadata, the same was as normal frames. --- flags/flags.go | 6 +- flags/grpc.go | 2 +- go.mod | 38 +++---- go.sum | 85 ++++++++------- main.go | 17 ++- metrics/all.go | 2 +- reporter/arrow.go | 8 ++ reporter/elfwriter/extract.go | 2 +- reporter/metadata/agent.go | 2 +- reporter/metadata/containermetadata.go | 4 +- reporter/metadata/process.go | 2 +- reporter/metadata/system.go | 2 +- reporter/parca_reporter.go | 141 ++++++++++++++----------- reporter/parca_uploader.go | 4 +- reporter/parca_uploader_test.go | 2 +- 15 files changed, 176 insertions(+), 141 deletions(-) diff --git a/flags/flags.go b/flags/flags.go index 94bf2a4b3a..b4155cf435 100644 --- a/flags/flags.go +++ b/flags/flags.go @@ -22,8 +22,7 @@ import ( "time" "github.com/alecthomas/kong" - cebpf "github.com/cilium/ebpf" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/tracer" + "go.opentelemetry.io/ebpf-profiler/tracer" log "github.com/sirupsen/logrus" _ "google.golang.org/grpc/encoding/proto" ) @@ -67,7 +66,6 @@ func Parse() (Flags, error) { "default_cpu_sampling_frequency": strconv.Itoa(defaultCPUSamplingFrequency), "default_map_scale_factor": strconv.Itoa(defaultMapScaleFactor), "max_map_scale_factor": strconv.Itoa(maxMapScaleFactor), - "default_bpf_log_size": strconv.Itoa(cebpf.DefaultVerifierLogSize), "default_memlock_rlimit": "0", // No limit by default. (flag is deprecated) }) @@ -343,5 +341,5 @@ type FlagsBPF struct { EventsBufferSize uint32 `default:"8192" help:"Size in pages of the events buffer."` MapScaleFactor int `default:"${default_map_scale_factor}" help:"Scaling factor for eBPF map sizes. Every increase by 1 doubles the map size. Increase if you see eBPF map size errors. Default is ${default_map_scale_factor} corresponding to 4GB of executable address space, max is ${max_map_scale_factor}."` VerifierLogLevel uint32 `default:"0" help:"Log level of the eBPF verifier output (0,1,2). Default is 0."` - VerifierLogSize int `default:"${default_bpf_log_size}" help:"Maximum size of the eBPF verifier log."` + VerifierLogSize int `default:"0" help:"[deprecated] Unused."` } diff --git a/flags/grpc.go b/flags/grpc.go index b9232b8c0f..f28be5760c 100644 --- a/flags/grpc.go +++ b/flags/grpc.go @@ -12,7 +12,7 @@ import ( "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/retry" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/timeout" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf" "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" tracing "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" diff --git a/go.mod b/go.mod index e6b63a28b1..a2c81fa626 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/alecthomas/kong v0.9.0 github.com/apache/arrow/go/v16 v16.1.0 github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 - github.com/cilium/ebpf v0.15.0 + github.com/cilium/ebpf v0.16.0 github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be github.com/containerd/containerd v1.7.20 github.com/docker/docker v26.1.5+incompatible @@ -22,7 +22,6 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 github.com/klauspost/compress v1.17.9 - github.com/open-telemetry/opentelemetry-ebpf-profiler v0.0.0-20240730064712-a0b8ba402a37 github.com/prometheus/client_golang v1.19.1 github.com/prometheus/common v0.54.0 github.com/prometheus/prometheus v0.53.1 @@ -35,17 +34,18 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.53.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 - go.opentelemetry.io/otel v1.28.0 + go.opentelemetry.io/ebpf-profiler v0.0.0-20241025131851-7fa5b1e60d38 + go.opentelemetry.io/otel v1.30.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 - go.opentelemetry.io/otel/trace v1.28.0 - golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.21.0 - google.golang.org/grpc v1.64.1 + go.opentelemetry.io/otel/trace v1.30.0 + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.26.0 + google.golang.org/grpc v1.66.2 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.29.3 @@ -79,7 +79,7 @@ require ( github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/elastic/go-perf v0.0.0-20191212140718-9c656876f595 // indirect + github.com/elastic/go-perf v0.0.0-20241016160959-1342461adb4a // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -125,20 +125,20 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/arch v0.8.0 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/arch v0.10.0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.29.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/term v0.24.0 // indirect + golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/tools v0.25.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect k8s.io/klog/v2 v2.120.1 // indirect @@ -149,4 +149,4 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -replace github.com/open-telemetry/opentelemetry-ebpf-profiler => github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241009170523-4d0512c029e0 +replace go.opentelemetry.io/ebpf-profiler => ../opentelemetry-ebpf-profiler diff --git a/go.sum b/go.sum index 372644de9a..3c036e3ab2 100644 --- a/go.sum +++ b/go.sum @@ -8,7 +8,7 @@ buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.34.2-20240704212942 buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.34.2-20240704212942-bbf0a43bf797.2/go.mod h1:s+wpzyrPSJ1p92PIdE/zbMaGXaSUhuJdtG1M4w93qvY= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= +cloud.google.com/go/compute v1.23.4 h1:EBT9Nw4q3zyE7G45Wvv3MzolIrCJEuHys5muLY0wvAw= cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= @@ -41,12 +41,12 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 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/cilium/ebpf v0.15.0 h1:7NxJhNiBT3NG8pZJ3c+yfrVdHY8ScgKD27sScgjLMMk= -github.com/cilium/ebpf v0.15.0/go.mod h1:DHp1WyrLeiBh19Cf/tfiSMhqheEiK8fXFZ4No0P1Hso= +github.com/cilium/ebpf v0.16.0 h1:+BiEnHL6Z7lXnlGUsXQPPAE7+kenAd4ES8MQ5min0Ok= +github.com/cilium/ebpf v0.16.0/go.mod h1:L7u2Blt2jMM/vLAVgjxluxtBKlz3/GWjB0dMOEngfwE= 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/xds/go v0.0.0-20240318125728-8a4994d93e50 h1:DBmgJDC9dTfkVyGgipamEh2BpGYxScCH1TOF1LL1cXc= -github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -89,8 +89,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/elastic/go-freelru v0.13.0 h1:TKKY6yCfNNNky7Pj9xZAOEpBcdNgZJfihEftOb55omg= github.com/elastic/go-freelru v0.13.0/go.mod h1:bSdWT4M0lW79K8QbX6XY2heQYSCqD7THoYf82pT/H3I= -github.com/elastic/go-perf v0.0.0-20191212140718-9c656876f595 h1:q8n4QjcLa4q39Q3fqHRknTBXBtegjriHFrB42YKgXGI= -github.com/elastic/go-perf v0.0.0-20191212140718-9c656876f595/go.mod h1:s09U1b4P1ZxnKx2OsqY7KlHdCesqZWIhyq0Gs/QC/Us= +github.com/elastic/go-perf v0.0.0-20241016160959-1342461adb4a h1:ymmtaN4bVCmKKeu4XEf6JEWNZKRXPMng1zjpKd+8rCU= +github.com/elastic/go-perf v0.0.0-20241016160959-1342461adb4a/go.mod h1:Nt+pnRYvf0POC+7pXsrv8ubsEOSsaipJP0zlz1Ms1RM= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -180,8 +180,13 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90= +github.com/jsimonetti/rtnetlink/v2 v2.0.1 h1:xda7qaHDSVOsADNouv7ukSuicKZO7GgVUCXxpaIEIlM= +github.com/jsimonetti/rtnetlink/v2 v2.0.1/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -196,6 +201,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= +github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= @@ -235,8 +244,6 @@ github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bl github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= -github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241009170523-4d0512c029e0 h1:nNtSS2l4YMq7dc9kwrqVZk4T381txe4ZwiiFuPonDDI= -github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241009170523-4d0512c029e0/go.mod h1:GQVu1MAtVCPc3mW4Atj8YVUEPdXoC/vo/kp0lNpQZhw= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= @@ -293,8 +300,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0. go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.53.0/go.mod h1:ImRBLMJv177/pwiLZ7tU7HDGNdBv7rS0HQ99eN/zBl8= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= @@ -303,33 +310,33 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bEkIYOVMw4q1WJxIAGoFTrtYOzWuRQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 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/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= -golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= +golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= 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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= 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.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= @@ -339,8 +346,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -349,8 +356,8 @@ 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/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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= @@ -360,14 +367,14 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= 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.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -378,8 +385,8 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= 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= @@ -395,17 +402,17 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= +google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 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.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= +google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= 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= diff --git a/main.go b/main.go index 3943481457..592ba08084 100644 --- a/main.go +++ b/main.go @@ -23,14 +23,14 @@ import ( "github.com/apache/arrow/go/v16/arrow/memory" "github.com/armon/circbuf" "github.com/common-nighthawk/go-figure" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/host" - otelmetrics "github.com/open-telemetry/opentelemetry-ebpf-profiler/metrics" - otelreporter "github.com/open-telemetry/opentelemetry-ebpf-profiler/reporter" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/times" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/tracehandler" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/tracer" - tracertypes "github.com/open-telemetry/opentelemetry-ebpf-profiler/tracer/types" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/util" + "go.opentelemetry.io/ebpf-profiler/host" + otelmetrics "go.opentelemetry.io/ebpf-profiler/metrics" + otelreporter "go.opentelemetry.io/ebpf-profiler/reporter" + "go.opentelemetry.io/ebpf-profiler/times" + "go.opentelemetry.io/ebpf-profiler/tracehandler" + "go.opentelemetry.io/ebpf-profiler/tracer" + tracertypes "go.opentelemetry.io/ebpf-profiler/tracer/types" + "go.opentelemetry.io/ebpf-profiler/util" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/promauto" @@ -330,7 +330,6 @@ func mainWithExitCode() flags.ExitCode { FilterErrorFrames: !f.Profiling.EnableErrorFrames, KernelVersionCheck: !f.Hidden.IgnoreUnsafeKernelVersion, BPFVerifierLogLevel: f.BPF.VerifierLogLevel, - BPFVerifierLogSize: f.BPF.VerifierLogSize, ProbabilisticInterval: f.Profiling.ProbabilisticInterval, ProbabilisticThreshold: f.Profiling.ProbabilisticThreshold, CollectCustomLabels: f.CollectCustomLabels, diff --git a/metrics/all.go b/metrics/all.go index 40db1d66c3..0f44905691 100644 --- a/metrics/all.go +++ b/metrics/all.go @@ -5,7 +5,7 @@ package metrics import ( - otelmetrics "github.com/open-telemetry/opentelemetry-ebpf-profiler/metrics" + otelmetrics "go.opentelemetry.io/ebpf-profiler/metrics" ) const ( diff --git a/reporter/arrow.go b/reporter/arrow.go index 8a9a1bd1ae..490ad66e93 100644 --- a/reporter/arrow.go +++ b/reporter/arrow.go @@ -36,6 +36,14 @@ func (b *BinaryDictionaryRunEndBuilder) NewArray() arrow.Array { return b.ree.NewArray() } +func (b *BinaryDictionaryRunEndBuilder) Value(n int) []byte { + if b.idx.Len() > 0 && + !b.idx.IsNull(b.idx.Len()-1) { + return b.bd.Value(int(b.idx.Value(b.idx.Len() - 1))) + } + return nil +} + func (b *BinaryDictionaryRunEndBuilder) Append(v []byte) { if b.idx.Len() > 0 && !b.idx.IsNull(b.idx.Len()-1) && diff --git a/reporter/elfwriter/extract.go b/reporter/elfwriter/extract.go index 06331ab47a..d647145b7e 100644 --- a/reporter/elfwriter/extract.go +++ b/reporter/elfwriter/extract.go @@ -5,7 +5,7 @@ import ( "fmt" "os" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/process" + "go.opentelemetry.io/ebpf-profiler/process" ) func OnlyKeepDebug(dst *os.File, src process.ReadAtCloser) error { diff --git a/reporter/metadata/agent.go b/reporter/metadata/agent.go index a73f2e8da9..b0ca5224cb 100644 --- a/reporter/metadata/agent.go +++ b/reporter/metadata/agent.go @@ -1,7 +1,7 @@ package metadata import ( - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf" "github.com/prometheus/prometheus/model/labels" ) diff --git a/reporter/metadata/containermetadata.go b/reporter/metadata/containermetadata.go index 6c6dccc917..4c13c0a4fd 100644 --- a/reporter/metadata/containermetadata.go +++ b/reporter/metadata/containermetadata.go @@ -45,8 +45,8 @@ import ( "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/stringutil" + "go.opentelemetry.io/ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/stringutil" ) const ( diff --git a/reporter/metadata/process.go b/reporter/metadata/process.go index 2c77d7796e..07f5197723 100644 --- a/reporter/metadata/process.go +++ b/reporter/metadata/process.go @@ -12,7 +12,7 @@ import ( "strings" lru "github.com/elastic/go-freelru" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf" "github.com/prometheus/prometheus/model/labels" log "github.com/sirupsen/logrus" ) diff --git a/reporter/metadata/system.go b/reporter/metadata/system.go index 2cfed22049..71d93bf4d6 100644 --- a/reporter/metadata/system.go +++ b/reporter/metadata/system.go @@ -4,7 +4,7 @@ import ( "strings" "syscall" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf" "github.com/prometheus/prometheus/model/labels" ) diff --git a/reporter/parca_reporter.go b/reporter/parca_reporter.go index 52d1cd2cf6..81a19bb44f 100644 --- a/reporter/parca_reporter.go +++ b/reporter/parca_reporter.go @@ -25,12 +25,6 @@ import ( "github.com/apache/arrow/go/v16/arrow/ipc" "github.com/apache/arrow/go/v16/arrow/memory" lru "github.com/elastic/go-freelru" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf/xsync" - otelmetrics "github.com/open-telemetry/opentelemetry-ebpf-profiler/metrics" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/process" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/reporter" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/util" "github.com/parca-dev/parca-agent/metrics" "github.com/parca-dev/parca-agent/reporter/metadata" "github.com/prometheus/client_golang/prometheus" @@ -40,6 +34,10 @@ import ( log "github.com/sirupsen/logrus" "github.com/xyproto/ainur" "github.com/zeebo/xxh3" + "go.opentelemetry.io/ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf/xsync" + otelmetrics "go.opentelemetry.io/ebpf-profiler/metrics" + "go.opentelemetry.io/ebpf-profiler/reporter" ) // Assert that we implement the full Reporter interface. @@ -59,7 +57,7 @@ type labelRetrievalResult struct { // sourceInfo allows to map a frame to its source origin. type sourceInfo struct { - lineNumber util.SourceLineno + lineNumber libpf.SourceLineno functionOffset uint32 functionName string filePath string @@ -84,9 +82,6 @@ type ParcaReporter struct { // this structure holds in long-term storage information that might // be duplicated in other places but not accessible for ParcaReporter. - // fallbackSymbols keeps track of FrameID to their symbol. - fallbackSymbols *lru.SyncedLRU[libpf.FrameID, string] - // executables stores metadata for executables. executables *lru.SyncedLRU[libpf.FileID, metadata.ExecInfo] @@ -240,76 +235,81 @@ func (r *ParcaReporter) ReportFramesForTrace(_ *libpf.Trace) {} func (r *ParcaReporter) ReportCountForTrace(_ libpf.TraceHash, _ uint16, _ *reporter.TraceEventMeta) { } -// ReportFallbackSymbol enqueues a fallback symbol for reporting, for a given frame. -func (r *ParcaReporter) ReportFallbackSymbol(frameID libpf.FrameID, symbol string) { - if _, exists := r.fallbackSymbols.Peek(frameID); exists { - return - } - r.fallbackSymbols.Add(frameID, symbol) -} - // ExecutableMetadata accepts a fileID with the corresponding filename // and caches this information. -func (r *ParcaReporter) ExecutableMetadata(fileID libpf.FileID, fileName, buildID string, interpreterType libpf.InterpreterType, - open func() (process.ReadAtCloser, error)) { +func (r *ParcaReporter) ExecutableMetadata(args *reporter.ExecutableMetadataArgs) { - if interpreterType != libpf.Native { - r.executables.Add(fileID, metadata.ExecInfo{ - FileName: fileName, - BuildID: buildID, + if args.Interp != libpf.Native { + r.executables.Add(args.FileID, metadata.ExecInfo{ + FileName: args.FileName, + BuildID: args.GnuBuildID, }) return } // Always attempt to upload, the uploader is responsible for deduplication. - r.uploader.Upload(context.TODO(), fileID, buildID, open) + r.uploader.Upload(context.TODO(), args.FileID, args.GnuBuildID, args.Open) - if _, exists := r.executables.Get(fileID); exists { + if _, exists := r.executables.Get(args.FileID); exists { return } - f, err := open() + f, err := args.Open() if err != nil { - log.Debugf("Failed to open file %s: %v", fileName, err) + log.Debugf("Failed to open file %s: %v", args.FileName, err) return } defer f.Close() ef, err := elf.NewFile(f) if err != nil { - log.Debugf("Failed to open ELF file %s: %v", fileName, err) + log.Debugf("Failed to open ELF file %s: %v", args.FileName, err) return } - r.executables.Add(fileID, metadata.ExecInfo{ - FileName: fileName, - BuildID: buildID, + r.executables.Add(args.FileID, metadata.ExecInfo{ + FileName: args.FileName, + BuildID: args.GnuBuildID, Compiler: ainur.Compiler(ef), Static: ainur.Static(ef), Stripped: ainur.Stripped(ef), }) } +// FrameKnown is a no-op for ParcaReporter. +func (r *ParcaReporter) FrameKnown(id libpf.FrameID) bool { + if frameMapLock, exists := r.frames.Get(id.FileID()); exists { + l := frameMapLock.WLock() + defer frameMapLock.WUnlock(&l) + _, exists := (*l)[id.AddressOrLine()] + return exists + } + return false +} + // FrameMetadata accepts metadata associated with a frame and caches this information. -func (r *ParcaReporter) FrameMetadata(fileID libpf.FileID, addressOrLine libpf.AddressOrLineno, - lineNumber util.SourceLineno, functionOffset uint32, functionName, filePath string) { +func (r *ParcaReporter) FrameMetadata(args *reporter.FrameMetadataArgs) { + fileID := args.FrameID.FileID() + addressOrLine := args.FrameID.AddressOrLine() + sourceFile := args.SourceFile + if frameMapLock, exists := r.frames.Get(fileID); exists { frameMap := frameMapLock.WLock() defer frameMapLock.WUnlock(&frameMap) - if filePath == "" { + if sourceFile == "" { // The new filePath may be empty, and we don't want to overwrite // an existing filePath with it. if s, exists := (*frameMap)[addressOrLine]; exists { - filePath = s.filePath + sourceFile = s.filePath } } (*frameMap)[addressOrLine] = sourceInfo{ - lineNumber: lineNumber, - functionOffset: functionOffset, - functionName: functionName, - filePath: filePath, + lineNumber: args.SourceLine, + functionOffset: args.FunctionOffset, + functionName: args.FunctionName, + filePath: sourceFile, } return @@ -317,10 +317,10 @@ func (r *ParcaReporter) FrameMetadata(fileID libpf.FileID, addressOrLine libpf.A v := make(map[libpf.AddressOrLineno]sourceInfo) v[addressOrLine] = sourceInfo{ - lineNumber: lineNumber, - functionOffset: functionOffset, - functionName: functionName, - filePath: filePath, + lineNumber: args.SourceLine, + functionOffset: args.FunctionOffset, + functionName: args.FunctionName, + filePath: sourceFile, } mu := xsync.NewRWMutex(v) r.frames.Add(fileID, &mu) @@ -433,11 +433,6 @@ func New( agentRevision string, reg prometheus.Registerer, ) (*ParcaReporter, error) { - fallbackSymbols, err := lru.NewSynced[libpf.FrameID, string](cacheSize, libpf.FrameID.Hash32) - if err != nil { - return nil, err - } - executables, err := lru.NewSynced[libpf.FileID, metadata.ExecInfo](cacheSize, libpf.FileID.Hash32) if err != nil { return nil, err @@ -484,7 +479,6 @@ func New( r := &ParcaReporter{ stopSignal: make(chan libpf.Void), client: nil, - fallbackSymbols: fallbackSymbols, executables: executables, labels: labels, frames: frames, @@ -656,6 +650,9 @@ func (r *ParcaReporter) reportDataToBackend(ctx context.Context, buf *bytes.Buff } rec, err = r.buildStacktraceRecord(ctx, stacktraceIDs) + // i := rec.NumRows() + // fmt.Printf("stacktrace record has %d rows. Col3: %s\n", i, rec.Column(3).String()) + if err != nil { return err } @@ -785,26 +782,48 @@ func (r *ParcaReporter) buildStacktraceRecord(ctx context.Context, stacktraceIDs } w.Lines.Append(false) case libpf.KernelFrame: - w.MappingFile.AppendString("[kernel.kallsyms]") - w.MappingBuildID.AppendNull() - - // Reconstruct frameID - frameID := libpf.NewFrameID(traceInfo.files[i], traceInfo.linenos[i]) + f := traceInfo.files[i] + execInfo, exists := r.executables.Get(f) + var moduleName string + if exists { + moduleName = execInfo.FileName + } else { + moduleName = "vmlinux" + } - symbol, exists := r.fallbackSymbols.Get(frameID) + var symbol string + var lineNumber int64 + fileIDInfoLock, exists := r.frames.Get(f) if !exists { // TODO: choose a proper default value if the kernel symbol was not // reported yet. symbol = "UNKNOWN" isComplete = false + } else { + fileIDInfo := fileIDInfoLock.RLock() + si, exists := (*fileIDInfo)[traceInfo.linenos[i]] + if exists { + lineNumber = int64(si.lineNumber) + symbol = si.functionName + // To match historical practice, + // we put "[kernel.kallsyms]" as the mapping file, + // "vmlinux" the module name as the function filename, + // and do nothing with the actual filePath. + // + // TODO: Think about this. Should we reconsider this and actually report the file path? + // + // filePath = si.filePath + } + fileIDInfoLock.RUnlock(&fileIDInfo) } - + w.MappingBuildID.AppendNull() + w.FunctionFilename.AppendString(moduleName) w.Lines.Append(true) w.Line.Append(true) - w.LineNumber.Append(int64(0)) + w.LineNumber.Append(lineNumber) w.FunctionName.AppendString(symbol) w.FunctionSystemName.AppendString("") - w.FunctionFilename.AppendString("vmlinux") + w.MappingFile.AppendString("[kernel.kallsyms]") w.FunctionStartLine.Append(int64(0)) case libpf.AbortFrame: // Next step: Figure out how the OTLP protocol @@ -855,6 +874,10 @@ func (r *ParcaReporter) buildStacktraceRecord(ctx context.Context, stacktraceIDs } fileIDInfoLock.RUnlock(&fileIDInfo) } + // empty path causes the backend to crash + if filePath == "" { + filePath = "UNKNOWN" + } w.MappingFile.AppendString(frameKind.String()) w.MappingBuildID.AppendNull() w.Lines.Append(true) diff --git a/reporter/parca_uploader.go b/reporter/parca_uploader.go index eb6d1d116d..ba99c045b9 100644 --- a/reporter/parca_uploader.go +++ b/reporter/parca_uploader.go @@ -15,8 +15,8 @@ import ( debuginfogrpc "buf.build/gen/go/parca-dev/parca/grpc/go/parca/debuginfo/v1alpha1/debuginfov1alpha1grpc" debuginfopb "buf.build/gen/go/parca-dev/parca/protocolbuffers/go/parca/debuginfo/v1alpha1" lru "github.com/elastic/go-freelru" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/process" + "go.opentelemetry.io/ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/process" log "github.com/sirupsen/logrus" "golang.org/x/sync/errgroup" "google.golang.org/grpc/codes" diff --git a/reporter/parca_uploader_test.go b/reporter/parca_uploader_test.go index 4e4db547a8..d335f96f98 100644 --- a/reporter/parca_uploader_test.go +++ b/reporter/parca_uploader_test.go @@ -4,7 +4,7 @@ import ( "math/rand" "testing" - "github.com/open-telemetry/opentelemetry-ebpf-profiler/libpf" + "go.opentelemetry.io/ebpf-profiler/libpf" ) func TestMapShrink(t *testing.T) { From 8da4c370486f6d036b116fa1a5f566595ee4d8ec Mon Sep 17 00:00:00 2001 From: Brennan Vincent Date: Wed, 30 Oct 2024 09:47:48 -0400 Subject: [PATCH 2/4] oops, actually bump the version --- bump-fork.sh | 2 +- go.mod | 4 ++-- go.sum | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bump-fork.sh b/bump-fork.sh index 6ea46c2a78..c4b3508efa 100755 --- a/bump-fork.sh +++ b/bump-fork.sh @@ -1,3 +1,3 @@ #!/bin/sh -go mod edit -replace github.com/open-telemetry/opentelemetry-ebpf-profiler=github.com/parca-dev/opentelemetry-ebpf-profiler@latest +go mod edit -replace go.opentelemetry.io/ebpf-profiler=github.com/parca-dev/opentelemetry-ebpf-profiler@latest go mod tidy diff --git a/go.mod b/go.mod index a2c81fa626..427fd3829c 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( github.com/alecthomas/kong v0.9.0 github.com/apache/arrow/go/v16 v16.1.0 github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 - github.com/cilium/ebpf v0.16.0 github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be github.com/containerd/containerd v1.7.20 github.com/docker/docker v26.1.5+incompatible @@ -63,6 +62,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cilium/ebpf v0.16.0 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect github.com/containerd/containerd/api v1.7.19 // indirect @@ -149,4 +149,4 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -replace go.opentelemetry.io/ebpf-profiler => ../opentelemetry-ebpf-profiler +replace go.opentelemetry.io/ebpf-profiler => github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241029214924-a8bd47565719 diff --git a/go.sum b/go.sum index 3c036e3ab2..5f6fcec1da 100644 --- a/go.sum +++ b/go.sum @@ -244,6 +244,8 @@ github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bl github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= +github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241029214924-a8bd47565719 h1:I1y+8W8dzQwyHCHUTdEksGtNtcTaRb4rNCgqb8YRhQg= +github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.0-20241029214924-a8bd47565719/go.mod h1:poOphaa9n1NeidFV425KI5PzP6Ho90LEkERlJqLBEpE= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= From 6c691c59f9e99a30547ba2c9213d8001ef1972f0 Mon Sep 17 00:00:00 2001 From: umanwizard Date: Wed, 30 Oct 2024 09:58:05 -0400 Subject: [PATCH 3/4] Update reporter/arrow.go remove stray debugging code --- reporter/arrow.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/reporter/arrow.go b/reporter/arrow.go index 490ad66e93..8a9a1bd1ae 100644 --- a/reporter/arrow.go +++ b/reporter/arrow.go @@ -36,14 +36,6 @@ func (b *BinaryDictionaryRunEndBuilder) NewArray() arrow.Array { return b.ree.NewArray() } -func (b *BinaryDictionaryRunEndBuilder) Value(n int) []byte { - if b.idx.Len() > 0 && - !b.idx.IsNull(b.idx.Len()-1) { - return b.bd.Value(int(b.idx.Value(b.idx.Len() - 1))) - } - return nil -} - func (b *BinaryDictionaryRunEndBuilder) Append(v []byte) { if b.idx.Len() > 0 && !b.idx.IsNull(b.idx.Len()-1) && From 3668bc715f2066e070c4a94bcd44fe78aaf16678 Mon Sep 17 00:00:00 2001 From: Brennan Vincent Date: Wed, 30 Oct 2024 11:15:07 -0400 Subject: [PATCH 4/4] fix comments --- reporter/parca_reporter.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/reporter/parca_reporter.go b/reporter/parca_reporter.go index 81a19bb44f..ee6caeb1f3 100644 --- a/reporter/parca_reporter.go +++ b/reporter/parca_reporter.go @@ -276,7 +276,8 @@ func (r *ParcaReporter) ExecutableMetadata(args *reporter.ExecutableMetadataArgs }) } -// FrameKnown is a no-op for ParcaReporter. +// FrameKnown returns whether we have already determined the metadata for +// a given frame. func (r *ParcaReporter) FrameKnown(id libpf.FrameID) bool { if frameMapLock, exists := r.frames.Get(id.FileID()); exists { l := frameMapLock.WLock() @@ -650,8 +651,6 @@ func (r *ParcaReporter) reportDataToBackend(ctx context.Context, buf *bytes.Buff } rec, err = r.buildStacktraceRecord(ctx, stacktraceIDs) - // i := rec.NumRows() - // fmt.Printf("stacktrace record has %d rows. Col3: %s\n", i, rec.Column(3).String()) if err != nil { return err