From aa9f3fc37e8c1ddf73e688829f47ee68bb26946d Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:00:30 -0500 Subject: [PATCH 01/17] extract widely duplicated user agent code into shared package --- component/common/kubernetes/kubernetes.go | 4 ++-- component/common/loki/client/client.go | 6 +++--- component/common/loki/client/queue_client.go | 2 +- component/loki/source/docker/docker.go | 4 ++-- component/loki/write/write.go | 3 --- component/prometheus/remotewrite/remote_write.go | 4 ++-- component/prometheus/scrape/scrape.go | 4 ++-- component/pyroscope/scrape/scrape_loop.go | 5 ++--- component/pyroscope/write/write.go | 5 ++--- component/remote/http/http.go | 4 ++-- pkg/logs/logs.go | 4 ++-- pkg/metrics/instance/instance.go | 6 +++--- 12 files changed, 23 insertions(+), 28 deletions(-) diff --git a/component/common/kubernetes/kubernetes.go b/component/common/kubernetes/kubernetes.go index a317fb58f11e..138ca7d0f31d 100644 --- a/component/common/kubernetes/kubernetes.go +++ b/component/common/kubernetes/kubernetes.go @@ -6,8 +6,8 @@ import ( "github.com/go-kit/log" commoncfg "github.com/grafana/agent/component/common/config" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" promconfig "github.com/prometheus/common/config" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -79,7 +79,7 @@ func (args *ClientArguments) BuildRESTConfig(l log.Logger) (*rest.Config, error) } } - cfg.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) + cfg.UserAgent = useragent.UserAgent() cfg.ContentType = "application/vnd.kubernetes.protobuf" return cfg, nil diff --git a/component/common/loki/client/client.go b/component/common/loki/client/client.go index 964b6c98513b..84dfe7403db3 100644 --- a/component/common/loki/client/client.go +++ b/component/common/loki/client/client.go @@ -14,13 +14,13 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" "github.com/grafana/dskit/backoff" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/grafana/agent/component/common/loki" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/util" lokiutil "github.com/grafana/loki/pkg/util" ) @@ -47,7 +47,7 @@ const ( var Reasons = []string{ReasonGeneric, ReasonRateLimited, ReasonStreamLimited, ReasonLineTooLong} -var UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) +var userAgent = useragent.UserAgent() type Metrics struct { encodedBytes *prometheus.CounterVec @@ -419,7 +419,7 @@ func (c *client) send(ctx context.Context, tenantID string, buf []byte) (int, er } req = req.WithContext(ctx) req.Header.Set("Content-Type", contentType) - req.Header.Set("User-Agent", UserAgent) + req.Header.Set("User-Agent", userAgent) // If the tenant ID is not empty promtail is running in multi-tenant mode, so // we should send it to Loki diff --git a/component/common/loki/client/queue_client.go b/component/common/loki/client/queue_client.go index dc8ed469fba3..871880cad17b 100644 --- a/component/common/loki/client/queue_client.go +++ b/component/common/loki/client/queue_client.go @@ -520,7 +520,7 @@ func (c *queueClient) send(ctx context.Context, tenantID string, buf []byte) (in } req = req.WithContext(ctx) req.Header.Set("Content-Type", contentType) - req.Header.Set("User-Agent", UserAgent) + req.Header.Set("User-Agent", userAgent) // If the tenant ID is not empty promtail is running in multi-tenant mode, so // we should send it to Loki diff --git a/component/loki/source/docker/docker.go b/component/loki/source/docker/docker.go index 584838f244fc..0d8be85bb16e 100644 --- a/component/loki/source/docker/docker.go +++ b/component/loki/source/docker/docker.go @@ -22,8 +22,8 @@ import ( flow_relabel "github.com/grafana/agent/component/common/relabel" "github.com/grafana/agent/component/discovery" dt "github.com/grafana/agent/component/loki/source/docker/internal/dockertarget" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/relabel" @@ -40,7 +40,7 @@ func init() { }) } -var userAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) +var userAgent = useragent.UserAgent() const ( dockerLabel = model.MetaLabelPrefix + "docker_" diff --git a/component/loki/write/write.go b/component/loki/write/write.go index a9d9c2730936..efda7b597c6f 100644 --- a/component/loki/write/write.go +++ b/component/loki/write/write.go @@ -12,7 +12,6 @@ import ( "github.com/grafana/agent/component/common/loki/client" "github.com/grafana/agent/component/common/loki/limit" "github.com/grafana/agent/component/common/loki/wal" - "github.com/grafana/agent/pkg/build" ) func init() { @@ -25,8 +24,6 @@ func init() { return New(opts, args.(Arguments)) }, }) - - client.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) } // Arguments holds values which are used to configure the loki.write component. diff --git a/component/prometheus/remotewrite/remote_write.go b/component/prometheus/remotewrite/remote_write.go index d36d5cde8cfe..9a89861b496a 100644 --- a/component/prometheus/remotewrite/remote_write.go +++ b/component/prometheus/remotewrite/remote_write.go @@ -21,9 +21,9 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/flow/logging/level" "github.com/grafana/agent/pkg/metrics/wal" + "github.com/grafana/agent/pkg/useragent" "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/storage/remote" @@ -35,7 +35,7 @@ import ( var remoteFlushDeadline = 1 * time.Minute func init() { - remote.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) + remote.UserAgent = useragent.UserAgent() component.Register(component.Registration{ Name: "prometheus.remote_write", diff --git a/component/prometheus/scrape/scrape.go b/component/prometheus/scrape/scrape.go index 750f71bd9aa0..a6f3d28bd723 100644 --- a/component/prometheus/scrape/scrape.go +++ b/component/prometheus/scrape/scrape.go @@ -12,8 +12,8 @@ import ( component_config "github.com/grafana/agent/component/common/config" "github.com/grafana/agent/component/discovery" "github.com/grafana/agent/component/prometheus" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" "github.com/grafana/agent/service/cluster" "github.com/grafana/agent/service/http" "github.com/grafana/agent/service/labelstore" @@ -27,7 +27,7 @@ import ( ) func init() { - scrape.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) + scrape.UserAgent = useragent.UserAgent() component.Register(component.Registration{ Name: "prometheus.scrape", diff --git a/component/pyroscope/scrape/scrape_loop.go b/component/pyroscope/scrape/scrape_loop.go index 5abb3fd801f3..261233a329ed 100644 --- a/component/pyroscope/scrape/scrape_loop.go +++ b/component/pyroscope/scrape/scrape_loop.go @@ -13,17 +13,16 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component/pyroscope" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" commonconfig "github.com/prometheus/common/config" "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/util/pool" "golang.org/x/net/context/ctxhttp" - - "github.com/grafana/agent/pkg/build" ) var ( payloadBuffers = pool.New(1e3, 1e6, 3, func(sz int) interface{} { return make([]byte, 0, sz) }) - userAgentHeader = fmt.Sprintf("GrafanaAgent/%s", build.Version) + userAgentHeader = useragent.UserAgent() ) type scrapePool struct { diff --git a/component/pyroscope/write/write.go b/component/pyroscope/write/write.go index e92c7dfb1706..ab376ac46439 100644 --- a/component/pyroscope/write/write.go +++ b/component/pyroscope/write/write.go @@ -3,13 +3,13 @@ package write import ( "context" "errors" - "fmt" "strings" "time" "github.com/bufbuild/connect-go" "github.com/grafana/agent/component/pyroscope" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" "github.com/oklog/run" commonconfig "github.com/prometheus/common/config" "github.com/prometheus/common/model" @@ -18,7 +18,6 @@ import ( "github.com/grafana/agent/component" "github.com/grafana/agent/component/common/config" - "github.com/grafana/agent/pkg/build" "github.com/grafana/dskit/backoff" pushv1 "github.com/grafana/pyroscope/api/gen/proto/go/push/v1" "github.com/grafana/pyroscope/api/gen/proto/go/push/v1/pushv1connect" @@ -26,7 +25,7 @@ import ( ) var ( - userAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) + userAgent = useragent.UserAgent() DefaultArguments = func() Arguments { return Arguments{} } diff --git a/component/remote/http/http.go b/component/remote/http/http.go index 3966a63c6522..c95e41409bd5 100644 --- a/component/remote/http/http.go +++ b/component/remote/http/http.go @@ -13,13 +13,13 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component" common_config "github.com/grafana/agent/component/common/config" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/flow/logging/level" + "github.com/grafana/agent/pkg/useragent" "github.com/grafana/river/rivertypes" prom_config "github.com/prometheus/common/config" ) -var userAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) +var userAgent = useragent.UserAgent() func init() { component.Register(component.Registration{ diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index 7b0d9b2c27c0..65e03d4cc9b6 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -11,6 +11,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/grafana/agent/pkg/useragent" "github.com/grafana/agent/pkg/util" "github.com/grafana/loki/clients/pkg/promtail" "github.com/grafana/loki/clients/pkg/promtail/api" @@ -21,11 +22,10 @@ import ( "github.com/grafana/loki/clients/pkg/promtail/wal" "github.com/grafana/loki/pkg/tracing" "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/common/version" ) func init() { - client.UserAgent = fmt.Sprintf("GrafanaAgent/%s", version.Version) + client.UserAgent = useragent.UserAgent() } // Logs is a Logs log collection. It uses multiple distinct sets of Logs diff --git a/pkg/metrics/instance/instance.go b/pkg/metrics/instance/instance.go index 9a9e36c788b1..21263125f2d1 100644 --- a/pkg/metrics/instance/instance.go +++ b/pkg/metrics/instance/instance.go @@ -17,8 +17,8 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" - "github.com/grafana/agent/pkg/build" "github.com/grafana/agent/pkg/metrics/wal" + "github.com/grafana/agent/pkg/useragent" "github.com/grafana/agent/pkg/util" "github.com/oklog/run" "github.com/prometheus/client_golang/prometheus" @@ -35,8 +35,8 @@ import ( ) func init() { - remote.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) - scrape.UserAgent = fmt.Sprintf("GrafanaAgent/%s", build.Version) + remote.UserAgent = useragent.UserAgent() + scrape.UserAgent = useragent.UserAgent() // default remote_write send_exemplars to true config.DefaultRemoteWriteConfig.SendExemplars = true From 1daa10f5d75bc52ba7803bc7e65499225d846d3f Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:15:50 -0500 Subject: [PATCH 02/17] add useragent package --- pkg/useragent/useragent.go | 34 ++++++++++++++++++++++++ pkg/useragent/useragent_test.go | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 pkg/useragent/useragent.go create mode 100644 pkg/useragent/useragent_test.go diff --git a/pkg/useragent/useragent.go b/pkg/useragent/useragent.go new file mode 100644 index 000000000000..102426cf6584 --- /dev/null +++ b/pkg/useragent/useragent.go @@ -0,0 +1,34 @@ +// package useragent provides a consistent way to get a user agent for outbound http requests from Grafana Agent. +package useragent + +import ( + "fmt" + "os" + + "github.com/grafana/agent/pkg/build" +) + +func UserAgent() string { + parenthesis := "" + if mode := getRunMode(); mode != "" { + parenthesis = fmt.Sprintf("(%s)", mode) + } + return fmt.Sprintf("GrafanaAgent/%s%s", build.Version, parenthesis) +} + +// getRunMode attempts to get agent mode. +// if an unknown value is found we will simply omit it. +func getRunMode() string { + key, found := os.LookupEnv("AGENT_MODE") + if !found { + return "static" + } + switch key { + case "flow": + return "flow" + case "static", "": + return "static" + default: + return "" + } +} diff --git a/pkg/useragent/useragent_test.go b/pkg/useragent/useragent_test.go new file mode 100644 index 000000000000..5da85c83d2b4 --- /dev/null +++ b/pkg/useragent/useragent_test.go @@ -0,0 +1,46 @@ +package useragent + +import ( + "testing" + + "github.com/grafana/agent/pkg/build" + "github.com/stretchr/testify/require" +) + +func TestUserAgent(t *testing.T) { + build.Version = "v1.2.3" + tests := []struct { + Name string + Mode string + Expected string + }{ + { + Name: "basic", + Mode: "", + Expected: "GrafanaAgent/v1.2.3(static)", + }, + { + Name: "flow", + Mode: "flow", + Expected: "GrafanaAgent/v1.2.3(flow)", + }, + { + Name: "static", + Mode: "static", + Expected: "GrafanaAgent/v1.2.3(static)", + }, + { + Name: "unknown", + Mode: "blahlahblah", + // unknown mode, just leave it out of user-agent. Don't want arbitrary values to get sent here. + Expected: "GrafanaAgent/v1.2.3", + }, + } + for _, tst := range tests { + t.Run(tst.Name, func(t *testing.T) { + t.Setenv("AGENT_MODE", tst.Mode) + actual := UserAgent() + require.Equal(t, tst.Expected, actual) + }) + } +} From d82354adae0b0a83d7328b06246f678afa4debd8 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:22:05 -0500 Subject: [PATCH 03/17] space --- pkg/useragent/useragent.go | 4 +++- pkg/useragent/useragent_test.go | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/useragent/useragent.go b/pkg/useragent/useragent.go index 102426cf6584..6b96d36e47bf 100644 --- a/pkg/useragent/useragent.go +++ b/pkg/useragent/useragent.go @@ -1,4 +1,6 @@ // package useragent provides a consistent way to get a user agent for outbound http requests from Grafana Agent. +// The default User-Agent is `GrafanaAgent/$VERSION($MODE)` +// Where version is the build version of the agent and MODE is one of "static" or "flow". package useragent import ( @@ -11,7 +13,7 @@ import ( func UserAgent() string { parenthesis := "" if mode := getRunMode(); mode != "" { - parenthesis = fmt.Sprintf("(%s)", mode) + parenthesis = fmt.Sprintf(" (%s)", mode) } return fmt.Sprintf("GrafanaAgent/%s%s", build.Version, parenthesis) } diff --git a/pkg/useragent/useragent_test.go b/pkg/useragent/useragent_test.go index 5da85c83d2b4..8e60385970f9 100644 --- a/pkg/useragent/useragent_test.go +++ b/pkg/useragent/useragent_test.go @@ -17,17 +17,17 @@ func TestUserAgent(t *testing.T) { { Name: "basic", Mode: "", - Expected: "GrafanaAgent/v1.2.3(static)", + Expected: "GrafanaAgent/v1.2.3 (static)", }, { Name: "flow", Mode: "flow", - Expected: "GrafanaAgent/v1.2.3(flow)", + Expected: "GrafanaAgent/v1.2.3 (flow)", }, { Name: "static", Mode: "static", - Expected: "GrafanaAgent/v1.2.3(static)", + Expected: "GrafanaAgent/v1.2.3 (static)", }, { Name: "unknown", From 43494f2c91a824455affeb0d714e6154315f9b4b Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:41:55 -0500 Subject: [PATCH 04/17] add goos and operator flag --- pkg/useragent/useragent.go | 35 ++++++++++++++++++++++++++++----- pkg/useragent/useragent_test.go | 31 +++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/pkg/useragent/useragent.go b/pkg/useragent/useragent.go index 6b96d36e47bf..f8d1e468ff87 100644 --- a/pkg/useragent/useragent.go +++ b/pkg/useragent/useragent.go @@ -6,22 +6,39 @@ package useragent import ( "fmt" "os" + "runtime" + "strings" "github.com/grafana/agent/pkg/build" ) +const ( + operatorEnv = "AGENT_OPERATOR" + modeEnv = "AGENT_MODE" +) + +// settable by tests +var goos = runtime.GOOS + func UserAgent() string { parenthesis := "" + metadata := []string{} if mode := getRunMode(); mode != "" { - parenthesis = fmt.Sprintf(" (%s)", mode) + metadata = append(metadata, mode) + } + metadata = append(metadata, goos) + if op := getOperator(); op != "" { + metadata = append(metadata, op) + } + if len(metadata) > 0 { + parenthesis = fmt.Sprintf(" (%s)", strings.Join(metadata, ";")) } return fmt.Sprintf("GrafanaAgent/%s%s", build.Version, parenthesis) } -// getRunMode attempts to get agent mode. -// if an unknown value is found we will simply omit it. +// getRunMode attempts to get agent mode, using `unknown` for invalid values. func getRunMode() string { - key, found := os.LookupEnv("AGENT_MODE") + key, found := os.LookupEnv(modeEnv) if !found { return "static" } @@ -31,6 +48,14 @@ func getRunMode() string { case "static", "": return "static" default: - return "" + return "unknown" + } +} + +func getOperator() string { + op := os.Getenv(operatorEnv) + if op == "1" { + return "operator" } + return "" } diff --git a/pkg/useragent/useragent_test.go b/pkg/useragent/useragent_test.go index 8e60385970f9..6f52be1943e4 100644 --- a/pkg/useragent/useragent_test.go +++ b/pkg/useragent/useragent_test.go @@ -13,32 +13,51 @@ func TestUserAgent(t *testing.T) { Name string Mode string Expected string + Operator bool + GOOS string }{ { Name: "basic", Mode: "", - Expected: "GrafanaAgent/v1.2.3 (static)", + Expected: "GrafanaAgent/v1.2.3 (static;linux)", + GOOS: "linux", }, { Name: "flow", Mode: "flow", - Expected: "GrafanaAgent/v1.2.3 (flow)", + Expected: "GrafanaAgent/v1.2.3 (flow;windows)", + GOOS: "windows", }, { Name: "static", Mode: "static", - Expected: "GrafanaAgent/v1.2.3 (static)", + Expected: "GrafanaAgent/v1.2.3 (static;darwin)", + GOOS: "darwin", }, { Name: "unknown", Mode: "blahlahblah", - // unknown mode, just leave it out of user-agent. Don't want arbitrary values to get sent here. - Expected: "GrafanaAgent/v1.2.3", + // unknown mode, should not happen. But we will substitute 'unknown' to avoid allowing arbitrary cardinality. + Expected: "GrafanaAgent/v1.2.3 (unknown;freebsd)", + GOOS: "freebsd", + }, + { + Name: "operator", + Mode: "static", + Operator: true, + Expected: "GrafanaAgent/v1.2.3 (static;linux;operator)", + GOOS: "linux", }, } for _, tst := range tests { t.Run(tst.Name, func(t *testing.T) { - t.Setenv("AGENT_MODE", tst.Mode) + goos = tst.GOOS + if tst.Operator { + t.Setenv(operatorEnv, "1") + } else { + t.Setenv(operatorEnv, "") + } + t.Setenv(modeEnv, tst.Mode) actual := UserAgent() require.Equal(t, tst.Expected, actual) }) From 635c4960358af3b20358aa727694b23d245c1c81 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:47:12 -0500 Subject: [PATCH 05/17] set AGENT_OPERATOR env var --- pkg/operator/resources_pod_template.go | 17 ++++++++++++----- pkg/operator/resources_pod_template_test.go | 13 +++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pkg/operator/resources_pod_template.go b/pkg/operator/resources_pod_template.go index c826ea6ea980..b0a818b2b01d 100644 --- a/pkg/operator/resources_pod_template.go +++ b/pkg/operator/resources_pod_template.go @@ -190,12 +190,19 @@ func generatePodTemplate( finalLabels = cfg.Labels.Merge(podLabels) ) - envVars := []core_v1.EnvVar{{ - Name: "POD_NAME", - ValueFrom: &core_v1.EnvVarSource{ - FieldRef: &core_v1.ObjectFieldSelector{FieldPath: "metadata.name"}, + envVars := []core_v1.EnvVar{ + { + Name: "POD_NAME", + ValueFrom: &core_v1.EnvVarSource{ + FieldRef: &core_v1.ObjectFieldSelector{FieldPath: "metadata.name"}, + }, }, - }} + // Allows the agent to identify this is an operator-created pod. + { + Name: "AGENT_OPERATOR", + Value: "1", + }, + } envVars = append(envVars, opts.ExtraEnvVars...) useConfigReloaderVersion := d.Agent.Spec.ConfigReloaderVersion diff --git a/pkg/operator/resources_pod_template_test.go b/pkg/operator/resources_pod_template_test.go index eb855820cc9d..4e5702a50893 100644 --- a/pkg/operator/resources_pod_template_test.go +++ b/pkg/operator/resources_pod_template_test.go @@ -155,4 +155,17 @@ func Test_generatePodTemplate(t *testing.T) { require.NoError(t, err) assert.Nil(t, tmpl.Spec.RuntimeClassName) }) + + t.Run("AGENT_OPERATOR env ser", func(t *testing.T) { + deploy := gragent.Deployment{ + Agent: &gragent.GrafanaAgent{ + ObjectMeta: v1.ObjectMeta{Name: name, Namespace: name}, + }, + } + + tmpl, _, err := generatePodTemplate(cfg, "agent", deploy, podTemplateOptions{}) + require.NoError(t, err) + require.Equal(t, "1", tmpl.Spec.Containers[1].Env[1].Value) + require.Equal(t, "AGENT_OPERATOR", tmpl.Spec.Containers[1].Env[1].Name) + }) } From 89165a88f2c905d5cee8a43f508d9d5913cc955e Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:28:54 -0500 Subject: [PATCH 06/17] add space --- pkg/useragent/useragent.go | 2 +- pkg/useragent/useragent_test.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/useragent/useragent.go b/pkg/useragent/useragent.go index f8d1e468ff87..9d60f331bb67 100644 --- a/pkg/useragent/useragent.go +++ b/pkg/useragent/useragent.go @@ -31,7 +31,7 @@ func UserAgent() string { metadata = append(metadata, op) } if len(metadata) > 0 { - parenthesis = fmt.Sprintf(" (%s)", strings.Join(metadata, ";")) + parenthesis = fmt.Sprintf(" (%s)", strings.Join(metadata, "; ")) } return fmt.Sprintf("GrafanaAgent/%s%s", build.Version, parenthesis) } diff --git a/pkg/useragent/useragent_test.go b/pkg/useragent/useragent_test.go index 6f52be1943e4..0468b2b6895a 100644 --- a/pkg/useragent/useragent_test.go +++ b/pkg/useragent/useragent_test.go @@ -19,33 +19,33 @@ func TestUserAgent(t *testing.T) { { Name: "basic", Mode: "", - Expected: "GrafanaAgent/v1.2.3 (static;linux)", + Expected: "GrafanaAgent/v1.2.3 (static; linux)", GOOS: "linux", }, { Name: "flow", Mode: "flow", - Expected: "GrafanaAgent/v1.2.3 (flow;windows)", + Expected: "GrafanaAgent/v1.2.3 (flow; windows)", GOOS: "windows", }, { Name: "static", Mode: "static", - Expected: "GrafanaAgent/v1.2.3 (static;darwin)", + Expected: "GrafanaAgent/v1.2.3 (static; darwin)", GOOS: "darwin", }, { Name: "unknown", Mode: "blahlahblah", // unknown mode, should not happen. But we will substitute 'unknown' to avoid allowing arbitrary cardinality. - Expected: "GrafanaAgent/v1.2.3 (unknown;freebsd)", + Expected: "GrafanaAgent/v1.2.3 (unknown; freebsd)", GOOS: "freebsd", }, { Name: "operator", Mode: "static", Operator: true, - Expected: "GrafanaAgent/v1.2.3 (static;linux;operator)", + Expected: "GrafanaAgent/v1.2.3 (static; linux; operator)", GOOS: "linux", }, } From 1a6f84add64401606d189a92336c352afd983e0f Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:31:17 -0500 Subject: [PATCH 07/17] move to internal --- component/common/kubernetes/kubernetes.go | 4 ++-- component/common/loki/client/client.go | 4 ++-- component/loki/source/docker/docker.go | 4 ++-- component/prometheus/remotewrite/remote_write.go | 4 ++-- component/prometheus/scrape/scrape.go | 4 ++-- component/pyroscope/scrape/scrape_loop.go | 4 ++-- component/pyroscope/write/write.go | 4 ++-- component/remote/http/http.go | 4 ++-- {pkg => internal}/useragent/useragent.go | 2 +- {pkg => internal}/useragent/useragent_test.go | 2 +- pkg/logs/logs.go | 4 ++-- pkg/metrics/instance/instance.go | 6 +++--- 12 files changed, 23 insertions(+), 23 deletions(-) rename {pkg => internal}/useragent/useragent.go (98%) rename {pkg => internal}/useragent/useragent_test.go (98%) diff --git a/component/common/kubernetes/kubernetes.go b/component/common/kubernetes/kubernetes.go index 138ca7d0f31d..d46c3c0238c0 100644 --- a/component/common/kubernetes/kubernetes.go +++ b/component/common/kubernetes/kubernetes.go @@ -6,8 +6,8 @@ import ( "github.com/go-kit/log" commoncfg "github.com/grafana/agent/component/common/config" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" promconfig "github.com/prometheus/common/config" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -79,7 +79,7 @@ func (args *ClientArguments) BuildRESTConfig(l log.Logger) (*rest.Config, error) } } - cfg.UserAgent = useragent.UserAgent() + cfg.UserAgent = useragent.Get() cfg.ContentType = "application/vnd.kubernetes.protobuf" return cfg, nil diff --git a/component/common/loki/client/client.go b/component/common/loki/client/client.go index 84dfe7403db3..5b426b4a1873 100644 --- a/component/common/loki/client/client.go +++ b/component/common/loki/client/client.go @@ -13,8 +13,8 @@ import ( "time" "github.com/go-kit/log" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" "github.com/grafana/dskit/backoff" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/config" @@ -47,7 +47,7 @@ const ( var Reasons = []string{ReasonGeneric, ReasonRateLimited, ReasonStreamLimited, ReasonLineTooLong} -var userAgent = useragent.UserAgent() +var userAgent = useragent.Get() type Metrics struct { encodedBytes *prometheus.CounterVec diff --git a/component/loki/source/docker/docker.go b/component/loki/source/docker/docker.go index 0d8be85bb16e..53a25b85da47 100644 --- a/component/loki/source/docker/docker.go +++ b/component/loki/source/docker/docker.go @@ -22,8 +22,8 @@ import ( flow_relabel "github.com/grafana/agent/component/common/relabel" "github.com/grafana/agent/component/discovery" dt "github.com/grafana/agent/component/loki/source/docker/internal/dockertarget" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/relabel" @@ -40,7 +40,7 @@ func init() { }) } -var userAgent = useragent.UserAgent() +var userAgent = useragent.Get() const ( dockerLabel = model.MetaLabelPrefix + "docker_" diff --git a/component/prometheus/remotewrite/remote_write.go b/component/prometheus/remotewrite/remote_write.go index 9a89861b496a..ed6ec0089b39 100644 --- a/component/prometheus/remotewrite/remote_write.go +++ b/component/prometheus/remotewrite/remote_write.go @@ -21,9 +21,9 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" "github.com/grafana/agent/pkg/metrics/wal" - "github.com/grafana/agent/pkg/useragent" "github.com/prometheus/prometheus/model/timestamp" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/storage/remote" @@ -35,7 +35,7 @@ import ( var remoteFlushDeadline = 1 * time.Minute func init() { - remote.UserAgent = useragent.UserAgent() + remote.UserAgent = useragent.Get() component.Register(component.Registration{ Name: "prometheus.remote_write", diff --git a/component/prometheus/scrape/scrape.go b/component/prometheus/scrape/scrape.go index a6f3d28bd723..d700221d1a15 100644 --- a/component/prometheus/scrape/scrape.go +++ b/component/prometheus/scrape/scrape.go @@ -12,8 +12,8 @@ import ( component_config "github.com/grafana/agent/component/common/config" "github.com/grafana/agent/component/discovery" "github.com/grafana/agent/component/prometheus" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" "github.com/grafana/agent/service/cluster" "github.com/grafana/agent/service/http" "github.com/grafana/agent/service/labelstore" @@ -27,7 +27,7 @@ import ( ) func init() { - scrape.UserAgent = useragent.UserAgent() + scrape.UserAgent = useragent.Get() component.Register(component.Registration{ Name: "prometheus.scrape", diff --git a/component/pyroscope/scrape/scrape_loop.go b/component/pyroscope/scrape/scrape_loop.go index 261233a329ed..2b74930ed191 100644 --- a/component/pyroscope/scrape/scrape_loop.go +++ b/component/pyroscope/scrape/scrape_loop.go @@ -12,8 +12,8 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component/pyroscope" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" commonconfig "github.com/prometheus/common/config" "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/util/pool" @@ -22,7 +22,7 @@ import ( var ( payloadBuffers = pool.New(1e3, 1e6, 3, func(sz int) interface{} { return make([]byte, 0, sz) }) - userAgentHeader = useragent.UserAgent() + userAgentHeader = useragent.Get() ) type scrapePool struct { diff --git a/component/pyroscope/write/write.go b/component/pyroscope/write/write.go index ab376ac46439..165a7f20a812 100644 --- a/component/pyroscope/write/write.go +++ b/component/pyroscope/write/write.go @@ -8,8 +8,8 @@ import ( "github.com/bufbuild/connect-go" "github.com/grafana/agent/component/pyroscope" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" "github.com/oklog/run" commonconfig "github.com/prometheus/common/config" "github.com/prometheus/common/model" @@ -25,7 +25,7 @@ import ( ) var ( - userAgent = useragent.UserAgent() + userAgent = useragent.Get() DefaultArguments = func() Arguments { return Arguments{} } diff --git a/component/remote/http/http.go b/component/remote/http/http.go index c95e41409bd5..c45833ba81df 100644 --- a/component/remote/http/http.go +++ b/component/remote/http/http.go @@ -13,13 +13,13 @@ import ( "github.com/go-kit/log" "github.com/grafana/agent/component" common_config "github.com/grafana/agent/component/common/config" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/flow/logging/level" - "github.com/grafana/agent/pkg/useragent" "github.com/grafana/river/rivertypes" prom_config "github.com/prometheus/common/config" ) -var userAgent = useragent.UserAgent() +var userAgent = useragent.Get() func init() { component.Register(component.Registration{ diff --git a/pkg/useragent/useragent.go b/internal/useragent/useragent.go similarity index 98% rename from pkg/useragent/useragent.go rename to internal/useragent/useragent.go index 9d60f331bb67..43798cc3f5fe 100644 --- a/pkg/useragent/useragent.go +++ b/internal/useragent/useragent.go @@ -20,7 +20,7 @@ const ( // settable by tests var goos = runtime.GOOS -func UserAgent() string { +func Get() string { parenthesis := "" metadata := []string{} if mode := getRunMode(); mode != "" { diff --git a/pkg/useragent/useragent_test.go b/internal/useragent/useragent_test.go similarity index 98% rename from pkg/useragent/useragent_test.go rename to internal/useragent/useragent_test.go index 0468b2b6895a..5453d4acd69c 100644 --- a/pkg/useragent/useragent_test.go +++ b/internal/useragent/useragent_test.go @@ -58,7 +58,7 @@ func TestUserAgent(t *testing.T) { t.Setenv(operatorEnv, "") } t.Setenv(modeEnv, tst.Mode) - actual := UserAgent() + actual := Get() require.Equal(t, tst.Expected, actual) }) } diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index 65e03d4cc9b6..a821298be9fd 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -11,7 +11,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" - "github.com/grafana/agent/pkg/useragent" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/util" "github.com/grafana/loki/clients/pkg/promtail" "github.com/grafana/loki/clients/pkg/promtail/api" @@ -25,7 +25,7 @@ import ( ) func init() { - client.UserAgent = useragent.UserAgent() + client.UserAgent = useragent.Get() } // Logs is a Logs log collection. It uses multiple distinct sets of Logs diff --git a/pkg/metrics/instance/instance.go b/pkg/metrics/instance/instance.go index 21263125f2d1..3d0e9fd47ca7 100644 --- a/pkg/metrics/instance/instance.go +++ b/pkg/metrics/instance/instance.go @@ -17,8 +17,8 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/grafana/agent/internal/useragent" "github.com/grafana/agent/pkg/metrics/wal" - "github.com/grafana/agent/pkg/useragent" "github.com/grafana/agent/pkg/util" "github.com/oklog/run" "github.com/prometheus/client_golang/prometheus" @@ -35,8 +35,8 @@ import ( ) func init() { - remote.UserAgent = useragent.UserAgent() - scrape.UserAgent = useragent.UserAgent() + remote.UserAgent = useragent.Get() + scrape.UserAgent = useragent.Get() // default remote_write send_exemplars to true config.DefaultRemoteWriteConfig.SendExemplars = true From a68210dc38ee622d626aa8d50114441432c802d8 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:36:01 -0500 Subject: [PATCH 08/17] switch to deploy mode env --- internal/useragent/useragent.go | 21 ++++++++++----------- internal/useragent/useragent_test.go | 26 +++++++++++--------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/internal/useragent/useragent.go b/internal/useragent/useragent.go index 43798cc3f5fe..6627527647f3 100644 --- a/internal/useragent/useragent.go +++ b/internal/useragent/useragent.go @@ -13,8 +13,8 @@ import ( ) const ( - operatorEnv = "AGENT_OPERATOR" - modeEnv = "AGENT_MODE" + deployModeEnv = "AGENT_DEPLOY_MODE" + modeEnv = "AGENT_MODE" ) // settable by tests @@ -27,7 +27,7 @@ func Get() string { metadata = append(metadata, mode) } metadata = append(metadata, goos) - if op := getOperator(); op != "" { + if op := getDeployMode(); op != "" { metadata = append(metadata, op) } if len(metadata) > 0 { @@ -38,10 +38,7 @@ func Get() string { // getRunMode attempts to get agent mode, using `unknown` for invalid values. func getRunMode() string { - key, found := os.LookupEnv(modeEnv) - if !found { - return "static" - } + key := os.Getenv(modeEnv) switch key { case "flow": return "flow" @@ -52,10 +49,12 @@ func getRunMode() string { } } -func getOperator() string { - op := os.Getenv(operatorEnv) - if op == "1" { - return "operator" +func getDeployMode() string { + op := os.Getenv(deployModeEnv) + // only return known modes + switch op { + case "operator", "helm", "docker", "deb", "rpm", "brew": + return op } return "" } diff --git a/internal/useragent/useragent_test.go b/internal/useragent/useragent_test.go index 5453d4acd69c..261533a92893 100644 --- a/internal/useragent/useragent_test.go +++ b/internal/useragent/useragent_test.go @@ -10,11 +10,11 @@ import ( func TestUserAgent(t *testing.T) { build.Version = "v1.2.3" tests := []struct { - Name string - Mode string - Expected string - Operator bool - GOOS string + Name string + Mode string + Expected string + DeployMode string + GOOS string }{ { Name: "basic", @@ -42,21 +42,17 @@ func TestUserAgent(t *testing.T) { GOOS: "freebsd", }, { - Name: "operator", - Mode: "static", - Operator: true, - Expected: "GrafanaAgent/v1.2.3 (static; linux; operator)", - GOOS: "linux", + Name: "operator", + Mode: "static", + DeployMode: "operator", + Expected: "GrafanaAgent/v1.2.3 (static; linux; operator)", + GOOS: "linux", }, } for _, tst := range tests { t.Run(tst.Name, func(t *testing.T) { goos = tst.GOOS - if tst.Operator { - t.Setenv(operatorEnv, "1") - } else { - t.Setenv(operatorEnv, "") - } + t.Setenv(deployModeEnv, tst.DeployMode) t.Setenv(modeEnv, tst.Mode) actual := Get() require.Equal(t, tst.Expected, actual) From c07120dc5f998d1597806cf114732761bf048cee Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:36:42 -0500 Subject: [PATCH 09/17] switch to deploy mode env --- pkg/operator/resources_pod_template.go | 4 ++-- pkg/operator/resources_pod_template_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/operator/resources_pod_template.go b/pkg/operator/resources_pod_template.go index b0a818b2b01d..5e97851cd8ce 100644 --- a/pkg/operator/resources_pod_template.go +++ b/pkg/operator/resources_pod_template.go @@ -199,8 +199,8 @@ func generatePodTemplate( }, // Allows the agent to identify this is an operator-created pod. { - Name: "AGENT_OPERATOR", - Value: "1", + Name: "AGENT_DEPLOY_MODE", + Value: "operator", }, } envVars = append(envVars, opts.ExtraEnvVars...) diff --git a/pkg/operator/resources_pod_template_test.go b/pkg/operator/resources_pod_template_test.go index 4e5702a50893..20566f578bb3 100644 --- a/pkg/operator/resources_pod_template_test.go +++ b/pkg/operator/resources_pod_template_test.go @@ -165,7 +165,7 @@ func Test_generatePodTemplate(t *testing.T) { tmpl, _, err := generatePodTemplate(cfg, "agent", deploy, podTemplateOptions{}) require.NoError(t, err) - require.Equal(t, "1", tmpl.Spec.Containers[1].Env[1].Value) - require.Equal(t, "AGENT_OPERATOR", tmpl.Spec.Containers[1].Env[1].Name) + require.Equal(t, "operator", tmpl.Spec.Containers[1].Env[1].Value) + require.Equal(t, "AGENT_DEPLOY_MODE", tmpl.Spec.Containers[1].Env[1].Name) }) } From ddd792314618d1ad3742a06666a197a74ee01d69 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:37:24 -0500 Subject: [PATCH 10/17] add deploy mode to helm chart --- .../helm/charts/grafana-agent/templates/containers/_agent.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/operations/helm/charts/grafana-agent/templates/containers/_agent.yaml b/operations/helm/charts/grafana-agent/templates/containers/_agent.yaml index c486c8ec30d8..32d081b58dc4 100644 --- a/operations/helm/charts/grafana-agent/templates/containers/_agent.yaml +++ b/operations/helm/charts/grafana-agent/templates/containers/_agent.yaml @@ -27,6 +27,8 @@ env: - name: AGENT_MODE value: {{ .Values.agent.mode }} + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: From 539c01fc6b2a278a1cf5d4b8399fca8ad842b156 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:39:10 -0500 Subject: [PATCH 11/17] add deploy mode to deb and rpm --- packaging/grafana-agent-flow/deb/grafana-agent-flow.service | 1 + packaging/grafana-agent-flow/rpm/grafana-agent-flow.service | 1 + packaging/grafana-agent/deb/grafana-agent.service | 1 + packaging/grafana-agent/rpm/grafana-agent.service | 1 + 4 files changed, 4 insertions(+) diff --git a/packaging/grafana-agent-flow/deb/grafana-agent-flow.service b/packaging/grafana-agent-flow/deb/grafana-agent-flow.service index aaf037d9f162..afca01973135 100644 --- a/packaging/grafana-agent-flow/deb/grafana-agent-flow.service +++ b/packaging/grafana-agent-flow/deb/grafana-agent-flow.service @@ -8,6 +8,7 @@ After=network-online.target Restart=always User=grafana-agent-flow Environment=HOSTNAME=%H +Environment=AGENT_DEPLOY_MODE=deb EnvironmentFile=/etc/default/grafana-agent-flow WorkingDirectory=/var/lib/grafana-agent-flow ExecStart=/usr/bin/grafana-agent-flow run $CUSTOM_ARGS --storage.path=/var/lib/grafana-agent-flow $CONFIG_FILE diff --git a/packaging/grafana-agent-flow/rpm/grafana-agent-flow.service b/packaging/grafana-agent-flow/rpm/grafana-agent-flow.service index 98638ed8e47a..330960790500 100644 --- a/packaging/grafana-agent-flow/rpm/grafana-agent-flow.service +++ b/packaging/grafana-agent-flow/rpm/grafana-agent-flow.service @@ -8,6 +8,7 @@ After=network-online.target Restart=always User=grafana-agent-flow Environment=HOSTNAME=%H +Environment=AGENT_DEPLOY_MODE=rpm EnvironmentFile=/etc/sysconfig/grafana-agent-flow WorkingDirectory=/var/lib/grafana-agent-flow ExecStart=/usr/bin/grafana-agent-flow run $CUSTOM_ARGS --storage.path=/var/lib/grafana-agent-flow $CONFIG_FILE diff --git a/packaging/grafana-agent/deb/grafana-agent.service b/packaging/grafana-agent/deb/grafana-agent.service index 1f2d95315f03..eea8677f3f6e 100644 --- a/packaging/grafana-agent/deb/grafana-agent.service +++ b/packaging/grafana-agent/deb/grafana-agent.service @@ -8,6 +8,7 @@ After=network-online.target Restart=always User=grafana-agent Environment=HOSTNAME=%H +Environment=AGENT_DEPLOY_MODE=deb EnvironmentFile=/etc/default/grafana-agent WorkingDirectory=/var/lib/grafana-agent ExecStart=/usr/bin/grafana-agent --config.file $CONFIG_FILE $CUSTOM_ARGS diff --git a/packaging/grafana-agent/rpm/grafana-agent.service b/packaging/grafana-agent/rpm/grafana-agent.service index fb5e24607a98..0089827dcd85 100644 --- a/packaging/grafana-agent/rpm/grafana-agent.service +++ b/packaging/grafana-agent/rpm/grafana-agent.service @@ -8,6 +8,7 @@ After=network-online.target Restart=always User=grafana-agent Environment=HOSTNAME=%H +Environment=AGENT_DEPLOY_MODE=rpm EnvironmentFile=/etc/sysconfig/grafana-agent WorkingDirectory=/var/lib/grafana-agent ExecStart=/usr/bin/grafana-agent --config.file $CONFIG_FILE $CUSTOM_ARGS From 7b4ec8fbaea288cffc8b54edb672c843840b8ac3 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:41:11 -0500 Subject: [PATCH 12/17] add deploy mode to docker image --- cmd/grafana-agent/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/grafana-agent/Dockerfile b/cmd/grafana-agent/Dockerfile index f03bd4efdfd0..7c9c3ae0661a 100644 --- a/cmd/grafana-agent/Dockerfile +++ b/cmd/grafana-agent/Dockerfile @@ -47,4 +47,5 @@ COPY cmd/grafana-agent/agent-local-config.yaml /etc/agent/agent.yaml ENTRYPOINT ["/bin/grafana-agent"] +ENV AGENT_DEPLOY_MODE=docker CMD ["--config.file=/etc/agent/agent.yaml", "--metrics.wal-directory=/etc/agent/data"] From 83b4b6df814adc3e5da4c5644b64efb607477f4a Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:43:46 -0500 Subject: [PATCH 13/17] tests --- internal/useragent/useragent_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/internal/useragent/useragent_test.go b/internal/useragent/useragent_test.go index 261533a92893..f0706f8a5ebc 100644 --- a/internal/useragent/useragent_test.go +++ b/internal/useragent/useragent_test.go @@ -48,6 +48,34 @@ func TestUserAgent(t *testing.T) { Expected: "GrafanaAgent/v1.2.3 (static; linux; operator)", GOOS: "linux", }, + { + Name: "deb", + Mode: "flow", + DeployMode: "deb", + Expected: "GrafanaAgent/v1.2.3 (flow; linux; deb)", + GOOS: "linux", + }, + { + Name: "rpm", + Mode: "static", + DeployMode: "rpm", + Expected: "GrafanaAgent/v1.2.3 (static; linux; rpm)", + GOOS: "linux", + }, + { + Name: "docker", + Mode: "flow", + DeployMode: "docker", + Expected: "GrafanaAgent/v1.2.3 (flow; linux; docker)", + GOOS: "linux", + }, + { + Name: "helm", + Mode: "flow", + DeployMode: "helm", + Expected: "GrafanaAgent/v1.2.3 (flow; linux; helm)", + GOOS: "linux", + }, } for _, tst := range tests { t.Run(tst.Name, func(t *testing.T) { From 3b83779e01cfb46ef2cc1ded73371dfb7af35f90 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:47:05 -0500 Subject: [PATCH 14/17] regen helm --- .../grafana-agent/templates/controllers/statefulset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/deployment.yaml | 2 ++ .../grafana-agent/templates/controllers/deployment.yaml | 2 ++ .../grafana-agent/templates/controllers/statefulset.yaml | 2 ++ .../grafana-agent/templates/controllers/statefulset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../envFrom/grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ .../grafana-agent/templates/controllers/daemonset.yaml | 2 ++ 23 files changed, 46 insertions(+) diff --git a/operations/helm/tests/clustering/grafana-agent/templates/controllers/statefulset.yaml b/operations/helm/tests/clustering/grafana-agent/templates/controllers/statefulset.yaml index 1aca2fb93859..69354494639f 100644 --- a/operations/helm/tests/clustering/grafana-agent/templates/controllers/statefulset.yaml +++ b/operations/helm/tests/clustering/grafana-agent/templates/controllers/statefulset.yaml @@ -41,6 +41,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/controller-volumes-extra/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/controller-volumes-extra/grafana-agent/templates/controllers/daemonset.yaml index f19ed25ad63b..de0c1e307bc6 100644 --- a/operations/helm/tests/controller-volumes-extra/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/controller-volumes-extra/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-daemonset-hostnetwork/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/create-daemonset-hostnetwork/grafana-agent/templates/controllers/daemonset.yaml index f7d69461630e..0921197e38ef 100644 --- a/operations/helm/tests/create-daemonset-hostnetwork/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/create-daemonset-hostnetwork/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-daemonset/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/create-daemonset/grafana-agent/templates/controllers/daemonset.yaml index 0038338c8e15..640801c35de4 100644 --- a/operations/helm/tests/create-daemonset/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/create-daemonset/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-deployment-autoscaling/grafana-agent/templates/controllers/deployment.yaml b/operations/helm/tests/create-deployment-autoscaling/grafana-agent/templates/controllers/deployment.yaml index 33115f481940..c5383a670125 100644 --- a/operations/helm/tests/create-deployment-autoscaling/grafana-agent/templates/controllers/deployment.yaml +++ b/operations/helm/tests/create-deployment-autoscaling/grafana-agent/templates/controllers/deployment.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-deployment/grafana-agent/templates/controllers/deployment.yaml b/operations/helm/tests/create-deployment/grafana-agent/templates/controllers/deployment.yaml index 17238227bbe4..37fcf8fc0dc6 100644 --- a/operations/helm/tests/create-deployment/grafana-agent/templates/controllers/deployment.yaml +++ b/operations/helm/tests/create-deployment/grafana-agent/templates/controllers/deployment.yaml @@ -37,6 +37,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-statefulset-autoscaling/grafana-agent/templates/controllers/statefulset.yaml b/operations/helm/tests/create-statefulset-autoscaling/grafana-agent/templates/controllers/statefulset.yaml index 56f4e29353a8..bc9d31d9cf75 100644 --- a/operations/helm/tests/create-statefulset-autoscaling/grafana-agent/templates/controllers/statefulset.yaml +++ b/operations/helm/tests/create-statefulset-autoscaling/grafana-agent/templates/controllers/statefulset.yaml @@ -38,6 +38,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/create-statefulset/grafana-agent/templates/controllers/statefulset.yaml b/operations/helm/tests/create-statefulset/grafana-agent/templates/controllers/statefulset.yaml index 57ffe8a5b38d..7a641636bc13 100644 --- a/operations/helm/tests/create-statefulset/grafana-agent/templates/controllers/statefulset.yaml +++ b/operations/helm/tests/create-statefulset/grafana-agent/templates/controllers/statefulset.yaml @@ -39,6 +39,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/custom-config/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/custom-config/grafana-agent/templates/controllers/daemonset.yaml index 0038338c8e15..640801c35de4 100644 --- a/operations/helm/tests/custom-config/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/custom-config/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/default-values/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/default-values/grafana-agent/templates/controllers/daemonset.yaml index 0038338c8e15..640801c35de4 100644 --- a/operations/helm/tests/default-values/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/default-values/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/enable-servicemonitor/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/enable-servicemonitor/grafana-agent/templates/controllers/daemonset.yaml index 0038338c8e15..640801c35de4 100644 --- a/operations/helm/tests/enable-servicemonitor/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/enable-servicemonitor/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/envFrom/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/envFrom/grafana-agent/templates/controllers/daemonset.yaml index af9f8733bfa3..ab153416d599 100644 --- a/operations/helm/tests/envFrom/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/envFrom/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/existing-config/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/existing-config/grafana-agent/templates/controllers/daemonset.yaml index b3acab2c314f..39cf2262d661 100644 --- a/operations/helm/tests/existing-config/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/existing-config/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/extra-env/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/extra-env/grafana-agent/templates/controllers/daemonset.yaml index b375f5c2d740..2b4663c47d86 100644 --- a/operations/helm/tests/extra-env/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/extra-env/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/extra-ports/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/extra-ports/grafana-agent/templates/controllers/daemonset.yaml index b949dab97850..388eb68a16eb 100644 --- a/operations/helm/tests/extra-ports/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/extra-ports/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/faro-ingress/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/faro-ingress/grafana-agent/templates/controllers/daemonset.yaml index 1a4310f118dc..840b64e244cd 100644 --- a/operations/helm/tests/faro-ingress/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/faro-ingress/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/global-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/global-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml index 23c984e2bd59..93e08d06f66b 100644 --- a/operations/helm/tests/global-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/global-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml @@ -41,6 +41,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/global-image-registry/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/global-image-registry/grafana-agent/templates/controllers/daemonset.yaml index fb0c5bccfba3..83d83473d371 100644 --- a/operations/helm/tests/global-image-registry/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/global-image-registry/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/initcontainers/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/initcontainers/grafana-agent/templates/controllers/daemonset.yaml index 00b72a087f56..dea955f56900 100644 --- a/operations/helm/tests/initcontainers/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/initcontainers/grafana-agent/templates/controllers/daemonset.yaml @@ -54,6 +54,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/local-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/local-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml index c9bbe3a6d165..8be0679577ea 100644 --- a/operations/helm/tests/local-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/local-image-pullsecrets/grafana-agent/templates/controllers/daemonset.yaml @@ -38,6 +38,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/local-image-registry/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/local-image-registry/grafana-agent/templates/controllers/daemonset.yaml index fb0c5bccfba3..83d83473d371 100644 --- a/operations/helm/tests/local-image-registry/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/local-image-registry/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/nodeselectors-and-tolerations/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/nodeselectors-and-tolerations/grafana-agent/templates/controllers/daemonset.yaml index d38ffc899ae0..a9d14c8e2d29 100644 --- a/operations/helm/tests/nodeselectors-and-tolerations/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/nodeselectors-and-tolerations/grafana-agent/templates/controllers/daemonset.yaml @@ -36,6 +36,8 @@ spec: env: - name: AGENT_MODE value: flow + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: diff --git a/operations/helm/tests/static-mode/grafana-agent/templates/controllers/daemonset.yaml b/operations/helm/tests/static-mode/grafana-agent/templates/controllers/daemonset.yaml index afd7d674720b..5fc4e67fd107 100644 --- a/operations/helm/tests/static-mode/grafana-agent/templates/controllers/daemonset.yaml +++ b/operations/helm/tests/static-mode/grafana-agent/templates/controllers/daemonset.yaml @@ -33,6 +33,8 @@ spec: env: - name: AGENT_MODE value: static + - name: AGENT_DEPLOY_MODE + value: "helm" - name: HOSTNAME valueFrom: fieldRef: From 315c1bff8ced0c814d56f65f4e0d75a98a41135f Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:46:29 -0500 Subject: [PATCH 15/17] use binary as fallback deploy mode --- internal/useragent/useragent.go | 4 ++-- internal/useragent/useragent_test.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/useragent/useragent.go b/internal/useragent/useragent.go index 6627527647f3..bb6043f97aa3 100644 --- a/internal/useragent/useragent.go +++ b/internal/useragent/useragent.go @@ -51,10 +51,10 @@ func getRunMode() string { func getDeployMode() string { op := os.Getenv(deployModeEnv) - // only return known modes + // only return known modes. Use "binary" as a default catch-all. switch op { case "operator", "helm", "docker", "deb", "rpm", "brew": return op } - return "" + return "binary" } diff --git a/internal/useragent/useragent_test.go b/internal/useragent/useragent_test.go index f0706f8a5ebc..abaf0b80d192 100644 --- a/internal/useragent/useragent_test.go +++ b/internal/useragent/useragent_test.go @@ -19,26 +19,26 @@ func TestUserAgent(t *testing.T) { { Name: "basic", Mode: "", - Expected: "GrafanaAgent/v1.2.3 (static; linux)", + Expected: "GrafanaAgent/v1.2.3 (static; linux; binary)", GOOS: "linux", }, { Name: "flow", Mode: "flow", - Expected: "GrafanaAgent/v1.2.3 (flow; windows)", + Expected: "GrafanaAgent/v1.2.3 (flow; windows; binary)", GOOS: "windows", }, { Name: "static", Mode: "static", - Expected: "GrafanaAgent/v1.2.3 (static; darwin)", + Expected: "GrafanaAgent/v1.2.3 (static; darwin; binary)", GOOS: "darwin", }, { Name: "unknown", Mode: "blahlahblah", // unknown mode, should not happen. But we will substitute 'unknown' to avoid allowing arbitrary cardinality. - Expected: "GrafanaAgent/v1.2.3 (unknown; freebsd)", + Expected: "GrafanaAgent/v1.2.3 (unknown; freebsd; binary)", GOOS: "freebsd", }, { From 8d5124dbc9d08e71e27aef913ddf256d1351a291 Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:47:40 -0500 Subject: [PATCH 16/17] fix test --- pkg/operator/resources_pod_template_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/operator/resources_pod_template_test.go b/pkg/operator/resources_pod_template_test.go index 20566f578bb3..fa189a203385 100644 --- a/pkg/operator/resources_pod_template_test.go +++ b/pkg/operator/resources_pod_template_test.go @@ -156,7 +156,7 @@ func Test_generatePodTemplate(t *testing.T) { assert.Nil(t, tmpl.Spec.RuntimeClassName) }) - t.Run("AGENT_OPERATOR env ser", func(t *testing.T) { + t.Run("AGENT_DEPLOY_MODE env ser", func(t *testing.T) { deploy := gragent.Deployment{ Agent: &gragent.GrafanaAgent{ ObjectMeta: v1.ObjectMeta{Name: name, Namespace: name}, From a9649f70c23276c95336e5d22df27ff41435beef Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:54:48 -0500 Subject: [PATCH 17/17] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3e1a9925073..e2f10620bf6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -152,6 +152,8 @@ Main (unreleased) - Use Go 1.21.4 for builds. (@rfratto) +- Change User-Agent header for outbound requests to include agent-mode, goos, and deployment mode. Example `GrafanaAgent/v0.38.0 (flow; linux; docker)` (@captncraig) + v0.37.4 (2023-11-06) -----------------