diff --git a/CHANGELOG.md b/CHANGELOG.md index eaf08836f3b0..9747dc90869b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,37 @@ This document contains a historical list of changes between releases. Only changes that impact end-user behavior are listed; changes to documentation or internal API changes are not present. +v0.35.2 (2023-07-27) +-------------------- + +### Bugfixes + +- Fix issue where the flow mode UI would show an empty page when navigating to + an unhealthy `prometheus.operator` component or a healthy + `prometheus.operator` component which discovered no custom resources. + (@rfratto) + +- Fix panic when using `oauth2` without specifying `tls_config`. (@mattdurham) + +- Fix issue where series records would never get written to the WAL if a scrape + was rolled back, resulting in "dropped sample for series that was not + explicitly dropped via relabelling" log messages. (@rfratto) + +- Fix RPM file digests so that installation on FIPS-enabled systems succeeds. (@andrewimeson) + +### Other changes + +- Compile journald support into builds of `grafana-agentctl` so + `grafana-agentctl test-logs` functions as expected when testing tailing the + systemd journal. (@rfratto) + v0.35.1 (2023-07-25) -------------------- ### Bugfixes - Fix incorrect display of trace IDs in the automatic_logging processor of static mode's traces subsystem. - Users of the static mode's service graph processor are also advised to upgrade, + Users of the static mode's service graph processor are also advised to upgrade, although the bug should theoretically not affect them. (@ptodev) v0.35.0 (2023-07-18) @@ -21,7 +45,7 @@ v0.35.0 (2023-07-18) > **BREAKING CHANGES**: This release has breaking changes. Please read entries > carefully and consult the [upgrade guide][] for specific instructions. - + ### Breaking changes - The algorithm for the "hash" action of `otelcol.processor.attributes` has changed. diff --git a/cmd/grafana-agentctl/Dockerfile b/cmd/grafana-agentctl/Dockerfile index 47aafdff21fe..4509be51caf8 100644 --- a/cmd/grafana-agentctl/Dockerfile +++ b/cmd/grafana-agentctl/Dockerfile @@ -20,6 +20,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ GOOS="$TARGETOS" GOARCH="$TARGETARCH" GOARM="${TARGETVARIANT#v}" \ RELEASE_BUILD="${RELEASE_BUILD}" VERSION="${VERSION}" \ + GO_TAGS="promtail_journal_enabled" \ make agentctl FROM ubuntu:lunar diff --git a/component/common/config/types.go b/component/common/config/types.go index 1745391b5c4b..e3c7a66df59f 100644 --- a/component/common/config/types.go +++ b/component/common/config/types.go @@ -292,16 +292,19 @@ func (o *OAuth2Config) Convert() *config.OAuth2 { if o == nil { return nil } - return &config.OAuth2{ + oa := &config.OAuth2{ ClientID: o.ClientID, ClientSecret: config.Secret(o.ClientSecret), ClientSecretFile: o.ClientSecretFile, Scopes: o.Scopes, TokenURL: o.TokenURL, EndpointParams: o.EndpointParams, - TLSConfig: *o.TLSConfig.Convert(), ProxyConfig: config.ProxyConfig{ ProxyURL: o.ProxyURL.Convert(), }, } + if o.TLSConfig != nil { + oa.TLSConfig = *o.TLSConfig.Convert() + } + return oa } diff --git a/component/common/config/types_test.go b/component/common/config/types_test.go index 3a1a8b6c7e84..ccb48ebffb5f 100644 --- a/component/common/config/types_test.go +++ b/component/common/config/types_test.go @@ -160,6 +160,24 @@ func TestHTTPClientConfigOath2ClientSecretFile(t *testing.T) { require.NoError(t, err) } +func TestOath2TLSConvert(t *testing.T) { + var exampleRiverConfig = ` + oauth2 { + client_id = "client_id" + client_secret_file = "/path/to/file.oath2" + scopes = ["scope1", "scope2"] + token_url = "token_url" + endpoint_params = {"param1" = "value1", "param2" = "value2"} + } +` + + var httpClientConfig HTTPClientConfig + err := river.Unmarshal([]byte(exampleRiverConfig), &httpClientConfig) + require.NoError(t, err) + newCfg := httpClientConfig.Convert() + require.NotNil(t, newCfg) +} + func TestHTTPClientBadConfig(t *testing.T) { var exampleRiverConfig = ` bearer_token = "token" diff --git a/component/prometheus/operator/common/crdmanager.go b/component/prometheus/operator/common/crdmanager.go index 3cba54c0c795..c8902372a0d9 100644 --- a/component/prometheus/operator/common/crdmanager.go +++ b/component/prometheus/operator/common/crdmanager.go @@ -205,7 +205,11 @@ func (c *crdManager) DebugInfo() interface{} { for _, pm := range c.debugInfo { info.DiscoveredCRDs = append(info.DiscoveredCRDs, pm) } - info.Targets = compscrape.BuildTargetStatuses(c.scrapeManager.TargetsActive()) + + // c.scrapeManager can be nil if the client failed to build. + if c.scrapeManager != nil { + info.Targets = compscrape.BuildTargetStatuses(c.scrapeManager.TargetsActive()) + } return info } diff --git a/docs/sources/operator/deploy-agent-operator-resources.md b/docs/sources/operator/deploy-agent-operator-resources.md index ca4e3a8b796f..ed2deb9c7f4a 100644 --- a/docs/sources/operator/deploy-agent-operator-resources.md +++ b/docs/sources/operator/deploy-agent-operator-resources.md @@ -58,7 +58,7 @@ To deploy the `GrafanaAgent` resource: labels: app: grafana-agent spec: - image: grafana/agent:v0.35.0 + image: grafana/agent:v0.35.2 integrations: selector: matchLabels: diff --git a/docs/sources/operator/getting-started.md b/docs/sources/operator/getting-started.md index cd0faf5920ce..53c03c5a1dbd 100644 --- a/docs/sources/operator/getting-started.md +++ b/docs/sources/operator/getting-started.md @@ -74,7 +74,7 @@ To install Agent Operator: serviceAccountName: grafana-agent-operator containers: - name: operator - image: grafana/agent-operator:v0.35.0 + image: grafana/agent-operator:v0.35.2 args: - --kubelet-service=default/kubelet --- diff --git a/docs/sources/static/configuration/integrations/node-exporter-config.md b/docs/sources/static/configuration/integrations/node-exporter-config.md index a0e0cbaa5d34..29dda106edfa 100644 --- a/docs/sources/static/configuration/integrations/node-exporter-config.md +++ b/docs/sources/static/configuration/integrations/node-exporter-config.md @@ -29,7 +29,7 @@ docker run \ -v "/proc:/host/proc:ro,rslave" \ -v /tmp/agent:/etc/agent \ -v /path/to/config.yaml:/etc/agent-config/agent.yaml \ - grafana/agent:v0.35.0 \ + grafana/agent:v0.35.2 \ --config.file=/etc/agent-config/agent.yaml ``` @@ -68,7 +68,7 @@ metadata: name: agent spec: containers: - - image: grafana/agent:v0.35.0 + - image: grafana/agent:v0.35.2 name: agent args: - --config.file=/etc/agent-config/agent.yaml @@ -368,7 +368,7 @@ the Agent is running on is a no-op. # Perf software profilers that should be collected. perf_software_profilers: [- ] - + # Disable perf cache profilers. [perf_disable_cache_profilers: | default = false] diff --git a/docs/sources/static/configuration/integrations/process-exporter-config.md b/docs/sources/static/configuration/integrations/process-exporter-config.md index fdcb314d92e2..5263e838f2b6 100644 --- a/docs/sources/static/configuration/integrations/process-exporter-config.md +++ b/docs/sources/static/configuration/integrations/process-exporter-config.md @@ -21,7 +21,7 @@ docker run \ -v "/proc:/proc:ro" \ -v /tmp/agent:/etc/agent \ -v /path/to/config.yaml:/etc/agent-config/agent.yaml \ - grafana/agent:v0.35.0 \ + grafana/agent:v0.35.2 \ --config.file=/etc/agent-config/agent.yaml ``` @@ -38,7 +38,7 @@ metadata: name: agent spec: containers: - - image: grafana/agent:v0.35.0 + - image: grafana/agent:v0.35.2 name: agent args: - --config.file=/etc/agent-config/agent.yaml diff --git a/docs/sources/static/set-up/install/install-agent-docker.md b/docs/sources/static/set-up/install/install-agent-docker.md index 7f9a07caeace..96962fe93c18 100644 --- a/docs/sources/static/set-up/install/install-agent-docker.md +++ b/docs/sources/static/set-up/install/install-agent-docker.md @@ -33,7 +33,7 @@ To run a Grafana Agent Docker container on Linux, run the following command in a docker run \ -v WAL_DATA_DIRECTORY:/etc/agent/data \ -v CONFIG_FILE_PATH:/etc/agent/agent.yaml \ - grafana/agent:v0.35.0 + grafana/agent:v0.35.2 ``` Replace `CONFIG_FILE_PATH` with the configuration file path on your Linux host system. @@ -50,7 +50,7 @@ To run a Grafana Agent Docker container on Windows, run the following command in docker run ^ -v WAL_DATA_DIRECTORY:C:\etc\grafana-agent\data ^ -v CONFIG_FILE_PATH:C:\etc\grafana-agent ^ - grafana/agent:v0.35.0-windows + grafana/agent:v0.35.2-windows ``` Replace the following: diff --git a/packaging/grafana-agent-flow/rpm/gpg-sign.sh b/packaging/grafana-agent-flow/rpm/gpg-sign.sh index c33592d42f3d..7d84262c6cbb 100755 --- a/packaging/grafana-agent-flow/rpm/gpg-sign.sh +++ b/packaging/grafana-agent-flow/rpm/gpg-sign.sh @@ -18,6 +18,7 @@ echo "%_gpg_name Grafana Labs %_gpg_path /root/.gnupg %_gpgbin /usr/bin/gpg %_gpg_digest_algo sha256 +%_binary_filedigest_algorithm 8 %__gpg /usr/bin/gpg %__gpg_sign_cmd %{__gpg} \ gpg --no-tty --batch --yes --no-verbose --no-armor \ diff --git a/packaging/grafana-agent/rpm/gpg-sign.sh b/packaging/grafana-agent/rpm/gpg-sign.sh index c33592d42f3d..7d84262c6cbb 100755 --- a/packaging/grafana-agent/rpm/gpg-sign.sh +++ b/packaging/grafana-agent/rpm/gpg-sign.sh @@ -18,6 +18,7 @@ echo "%_gpg_name Grafana Labs %_gpg_path /root/.gnupg %_gpgbin /usr/bin/gpg %_gpg_digest_algo sha256 +%_binary_filedigest_algorithm 8 %__gpg /usr/bin/gpg %__gpg_sign_cmd %{__gpg} \ gpg --no-tty --batch --yes --no-verbose --no-armor \ diff --git a/pkg/metrics/wal/wal.go b/pkg/metrics/wal/wal.go index 0141983cac22..6f84e607db04 100644 --- a/pkg/metrics/wal/wal.go +++ b/pkg/metrics/wal/wal.go @@ -861,6 +861,16 @@ func (a *appender) UpdateMetadata(ref storage.SeriesRef, _ labels.Labels, m meta // Commit submits the collected samples and purges the batch. func (a *appender) Commit() error { + if err := a.log(); err != nil { + return err + } + + a.clearData() + a.w.appenderPool.Put(a) + return nil +} + +func (a *appender) log() error { a.w.walMtx.RLock() defer a.w.walMtx.RUnlock() @@ -870,6 +880,9 @@ func (a *appender) Commit() error { var encoder record.Encoder buf := a.w.bufPool.Get().([]byte) + defer func() { + a.w.bufPool.Put(buf) //nolint:staticcheck + }() if len(a.pendingSeries) > 0 { buf = encoder.Series(a.pendingSeries, buf) @@ -931,12 +944,11 @@ func (a *appender) Commit() error { } } - //nolint:staticcheck - a.w.bufPool.Put(buf) - return a.Rollback() + return nil } -func (a *appender) Rollback() error { +// clearData clears all pending data. +func (a *appender) clearData() { a.pendingSeries = a.pendingSeries[:0] a.pendingSamples = a.pendingSamples[:0] a.pendingHistograms = a.pendingHistograms[:0] @@ -945,6 +957,43 @@ func (a *appender) Rollback() error { a.sampleSeries = a.sampleSeries[:0] a.histogramSeries = a.histogramSeries[:0] a.floatHistogramSeries = a.floatHistogramSeries[:0] +} + +func (a *appender) Rollback() error { + // Series are created in-memory regardless of rollback. This means we must + // log them to the WAL, otherwise subsequent commits may reference a series + // which was never written to the WAL. + if err := a.logSeries(); err != nil { + return err + } + + a.clearData() a.w.appenderPool.Put(a) return nil } + +// logSeries logs only pending series records to the WAL. +func (a *appender) logSeries() error { + a.w.walMtx.RLock() + defer a.w.walMtx.RUnlock() + + if a.w.walClosed { + return ErrWALClosed + } + + if len(a.pendingSeries) > 0 { + var encoder record.Encoder + buf := a.w.bufPool.Get().([]byte) + defer func() { + a.w.bufPool.Put(buf) //nolint:staticcheck + }() + + buf = encoder.Series(a.pendingSeries, buf) + if err := a.w.wal.Log(buf); err != nil { + return err + } + buf = buf[:0] + } + + return nil +} diff --git a/pkg/metrics/wal/wal_test.go b/pkg/metrics/wal/wal_test.go index 912419447fc6..b8d22a7c322d 100644 --- a/pkg/metrics/wal/wal_test.go +++ b/pkg/metrics/wal/wal_test.go @@ -99,6 +99,35 @@ func TestStorage(t *testing.T) { require.Equal(t, expectedExemplars, actualExemplars) } +func TestStorage_Rollback(t *testing.T) { + walDir := t.TempDir() + s, err := NewStorage(log.NewNopLogger(), nil, walDir) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, s.Close()) + }) + + app := s.Appender(context.Background()) + + payload := buildSeries([]string{"foo", "bar", "baz", "blerg"}) + for _, metric := range payload { + metric.Write(t, app) + } + + require.NoError(t, app.Rollback()) + + var collector walDataCollector + + replayer := walReplayer{w: &collector} + require.NoError(t, replayer.Replay(s.wal.Dir())) + + require.Len(t, collector.series, 4, "Series records should be written on Rollback") + require.Len(t, collector.samples, 0, "Samples should not be written on rollback") + require.Len(t, collector.exemplars, 0, "Exemplars should not be written on rollback") + require.Len(t, collector.histograms, 0, "Histograms should not be written on rollback") + require.Len(t, collector.floatHistograms, 0, "Native histograms should not be written on rollback") +} + func TestStorage_DuplicateExemplarsIgnored(t *testing.T) { walDir := t.TempDir() diff --git a/pkg/operator/defaults.go b/pkg/operator/defaults.go index de85682f8cce..793b8f77c2cc 100644 --- a/pkg/operator/defaults.go +++ b/pkg/operator/defaults.go @@ -2,7 +2,7 @@ package operator // Supported versions of the Grafana Agent. var ( - DefaultAgentVersion = "v0.35.0" + DefaultAgentVersion = "v0.35.2" DefaultAgentBaseImage = "grafana/agent" DefaultAgentImage = DefaultAgentBaseImage + ":" + DefaultAgentVersion ) diff --git a/pkg/river/encoding/riverjson/riverjson.go b/pkg/river/encoding/riverjson/riverjson.go index 821b34212d1e..f93c9ec03228 100644 --- a/pkg/river/encoding/riverjson/riverjson.go +++ b/pkg/river/encoding/riverjson/riverjson.go @@ -87,15 +87,6 @@ func encodeFieldAsStatements(prefix []string, field rivertags.Field, fieldValue fullName := mergeStringSlice(prefix, field.Name) switch { - case fieldValue.IsZero(): - // It shouldn't be possible to have a required block which is unset, but - // we'll encode something anyway. - return []jsonStatement{jsonBlock{ - Name: strings.Join(fullName, "."), - Type: "block", - Body: nil, - }} - case fieldValue.Kind() == reflect.Map: // Iterate over the map and add each element as an attribute into it. @@ -137,6 +128,19 @@ func encodeFieldAsStatements(prefix []string, field rivertags.Field, fieldValue return statements case fieldValue.Kind() == reflect.Struct: + if fieldValue.IsZero() { + // It shouldn't be possible to have a required block which is unset, but + // we'll encode something anyway. + return []jsonStatement{jsonBlock{ + Name: strings.Join(fullName, "."), + Type: "block", + + // Never set this to nil, since the API contract always expects blocks + // to have an array value for the body. + Body: []jsonStatement{}, + }} + } + return []jsonStatement{jsonBlock{ Name: strings.Join(fullName, "."), Type: "block", diff --git a/pkg/river/encoding/riverjson/riverjson_test.go b/pkg/river/encoding/riverjson/riverjson_test.go index b7658b890b47..01acb7310388 100644 --- a/pkg/river/encoding/riverjson/riverjson_test.go +++ b/pkg/river/encoding/riverjson/riverjson_test.go @@ -199,6 +199,30 @@ func TestBlock(t *testing.T) { require.JSONEq(t, expect, string(actual)) } +func TestBlock_Empty_Required_Block_Slice(t *testing.T) { + type wrapper struct { + Blocks []testBlock `river:"some_block,block"` + } + + tt := []struct { + name string + val any + }{ + {"nil block slice", wrapper{Blocks: nil}}, + {"empty block slice", wrapper{Blocks: []testBlock{}}}, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + expect := `[]` + + actual, err := riverjson.MarshalBody(tc.val) + require.NoError(t, err) + require.JSONEq(t, expect, string(actual)) + }) + } +} + type testBlock struct { Number int `river:"number,attr,optional"` String string `river:"string,attr,optional"` diff --git a/production/kubernetes/agent-bare.yaml b/production/kubernetes/agent-bare.yaml index c88575c9f6c7..3b24e1218f0b 100644 --- a/production/kubernetes/agent-bare.yaml +++ b/production/kubernetes/agent-bare.yaml @@ -83,7 +83,7 @@ spec: valueFrom: fieldRef: fieldPath: spec.nodeName - image: grafana/agent:v0.35.0 + image: grafana/agent:v0.35.2 imagePullPolicy: IfNotPresent name: grafana-agent ports: diff --git a/production/kubernetes/agent-loki.yaml b/production/kubernetes/agent-loki.yaml index 01b8bffae71e..97874b8c650f 100644 --- a/production/kubernetes/agent-loki.yaml +++ b/production/kubernetes/agent-loki.yaml @@ -65,7 +65,7 @@ spec: valueFrom: fieldRef: fieldPath: spec.nodeName - image: grafana/agent:v0.35.0 + image: grafana/agent:v0.35.2 imagePullPolicy: IfNotPresent name: grafana-agent-logs ports: diff --git a/production/kubernetes/agent-traces.yaml b/production/kubernetes/agent-traces.yaml index f2289e0bc417..657bd55d27b4 100644 --- a/production/kubernetes/agent-traces.yaml +++ b/production/kubernetes/agent-traces.yaml @@ -114,7 +114,7 @@ spec: valueFrom: fieldRef: fieldPath: spec.nodeName - image: grafana/agent:v0.35.0 + image: grafana/agent:v0.35.2 imagePullPolicy: IfNotPresent name: grafana-agent-traces ports: diff --git a/production/kubernetes/build/lib/version.libsonnet b/production/kubernetes/build/lib/version.libsonnet index 93c12d58814c..8a8980dde0c7 100644 --- a/production/kubernetes/build/lib/version.libsonnet +++ b/production/kubernetes/build/lib/version.libsonnet @@ -1 +1 @@ -'grafana/agent:v0.35.0' +'grafana/agent:v0.35.2' diff --git a/production/kubernetes/build/templates/operator/main.jsonnet b/production/kubernetes/build/templates/operator/main.jsonnet index 9760cadfea5d..a5ece80b1937 100644 --- a/production/kubernetes/build/templates/operator/main.jsonnet +++ b/production/kubernetes/build/templates/operator/main.jsonnet @@ -23,8 +23,8 @@ local ksm = import 'kube-state-metrics/kube-state-metrics.libsonnet'; local this = self, _images:: { - agent: 'grafana/agent:v0.35.0', - agent_operator: 'grafana/agent-operator:v0.35.0', + agent: 'grafana/agent:v0.35.2', + agent_operator: 'grafana/agent-operator:v0.35.2', ksm: 'registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.5.0', }, diff --git a/production/kubernetes/install-bare.sh b/production/kubernetes/install-bare.sh index efb2ca8c1294..7d57a73cc8ac 100644 --- a/production/kubernetes/install-bare.sh +++ b/production/kubernetes/install-bare.sh @@ -25,7 +25,7 @@ check_installed() { check_installed curl check_installed envsubst -MANIFEST_BRANCH=v0.35.0 +MANIFEST_BRANCH=v0.35.2 MANIFEST_URL=${MANIFEST_URL:-https://raw.githubusercontent.com/grafana/agent/${MANIFEST_BRANCH}/production/kubernetes/agent-bare.yaml} NAMESPACE=${NAMESPACE:-default} diff --git a/production/operator/templates/agent-operator.yaml b/production/operator/templates/agent-operator.yaml index 902c197d1cee..9df6cf2c0ee0 100644 --- a/production/operator/templates/agent-operator.yaml +++ b/production/operator/templates/agent-operator.yaml @@ -372,7 +372,7 @@ spec: containers: - args: - --kubelet-service=default/kubelet - image: grafana/agent-operator:v0.35.0 + image: grafana/agent-operator:v0.35.2 imagePullPolicy: IfNotPresent name: grafana-agent-operator serviceAccount: grafana-agent-operator @@ -436,7 +436,7 @@ metadata: name: grafana-agent namespace: ${NAMESPACE} spec: - image: grafana/agent:v0.35.0 + image: grafana/agent:v0.35.2 integrations: selector: matchLabels: diff --git a/production/tanka/grafana-agent/v1/main.libsonnet b/production/tanka/grafana-agent/v1/main.libsonnet index dbf5394dac7c..6fc5afff9037 100644 --- a/production/tanka/grafana-agent/v1/main.libsonnet +++ b/production/tanka/grafana-agent/v1/main.libsonnet @@ -15,8 +15,8 @@ local service = k.core.v1.service; (import './lib/traces.libsonnet') + { _images:: { - agent: 'grafana/agent:v0.35.0', - agentctl: 'grafana/agentctl:v0.35.0', + agent: 'grafana/agent:v0.35.2', + agentctl: 'grafana/agentctl:v0.35.2', }, // new creates a new DaemonSet deployment of the grafana-agent. By default, diff --git a/production/tanka/grafana-agent/v2/internal/base.libsonnet b/production/tanka/grafana-agent/v2/internal/base.libsonnet index fe4a3a7134f8..b88b5c216238 100644 --- a/production/tanka/grafana-agent/v2/internal/base.libsonnet +++ b/production/tanka/grafana-agent/v2/internal/base.libsonnet @@ -11,8 +11,8 @@ function(name='grafana-agent', namespace='') { local this = self, _images:: { - agent: 'grafana/agent:v0.35.0', - agentctl: 'grafana/agentctl:v0.35.0', + agent: 'grafana/agent:v0.35.2', + agentctl: 'grafana/agentctl:v0.35.2', }, _config:: { name: name, diff --git a/production/tanka/grafana-agent/v2/internal/syncer.libsonnet b/production/tanka/grafana-agent/v2/internal/syncer.libsonnet index f6f7f4c42079..2e5b8b50d38d 100644 --- a/production/tanka/grafana-agent/v2/internal/syncer.libsonnet +++ b/production/tanka/grafana-agent/v2/internal/syncer.libsonnet @@ -14,7 +14,7 @@ function( ) { local _config = { api: error 'api must be set', - image: 'grafana/agentctl:v0.35.0', + image: 'grafana/agentctl:v0.35.2', schedule: '*/5 * * * *', configs: [], } + config, diff --git a/tools/make/packaging.mk b/tools/make/packaging.mk index a2ade7c44722..7803889d6eb4 100644 --- a/tools/make/packaging.mk +++ b/tools/make/packaging.mk @@ -107,23 +107,27 @@ dist-agentctl-binaries: dist/grafana-agentctl-linux-amd64 \ dist/grafana-agentctl-windows-amd64.exe \ dist/grafana-agentctl-freebsd-amd64 +dist/grafana-agentctl-linux-amd64: GO_TAGS += promtail_journal_enabled dist/grafana-agentctl-linux-amd64: GOOS := linux dist/grafana-agentctl-linux-amd64: GOARCH := amd64 dist/grafana-agentctl-linux-amd64: $(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl -dist/grafana-agentctl-linux-arm64: GOOS := linux -dist/grafana-agentctl-linux-arm64: GOARCH := arm64 +dist/grafana-agentctl-linux-arm64: GO_TAGS += promtail_journal_enabled +dist/grafana-agentctl-linux-arm64: GOOS := linux +dist/grafana-agentctl-linux-arm64: GOARCH := arm64 dist/grafana-agentctl-linux-arm64: $(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl -dist/grafana-agentctl-linux-ppc64le: GOOS := linux -dist/grafana-agentctl-linux-ppc64le: GOARCH := ppc64le +dist/grafana-agentctl-linux-ppc64le: GO_TAGS += promtail_journal_enabled +dist/grafana-agentctl-linux-ppc64le: GOOS := linux +dist/grafana-agentctl-linux-ppc64le: GOARCH := ppc64le dist/grafana-agentctl-linux-ppc64le: $(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl -dist/grafana-agentctl-linux-s390x: GOOS := linux -dist/grafana-agentctl-linux-s390x: GOARCH := s390x +dist/grafana-agentctl-linux-s390x: GO_TAGS += promtail_journal_enabled +dist/grafana-agentctl-linux-s390x: GOOS := linux +dist/grafana-agentctl-linux-s390x: GOARCH := s390x dist/grafana-agentctl-linux-s390x: $(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl