diff --git a/.github/codecov.yml b/.github/codecov.yml index 025c36596..f7a2a8242 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -2,3 +2,13 @@ codecov: require_ci_to_pass: yes notify: wait_for_ci: yes +coverage: + status: + project: + default: + informational: true + patch: + default: + informational: true +github_checks: + annotations: false \ No newline at end of file diff --git a/.github/workflows/publish_dockerhub_main.yml b/.github/workflows/publish_dockerhub_main.yml index 4a3873f8c..292f4677d 100644 --- a/.github/workflows/publish_dockerhub_main.yml +++ b/.github/workflows/publish_dockerhub_main.yml @@ -17,7 +17,7 @@ jobs: - id: checkout uses: actions/checkout@v4 - - id: push-to-dockerhub + - id: push-beyla-to-dockerhub uses: grafana/shared-workflows/actions/build-push-to-dockerhub@main with: repository: grafana/beyla @@ -25,6 +25,22 @@ jobs: # cache image layers from/to github actions internal cache, for faster building cache-from: type=gha cache-to: type=gha,mode=max + platforms: |- + "linux/amd64" + "linux/arm64" + tags: |- + "main" + push: true + + - id: push-beyla-k8s-cache-to-dockerhub + uses: grafana/shared-workflows/actions/build-push-to-dockerhub@main + with: + repository: grafana/beyla-k8s-cache + file: k8scache.Dockerfile + context: . + # cache image layers from/to github actions internal cache, for faster building + cache-from: type=gha + cache-to: type=gha,mode=max platforms: |- "linux/amd64" "linux/arm64" diff --git a/.github/workflows/publish_dockerhub_release.yml b/.github/workflows/publish_dockerhub_release.yml index 93ec0e263..44064bf9a 100644 --- a/.github/workflows/publish_dockerhub_release.yml +++ b/.github/workflows/publish_dockerhub_release.yml @@ -17,7 +17,7 @@ jobs: - id: checkout uses: actions/checkout@v4 - - id: push-to-dockerhub + - id: push-beyla-to-dockerhub uses: grafana/shared-workflows/actions/build-push-to-dockerhub@main with: repository: grafana/beyla @@ -32,4 +32,22 @@ jobs: "type=semver,pattern={{major}}" "type=semver,pattern={{major}}.{{minor}}" "type=semver,pattern={{major}}.{{minor}}.{{patch}}" - push: true \ No newline at end of file + push: true + + - id: push-beyla-k8s-cache-to-dockerhub + uses: grafana/shared-workflows/actions/build-push-to-dockerhub@main + with: + repository: grafana/beyla-k8s-cache + file: k8scache.Dockerfile + context: . + # cache image layers from/to github actions internal cache, for faster building + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: |- + "linux/amd64" + "linux/arm64" + tags: |- + "type=semver,pattern={{major}}" + "type=semver,pattern={{major}}.{{minor}}" + "type=semver,pattern={{major}}.{{minor}}.{{patch}}" + push: true diff --git a/pkg/internal/kube/cache_svc_client.go b/pkg/internal/kube/cache_svc_client.go index d9b7978d2..f8007fae9 100644 --- a/pkg/internal/kube/cache_svc_client.go +++ b/pkg/internal/kube/cache_svc_client.go @@ -22,12 +22,15 @@ type cacheSvcClient struct { address string log *slog.Logger - waitForSubscription chan struct{} + syncTimeout time.Duration + waitForSubscription chan struct{} + waitForSynchronization chan struct{} } func (sc *cacheSvcClient) Start(ctx context.Context) { sc.log = cslog() sc.waitForSubscription = make(chan struct{}) + sc.waitForSynchronization = make(chan struct{}) go func() { select { case <-ctx.Done(): @@ -53,6 +56,17 @@ func (sc *cacheSvcClient) Start(ctx context.Context) { } } }() + sc.log.Info("waiting for K8s metadata synchronization", "timeout", sc.syncTimeout) + select { + case <-sc.waitForSynchronization: + sc.log.Debug("K8s metadata cache service synchronized") + case <-ctx.Done(): + sc.log.Debug("context done. Nothing to do") + case <-time.After(sc.syncTimeout): + sc.log.Warn("timed out while waiting for K8s metadata synchronization. Some metadata might be temporarily missing." + + " If this is expected due to the size of your cluster, you might want to increase the timeout via" + + " the BEYLA_KUBE_INFORMERS_SYNC_TIMEOUT configuration option") + } } func (sc *cacheSvcClient) connect(ctx context.Context) error { @@ -73,12 +87,19 @@ func (sc *cacheSvcClient) connect(ctx context.Context) error { return fmt.Errorf("could not subscribe: %w", err) } + unsynced := true // Receive and print messages. for { event, err := stream.Recv() if err != nil { return fmt.Errorf("error receiving message: %w", err) } + // send a notification about the client being synced with the K8s metadata service + // so Beyla can start processing/decorating the received flows and traces + if event.GetType() == informer.EventType_SYNC_FINISHED && unsynced { + close(sc.waitForSynchronization) + unsynced = false + } sc.BaseNotifier.Notify(event) } } diff --git a/pkg/internal/kube/informer_provider.go b/pkg/internal/kube/informer_provider.go index 7f2c2504e..d7bbb0802 100644 --- a/pkg/internal/kube/informer_provider.go +++ b/pkg/internal/kube/informer_provider.go @@ -195,7 +195,11 @@ func (mp *MetadataProvider) initLocalInformers(ctx context.Context) (*meta.Infor // initRemoteInformerCacheClient connects via gRPC/Protobuf to a remote beyla-k8s-cache service, to avoid that // each Beyla instance connects to the Kube API informer on each node, which would overload the Kube API func (mp *MetadataProvider) initRemoteInformerCacheClient(ctx context.Context) *cacheSvcClient { - client := &cacheSvcClient{address: mp.cfg.MetaCacheAddr, BaseNotifier: meta.NewBaseNotifier()} + client := &cacheSvcClient{ + address: mp.cfg.MetaCacheAddr, + BaseNotifier: meta.NewBaseNotifier(), + syncTimeout: mp.cfg.SyncTimeout, + } client.Start(ctx) return client } diff --git a/pkg/kubecache/service/service.go b/pkg/kubecache/service/service.go index 5560819a7..c6c255b5e 100644 --- a/pkg/kubecache/service/service.go +++ b/pkg/kubecache/service/service.go @@ -46,10 +46,20 @@ func (ic *InformersCache) Run(ctx context.Context, opts ...meta.InformerOption) informer.RegisterEventStreamServiceServer(s, ic) ic.log.Info("server listening", "port", ic.Port) - if err := s.Serve(lis); err != nil { - return fmt.Errorf("failed to serve: %w", err) + + errs := make(chan error, 1) + go func() { + if err := s.Serve(lis); err != nil { + errs <- fmt.Errorf("failed to serve: %w", err) + } + close(errs) + }() + select { + case <-ctx.Done(): + return nil + case err := <-errs: + return err } - return nil } // Subscribe method of the generated protobuf definition diff --git a/test/integration/k8s/informer_cache/k8s_informer_cache_main_test.go b/test/integration/k8s/informer_cache/k8s_informer_cache_main_test.go index 1dd91a3c2..5b4840c05 100644 --- a/test/integration/k8s/informer_cache/k8s_informer_cache_main_test.go +++ b/test/integration/k8s/informer_cache/k8s_informer_cache_main_test.go @@ -7,8 +7,6 @@ import ( "os" "testing" - "sigs.k8s.io/e2e-framework/pkg/features" - "github.com/grafana/beyla/test/integration/components/docker" "github.com/grafana/beyla/test/integration/components/kube" k8s "github.com/grafana/beyla/test/integration/k8s/common" @@ -23,7 +21,6 @@ func TestMain(m *testing.M) { docker.ImageBuild{Tag: "beyla:dev", Dockerfile: k8s.DockerfileBeyla}, docker.ImageBuild{Tag: "testserver:dev", Dockerfile: k8s.DockerfileTestServer}, docker.ImageBuild{Tag: "httppinger:dev", Dockerfile: k8s.DockerfileHTTPPinger}, - docker.ImageBuild{Tag: "grpcpinger:dev", Dockerfile: k8s.DockerfilePinger}, docker.ImageBuild{Tag: "beyla-k8s-cache:dev", Dockerfile: k8s.DockerfileBeylaK8sCache}, docker.ImageBuild{Tag: "quay.io/prometheus/prometheus:v2.53.0"}, ); err != nil { @@ -36,7 +33,6 @@ func TestMain(m *testing.M) { kube.KindConfig(k8s.PathManifests+"/00-kind.yml"), kube.LocalImage("beyla:dev"), kube.LocalImage("testserver:dev"), - kube.LocalImage("grpcpinger:dev"), kube.LocalImage("httppinger:dev"), kube.LocalImage("beyla-k8s-cache:dev"), kube.LocalImage("quay.io/prometheus/prometheus:v2.53.0"), @@ -72,10 +68,5 @@ func TestInformersCache_ProcessMetrics(t *testing.T) { } func TestInformersCache_NetworkMetrics(t *testing.T) { - // we don't deploy any pinger - // it will reuse internal-pinger from MetricsDecoration_HTTP test - cluster.TestEnv().Test(t, features.New("network flow bytes"). - Assess("catches network metrics between connected pods", otel.DoTestNetFlowBytesForExistingConnections). - Feature(), - ) + cluster.TestEnv().Test(t, otel.FeatureNetworkFlowBytes()) } diff --git a/test/integration/k8s/manifests/06-beyla-external-informer.yml b/test/integration/k8s/manifests/06-beyla-external-informer.yml index 1057bb663..4bc40ae4f 100644 --- a/test/integration/k8s/manifests/06-beyla-external-informer.yml +++ b/test/integration/k8s/manifests/06-beyla-external-informer.yml @@ -117,9 +117,6 @@ metadata: namespace: default labels: app: k8s-cache - # this label will trigger a deletion of beyla pods before tearing down - # kind, to force Beyla writing the coverage data - teardown: delete spec: replicas: 1 selector: @@ -130,6 +127,9 @@ spec: name: k8s-cache labels: app: k8s-cache + # this label will trigger a deletion of beyla pods before tearing down + # kind, to force Beyla writing the coverage data + teardown: delete spec: # required to let the service accessing the K8s API serviceAccountName: beyla diff --git a/test/integration/k8s/netolly/k8s_netolly_main_test.go b/test/integration/k8s/netolly/k8s_netolly_main_test.go index f56861aba..b5be8dfd8 100644 --- a/test/integration/k8s/netolly/k8s_netolly_main_test.go +++ b/test/integration/k8s/netolly/k8s_netolly_main_test.go @@ -7,8 +7,6 @@ import ( "os" "testing" - "sigs.k8s.io/e2e-framework/pkg/features" - "github.com/grafana/beyla/test/integration/components/docker" "github.com/grafana/beyla/test/integration/components/kube" k8s "github.com/grafana/beyla/test/integration/k8s/common" @@ -49,18 +47,5 @@ func TestMain(m *testing.M) { } func TestNetworkFlowBytes(t *testing.T) { - pinger := kube.Template[k8s.Pinger]{ - TemplateFile: k8s.UninstrumentedPingerManifest, - Data: k8s.Pinger{ - PodName: "internal-pinger", - TargetURL: "http://testserver:8080/iping", - }, - } - cluster.TestEnv().Test(t, features.New("network flow bytes"). - Setup(pinger.Deploy()). - Teardown(pinger.Delete()). - Assess("catches network metrics between connected pods", DoTestNetFlowBytesForExistingConnections). - Assess("catches external traffic", testNetFlowBytesForExternalTraffic). - Feature(), - ) + cluster.TestEnv().Test(t, FeatureNetworkFlowBytes()) } diff --git a/test/integration/k8s/netolly/k8s_netolly_network_metrics.go b/test/integration/k8s/netolly/k8s_netolly_network_metrics.go index 82ab51c53..f7b5269fc 100644 --- a/test/integration/k8s/netolly/k8s_netolly_network_metrics.go +++ b/test/integration/k8s/netolly/k8s_netolly_network_metrics.go @@ -13,8 +13,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "sigs.k8s.io/e2e-framework/pkg/envconf" + "sigs.k8s.io/e2e-framework/pkg/features" + "github.com/grafana/beyla/test/integration/components/kube" "github.com/grafana/beyla/test/integration/components/prom" + k8s "github.com/grafana/beyla/test/integration/k8s/common" ) const ( @@ -26,12 +29,27 @@ const ( var podSubnets = []string{"10.244.0.0/16", "fd00:10:244::/56"} var svcSubnets = []string{"10.96.0.0/16", "fd00:10:96::/112"} -func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context { - pq := prom.Client{HostPort: prometheusHostPort} +func FeatureNetworkFlowBytes() features.Feature { + pinger := kube.Template[k8s.Pinger]{ + TemplateFile: k8s.UninstrumentedPingerManifest, + Data: k8s.Pinger{ + PodName: "internal-pinger-net", + TargetURL: "http://testserver:8080/iping", + }, + } + return features.New("network flow bytes"). + Setup(pinger.Deploy()). + Teardown(pinger.Delete()). + Assess("catches network metrics between connected pods", testNetFlowBytesForExistingConnections). + Assess("catches external traffic", testNetFlowBytesForExternalTraffic). + Feature() +} +func testNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, _ *envconf.Config) context.Context { + pq := prom.Client{HostPort: prometheusHostPort} // testing request flows (to testserver as Service) test.Eventually(t, testTimeout, func(t require.TestingT) { - results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger",dst_name="testserver"}`) + results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger-net",dst_name="testserver"}`) require.NoError(t, err) require.NotEmpty(t, results) @@ -43,7 +61,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, assert.Equal(t, "beyla-network-flows", metric["job"]) assert.Equal(t, "my-kube", metric["k8s_cluster_name"]) assert.Equal(t, "default", metric["k8s_src_namespace"]) - assert.Equal(t, "internal-pinger", metric["k8s_src_name"]) + assert.Equal(t, "internal-pinger-net", metric["k8s_src_name"]) assert.Equal(t, "Pod", metric["k8s_src_owner_type"]) assert.Equal(t, "Pod", metric["k8s_src_type"]) assert.Regexp(t, @@ -62,7 +80,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, }) // testing request flows (to testserver as Pod) test.Eventually(t, testTimeout, func(t require.TestingT) { - results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger",dst_name=~"testserver-.*"}`) + results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger-net",dst_name=~"testserver-.*"}`) require.NoError(t, err) require.NotEmpty(t, results) @@ -73,7 +91,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, assertIsIP(t, metric["dst_address"]) assert.Equal(t, "beyla-network-flows", metric["job"]) assert.Equal(t, "default", metric["k8s_src_namespace"]) - assert.Equal(t, "internal-pinger", metric["k8s_src_name"]) + assert.Equal(t, "internal-pinger-net", metric["k8s_src_name"]) assert.Equal(t, "Pod", metric["k8s_src_owner_type"]) assert.Equal(t, "Pod", metric["k8s_src_type"]) assert.Regexp(t, @@ -97,7 +115,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, // testing response flows (from testserver Pod) test.Eventually(t, testTimeout, func(t require.TestingT) { - results, err := pq.Query(`beyla_network_flow_bytes_total{src_name=~"testserver-.*",dst_name="internal-pinger"}`) + results, err := pq.Query(`beyla_network_flow_bytes_total{src_name=~"testserver-.*",dst_name="internal-pinger-net"}`) require.NoError(t, err) require.NotEmpty(t, results) @@ -116,7 +134,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, metric["k8s_src_node_name"]) assertIsIP(t, metric["k8s_src_node_ip"]) assert.Equal(t, "default", metric["k8s_dst_namespace"]) - assert.Equal(t, "internal-pinger", metric["k8s_dst_name"]) + assert.Equal(t, "internal-pinger-net", metric["k8s_dst_name"]) assert.Equal(t, "Pod", metric["k8s_dst_owner_type"]) assert.Equal(t, "Pod", metric["k8s_dst_type"]) assert.Regexp(t, @@ -132,7 +150,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, // testing response flows (from testserver Service) test.Eventually(t, testTimeout, func(t require.TestingT) { - results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="testserver",dst_name="internal-pinger"}`) + results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="testserver",dst_name="internal-pinger-net"}`) require.NoError(t, err) require.NotEmpty(t, results) @@ -148,7 +166,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, assert.Equal(t, "Service", metric["k8s_src_type"]) // services don't have host IP or name assert.Equal(t, "default", metric["k8s_dst_namespace"]) - assert.Equal(t, "internal-pinger", metric["k8s_dst_name"]) + assert.Equal(t, "internal-pinger-net", metric["k8s_dst_name"]) assert.Equal(t, "Pod", metric["k8s_dst_owner_type"]) assert.Equal(t, "Pod", metric["k8s_dst_type"]) assert.Regexp(t, @@ -162,7 +180,7 @@ func DoTestNetFlowBytesForExistingConnections(ctx context.Context, t *testing.T, }) // check that there aren't captured flows if there is no communication - results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger",dst_name="otherinstance"}`) + results, err := pq.Query(`beyla_network_flow_bytes_total{src_name="internal-pinger-net",dst_name="otherinstance"}`) require.NoError(t, err) require.Empty(t, results) diff --git a/test/integration/k8s/netolly_promexport/k8s_netolly_prom_main_test.go b/test/integration/k8s/netolly_promexport/k8s_netolly_prom_main_test.go index 8fef9b6a6..5f62caadb 100644 --- a/test/integration/k8s/netolly_promexport/k8s_netolly_prom_main_test.go +++ b/test/integration/k8s/netolly_promexport/k8s_netolly_prom_main_test.go @@ -7,8 +7,6 @@ import ( "os" "testing" - "sigs.k8s.io/e2e-framework/pkg/features" - "github.com/grafana/beyla/test/integration/components/docker" "github.com/grafana/beyla/test/integration/components/kube" k8s "github.com/grafana/beyla/test/integration/k8s/common" @@ -49,17 +47,5 @@ func TestMain(m *testing.M) { } func TestNetworkFlowBytes_Prom(t *testing.T) { - pinger := kube.Template[k8s.Pinger]{ - TemplateFile: k8s.UninstrumentedPingerManifest, - Data: k8s.Pinger{ - PodName: "internal-pinger", - TargetURL: "http://testserver:8080/iping", - }, - } - cluster.TestEnv().Test(t, features.New("network flow bytes"). - Setup(pinger.Deploy()). - Teardown(pinger.Delete()). - Assess("catches network metrics between connected pods", otel.DoTestNetFlowBytesForExistingConnections). - Feature(), - ) + cluster.TestEnv().Test(t, otel.FeatureNetworkFlowBytes()) } diff --git a/test/integration/k8s/netolly_tc_promexport/k8s_netolly_prom_main_test.go b/test/integration/k8s/netolly_tc_promexport/k8s_netolly_prom_main_test.go index a731e0248..b6d2edc0e 100644 --- a/test/integration/k8s/netolly_tc_promexport/k8s_netolly_prom_main_test.go +++ b/test/integration/k8s/netolly_tc_promexport/k8s_netolly_prom_main_test.go @@ -7,8 +7,6 @@ import ( "os" "testing" - "sigs.k8s.io/e2e-framework/pkg/features" - "github.com/grafana/beyla/test/integration/components/docker" "github.com/grafana/beyla/test/integration/components/kube" k8s "github.com/grafana/beyla/test/integration/k8s/common" @@ -49,17 +47,5 @@ func TestMain(m *testing.M) { } func TestNetworkSKFlowBytes_Prom(t *testing.T) { - pinger := kube.Template[k8s.Pinger]{ - TemplateFile: k8s.UninstrumentedPingerManifest, - Data: k8s.Pinger{ - PodName: "internal-pinger", - TargetURL: "http://testserver:8080/iping", - }, - } - cluster.TestEnv().Test(t, features.New("network flow bytes"). - Setup(pinger.Deploy()). - Teardown(pinger.Delete()). - Assess("catches network metrics between connected pods", otel.DoTestNetFlowBytesForExistingConnections). - Feature(), - ) + cluster.TestEnv().Test(t, otel.FeatureNetworkFlowBytes()) } diff --git a/third_party_licenses.csv b/third_party_licenses.csv index 07b8f0631..f07649f93 100644 --- a/third_party_licenses.csv +++ b/third_party_licenses.csv @@ -1,4 +1,8 @@ +cloud.google.com/go/compute/metadata,https://github.com/grafana/beyla/blob/HEAD/vendor/cloud.google.com/go/compute/metadata/LICENSE,Apache-2.0 github.com/AlessandroPomponio/go-gibberish,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/AlessandroPomponio/go-gibberish/LICENSE,MIT +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp/LICENSE,Apache-2.0 +github.com/aws/aws-sdk-go,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/aws/aws-sdk-go/LICENSE.txt,Apache-2.0 +github.com/aws/aws-sdk-go/internal/sync/singleflight,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/aws/aws-sdk-go/internal/sync/singleflight/LICENSE,BSD-3-Clause github.com/beorn7/perks/quantile,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/beorn7/perks/LICENSE,MIT github.com/caarlos0/env/v9,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/caarlos0/env/v9/LICENSE.md,MIT github.com/cenkalti/backoff/v4,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/cenkalti/backoff/v4/LICENSE,MIT @@ -6,8 +10,10 @@ github.com/cespare/xxhash/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/g github.com/cilium/ebpf,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/cilium/ebpf/LICENSE,MIT github.com/davecgh/go-spew/spew,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/davecgh/go-spew/LICENSE,ISC github.com/emicklei/go-restful/v3,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/emicklei/go-restful/v3/LICENSE,MIT -github.com/evanphx/json-patch,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/evanphx/json-patch/LICENSE,BSD-3-Clause github.com/evanphx/json-patch/v5,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/evanphx/json-patch/v5/LICENSE,BSD-3-Clause +github.com/felixge/httpsnoop,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/felixge/httpsnoop/LICENSE.txt,MIT +github.com/fsnotify/fsnotify,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/fsnotify/fsnotify/LICENSE,BSD-3-Clause +github.com/fxamacker/cbor/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/fxamacker/cbor/v2/LICENSE,MIT github.com/gabriel-vasile/mimetype,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/gabriel-vasile/mimetype/LICENSE,MIT github.com/gavv/monotime,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/gavv/monotime/LICENSE,Apache-2.0 github.com/gin-contrib/sse,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/gin-contrib/sse/LICENSE,MIT @@ -20,8 +26,12 @@ github.com/go-openapi/swag,https://github.com/grafana/beyla/blob/HEAD/vendor/git github.com/go-playground/locales,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/go-playground/locales/LICENSE,MIT github.com/go-playground/universal-translator,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/go-playground/universal-translator/LICENSE,MIT github.com/go-playground/validator/v10,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/go-playground/validator/v10/LICENSE,MIT +github.com/go-viper/mapstructure/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/go-viper/mapstructure/v2/LICENSE,MIT +github.com/gobwas/glob,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/gobwas/glob/LICENSE,MIT github.com/gogo/protobuf,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/gogo/protobuf/LICENSE,BSD-3-Clause +github.com/golang/groupcache/lru,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/golang/groupcache/LICENSE,Apache-2.0 github.com/golang/protobuf,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/golang/protobuf/LICENSE,BSD-3-Clause +github.com/golang/snappy,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/golang/snappy/LICENSE,BSD-3-Clause github.com/google/gnostic-models,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/google/gnostic-models/LICENSE,Apache-2.0 github.com/google/go-cmp/cmp,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/google/go-cmp/LICENSE,BSD-3-Clause github.com/google/gofuzz,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/google/gofuzz/LICENSE,Apache-2.0 @@ -35,34 +45,77 @@ github.com/hashicorp/go-version,https://github.com/grafana/beyla/blob/HEAD/vendo github.com/hashicorp/golang-lru/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/hashicorp/golang-lru/v2/LICENSE,MPL-2.0 github.com/hashicorp/golang-lru/v2/simplelru,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/hashicorp/golang-lru/v2/simplelru/LICENSE_list,BSD-3-Clause github.com/imdario/mergo,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/imdario/mergo/LICENSE,BSD-3-Clause +github.com/jmespath/go-jmespath,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/jmespath/go-jmespath/LICENSE,Apache-2.0 github.com/josharian/intern,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/josharian/intern/license.md,MIT github.com/json-iterator/go,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/json-iterator/go/LICENSE,MIT +github.com/klauspost/compress,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/klauspost/compress/LICENSE,Apache-2.0 +github.com/klauspost/compress/internal/snapref,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/klauspost/compress/internal/snapref/LICENSE,BSD-3-Clause +github.com/klauspost/compress/zstd/internal/xxhash,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt,MIT +github.com/knadh/koanf/maps,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/knadh/koanf/maps/LICENSE,MIT +github.com/knadh/koanf/providers/confmap,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/knadh/koanf/providers/confmap/LICENSE,MIT +github.com/knadh/koanf/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/knadh/koanf/v2/LICENSE,MIT github.com/leodido/go-urn,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/leodido/go-urn/LICENSE,MIT github.com/mailru/easyjson,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mailru/easyjson/LICENSE,MIT -github.com/mariomac/guara,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mariomac/guara/LICENSE,Apache-2.0 -github.com/mariomac/pipes,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mariomac/pipes/LICENSE,Apache-2.0 +github.com/mariomac/guara/pkg/test,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mariomac/guara/LICENSE,Apache-2.0 +github.com/mariomac/pipes/pipe,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mariomac/pipes/LICENSE,Apache-2.0 github.com/mattn/go-isatty,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mattn/go-isatty/LICENSE,MIT +github.com/mitchellh/copystructure,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mitchellh/copystructure/LICENSE,MIT +github.com/mitchellh/reflectwalk,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mitchellh/reflectwalk/LICENSE,MIT github.com/moby/spdystream,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/moby/spdystream/LICENSE,Apache-2.0 github.com/modern-go/concurrent,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/modern-go/concurrent/LICENSE,Apache-2.0 github.com/modern-go/reflect2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/modern-go/reflect2/LICENSE,Apache-2.0 +github.com/mostynb/go-grpc-compression,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mostynb/go-grpc-compression/LICENSE,Apache-2.0 github.com/munnerz/goautoneg,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/munnerz/goautoneg/LICENSE,BSD-3-Clause github.com/mxk/go-flowrate/flowrate,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/mxk/go-flowrate/LICENSE,BSD-3-Clause github.com/pelletier/go-toml/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/pelletier/go-toml/v2/LICENSE,MIT github.com/pkg/errors,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/pkg/errors/LICENSE,BSD-2-Clause github.com/pmezard/go-difflib/difflib,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/pmezard/go-difflib/LICENSE,BSD-3-Clause +github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE,BSD-3-Clause github.com/prometheus/client_golang/prometheus,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/client_golang/LICENSE,Apache-2.0 github.com/prometheus/client_model/go,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/client_model/LICENSE,Apache-2.0 github.com/prometheus/common,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/common/LICENSE,Apache-2.0 -github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt,BSD-3-Clause github.com/prometheus/procfs,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/prometheus/procfs/LICENSE,Apache-2.0 -github.com/shirou/gopsutil,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/shirou/gopsutil/LICENSE,BSD-3-Clause +github.com/rs/cors,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/rs/cors/LICENSE,MIT +github.com/shirou/gopsutil/v3,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/shirou/gopsutil/v3/LICENSE,BSD-3-Clause +github.com/shoenig/go-m1cpu,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/shoenig/go-m1cpu/LICENSE,MPL-2.0 github.com/spf13/pflag,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/spf13/pflag/LICENSE,BSD-3-Clause github.com/stretchr/testify,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/stretchr/testify/LICENSE,MIT github.com/tklauser/go-sysconf,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/tklauser/go-sysconf/LICENSE,BSD-3-Clause github.com/ugorji/go/codec,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/ugorji/go/codec/LICENSE,MIT github.com/vladimirvivien/gexe,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/vladimirvivien/gexe/LICENSE,MIT +github.com/x448/float16,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/x448/float16/LICENSE,MIT github.com/xwb1989/sqlparser,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/xwb1989/sqlparser/LICENSE.md,Apache-2.0 +github.com/yl2chen/cidranger,https://github.com/grafana/beyla/blob/HEAD/vendor/github.com/yl2chen/cidranger/LICENSE,MIT +go.opentelemetry.io/collector/client,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/client/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/component,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/component/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configauth,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configauth/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configcompression,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configcompression/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configgrpc,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configgrpc/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/confighttp,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/confighttp/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/confignet,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/confignet/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configopaque,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configopaque/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configretry,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configretry/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configtelemetry,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configtelemetry/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/configtls,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/configtls/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/config/internal,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/config/internal/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/confmap,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/confmap/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/consumer,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/consumer/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/consumer/consumerprofiles,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/consumer/consumerprofiles/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/exporter,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/exporter/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/exporter/otlpexporter,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/exporter/otlpexporter/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/exporter/otlphttpexporter,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/exporter/otlphttpexporter/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/extension,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/extension/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/extension/auth,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/extension/auth/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/featuregate,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/featuregate/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/internal,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/LICENSE,Apache-2.0 go.opentelemetry.io/collector/pdata,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/pdata/LICENSE,Apache-2.0 +go.opentelemetry.io/collector/pdata/pprofile,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/collector/pdata/pprofile/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/detectors/aws/ec2,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/detectors/aws/ec2/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/detectors/aws/eks,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/detectors/aws/eks/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/detectors/azure/azurevm,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/detectors/azure/azurevm/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/detectors/gcp,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/detectors/gcp/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE,Apache-2.0 +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE,Apache-2.0 go.opentelemetry.io/otel,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/otel/LICENSE,Apache-2.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/LICENSE,Apache-2.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/LICENSE,Apache-2.0 @@ -75,16 +128,18 @@ go.opentelemetry.io/otel/sdk/metric,https://github.com/grafana/beyla/blob/HEAD/v go.opentelemetry.io/otel/trace,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/otel/trace/LICENSE,Apache-2.0 go.opentelemetry.io/proto/otlp,https://github.com/grafana/beyla/blob/HEAD/vendor/go.opentelemetry.io/proto/otlp/LICENSE,Apache-2.0 go.uber.org/multierr,https://github.com/grafana/beyla/blob/HEAD/vendor/go.uber.org/multierr/LICENSE.txt,MIT +go.uber.org/zap,https://github.com/grafana/beyla/blob/HEAD/vendor/go.uber.org/zap/LICENSE,MIT golang.org/x/arch/arm64/arm64asm,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/arch/LICENSE,BSD-3-Clause golang.org/x/crypto/sha3,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/crypto/LICENSE,BSD-3-Clause golang.org/x/exp,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/exp/LICENSE,BSD-3-Clause golang.org/x/mod/semver,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/mod/LICENSE,BSD-3-Clause golang.org/x/net,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/net/LICENSE,BSD-3-Clause golang.org/x/oauth2,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/oauth2/LICENSE,BSD-3-Clause -golang.org/x/sys/unix,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/sys/LICENSE,BSD-3-Clause +golang.org/x/sys,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/sys/LICENSE,BSD-3-Clause golang.org/x/term,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/term/LICENSE,BSD-3-Clause golang.org/x/text,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/text/LICENSE,BSD-3-Clause golang.org/x/time/rate,https://github.com/grafana/beyla/blob/HEAD/vendor/golang.org/x/time/LICENSE,BSD-3-Clause +gomodules.xyz/jsonpatch/v2,https://github.com/grafana/beyla/blob/HEAD/vendor/gomodules.xyz/jsonpatch/v2/LICENSE,Apache-2.0 google.golang.org/genproto/googleapis/api/httpbody,https://github.com/grafana/beyla/blob/HEAD/vendor/google.golang.org/genproto/googleapis/api/LICENSE,Apache-2.0 google.golang.org/genproto/googleapis/rpc,https://github.com/grafana/beyla/blob/HEAD/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE,Apache-2.0 google.golang.org/grpc,https://github.com/grafana/beyla/blob/HEAD/vendor/google.golang.org/grpc/LICENSE,Apache-2.0 @@ -93,6 +148,7 @@ gopkg.in/inf.v0,https://github.com/grafana/beyla/blob/HEAD/vendor/gopkg.in/inf.v gopkg.in/yaml.v2,https://github.com/grafana/beyla/blob/HEAD/vendor/gopkg.in/yaml.v2/LICENSE,Apache-2.0 gopkg.in/yaml.v3,https://github.com/grafana/beyla/blob/HEAD/vendor/gopkg.in/yaml.v3/LICENSE,MIT k8s.io/api,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/api/LICENSE,Apache-2.0 +k8s.io/apiextensions-apiserver/pkg,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/apiextensions-apiserver/LICENSE,Apache-2.0 k8s.io/apimachinery/pkg,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/apimachinery/LICENSE,Apache-2.0 k8s.io/apimachinery/third_party/forked/golang,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/apimachinery/third_party/forked/golang/LICENSE,BSD-3-Clause k8s.io/client-go,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/client-go/LICENSE,Apache-2.0 @@ -102,8 +158,9 @@ k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,https://git k8s.io/kube-openapi/pkg/validation/spec,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/kube-openapi/pkg/validation/spec/LICENSE,Apache-2.0 k8s.io/utils,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/utils/LICENSE,Apache-2.0 k8s.io/utils/internal/third_party/forked/golang/net,https://github.com/grafana/beyla/blob/HEAD/vendor/k8s.io/utils/internal/third_party/forked/golang/LICENSE,BSD-3-Clause -sigs.k8s.io/controller-runtime/pkg,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/controller-runtime/LICENSE,Apache-2.0 +sigs.k8s.io/controller-runtime,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/controller-runtime/LICENSE,Apache-2.0 sigs.k8s.io/e2e-framework,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/e2e-framework/LICENSE,Apache-2.0 sigs.k8s.io/json,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/json/LICENSE,Apache-2.0 sigs.k8s.io/structured-merge-diff/v4,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/structured-merge-diff/v4/LICENSE,Apache-2.0 -sigs.k8s.io/yaml,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/yaml/LICENSE,MIT +sigs.k8s.io/yaml,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/yaml/LICENSE,Apache-2.0 +sigs.k8s.io/yaml/goyaml.v2,https://github.com/grafana/beyla/blob/HEAD/vendor/sigs.k8s.io/yaml/goyaml.v2/LICENSE,Apache-2.0