1.20.0 (2026-09-25)
⚠ BREAKING CHANGES
- discovery.hetzner:
discovery.hetznerno longer exports the__meta_hetzner_datacenterlabel for targets withrole = "hcloud". Relabeling rules that reference this label forhcloudtargets silently stop matching. The label is unaffected forrole = "robot"targets, which also now export it under the additional name__meta_hetzner_robot_datacenter. - otelcol.receiver.filelog:
otelcol.receiver.filelog'stop_nnow distinguishes an explicit0("track all files") from leaving it unset ("apply the default"), matching upstream. Breaking change: previously,top_n = 0was treated the same as unset. - otelcol.exporter.awss3: Apply upstream retry defaults and expose retry_on_failure (#7138)
- otelcol.processor.memory_limiter: Apply upstream GC interval defaults and expose them (#7137)
- otelcol.receiver.kafka:
plaintextcredentials are now translated into asaslblock withmechanismset toPLAIN, matching what upstream's Kafka client actually requires. This also applies tootelcol.exporter.kafka. Configs relying on the old (broken) silent-drop behavior will now authenticate correctly instead of connecting anonymously. - otelcol.processor.k8sattributes:
otelcol.processor.k8sattributesnow extractscontainer.image.tags(a list) instead ofcontainer.image.tag(a string) by default. Default label/annotation attribute keys forpod,namespace, andnodesources change from the deprecated plural form (k8s.pod.labels.) to the singular form (k8s.pod.label.). There's no configuration option to restore the previous behavior. Thedeployment_name_from_replicasetargument has also been removed; the processor now always extracts the deployment name from the ReplicaSet name. - otelcol.receiver.faro:
otelcol.receiver.faronow emitsdeployment.environment.nameinstead of the deprecateddeployment.environmentresource attribute by default. - otelcol.processor.transform:
Base64Decodehas been removed. UseDecode(value, "base64")instead. This also affectsotelcol.processor.filterand any other OTTL-consuming component. - otelcol.processor.transform: Previously a no-op,
set(target, nil)now setstargettonil, because upstream'sottl.set.allowNilfeature gate is enabled by default as of this bump. prometheus.exporter.windowsnow applies the documented defaulttextfiledirectory (\textfile_inputs) when neithertextfile.directoriesnor the deprecatedtext_file.text_file_directoryis set, restoring behavior that was lost in v1.11.0. Deployments that were relying on the collector silently returning nothing will start receiving any .prom files found there, or an error if that directory doesn't exist, either of which can be avoided by setting directories explicitly or removing textfile from enabled_collectors.
Features 🌟
- Add 32MB and 64MB buckets to Loki histograms (#7059) (c973f57) (@grobinson-grafana)
- Add special reason when Loki returns 413 (#7058) (ca2118c) (@grobinson-grafana)
- database_observability.mysql: Add index-usage collectors (#7069) (a4271ba) (@gaantunes, @cristiangreco)
- database_observability.mysql: Add primary and unique index labels and a new row_count metric (#7095) (9199e72) (@gaantunes)
- database_observability.postgres: Add index-usage collectors (#7068) (e9c7d65) (@gaantunes)
- database_observability.postgres: Add support for clustering mode (#7158) (a832899) (@matthewnolf)
- database_observability.postgres: Support monitoring multiple database blocks (#6912) (f3de7a4) (@matthewnolf)
- database_observability.sql_server: Add
query_samplescollector (#7106) (6751607) (@cristiangreco, @matthewnolf, @clayton-cornell) - database_observability.sql_server: Add
query_timeoutsetting (#7157) (89929a2) (@cristiangreco) - database_observability.sql_server: Add explain_plans collector (#6941) (f7fec75) (@rgeyer, @clayton-cornell)
- deps: Update beyla.ebpf component to 3.35.0 (#7084) (64747dc) (@grcevski)
- Distroless Alloy docker image using chisel (#6948) (d842c8e) (@x1unix, @clayton-cornell)
- helm: Add controller.dnsConfig to alloy chart pod spec (#6399) (09252c3) (@younsl, @dehaansa)
- helm: Add service.trafficDistribution to values.yaml (#7057) (deb039c) (@agermel)
- loki.secretfilter: Promote secretfilter to GA (#7071) (a7293ea) (@kleimkuhler)
- loki.write: Add loki_write_batch_size_bytes histogram (#7052) (a38299a) (@grobinson-grafana)
- monitors: Support native histogram for service and pod monitors (#6817) (0d731b0) (@hdost)
- Move otelcol.exporter.faro to public preview (#6940) (02d8c29) (@mar4uk)
- Move otelcol.receiver.faro to public preview (#6939) (c7e3265) (@mar4uk)
- OTel service installation support for systemd (#7006) (9ad8ee4) (@blewis12, @thampiotr)
- OTel service installation support for windows service (#7007) (4017d4e) (@blewis12)
- otelcol.exporter.kafka: Add signal_header (#7146) (8d57c65) (@dehaansa)
- otelcol.exporter.otlphttp,otelcol.exporter.faro: Add keepalive block (#7152) (9ae05d8) (@dehaansa)
- otelcol.processor.k8sattributes: Adopt upstream's stable Kubernetes semantic conventions by default (#7109) (95354a7) (@dehaansa)
- otelcol.processor.resourcedetection: Add azureappservice detector (#7150) (857a73f) (@dehaansa)
- otelcol.processor.resourcedetection: Add azurecontainerapps detector (#7151) (29f52b7) (@dehaansa)
- otelcol.processor.resourcedetection: Expose the retry block added in OTel v0.161 (#7141) (5f934a5) (@kgeckhart)
- otelcol.processor.tail_sampling: Add num_shards (#7144) (3ecb703) (@dehaansa)
- otelcol.processor.transform:
set(target, nil)now sets a nil value (#7109) (95354a7) (@dehaansa) - otelcol.processor.transform: Add experimental
shared_cacheto statement blocks, available with--stability.level=experimental(#7164) (8c62dc7) (@dehaansa) - otelcol.processor.transform: Remove the
Base64DecodeOTTL converter function (#7109) (95354a7) (@dehaansa) - otelcol.receiver.faro: Adopt upstream's stable resource-attribute semantic conventions by default (#7109) (95354a7) (@dehaansa)
- otelcol.receiver.filelog: Add skip_unmodified_files attribute (#7170) (c10b6d5) (@dehaansa)
- otelcol.receiver.filelog: Expose explicit top_n=0 "match all files" semantics (#7139) (8bb2561) (@dehaansa)
- otelcol.receiver.kafka: Add partition_processing block (#7163) (077db7d) (@dehaansa)
- otelcol.receiver.syslog: Add auth argument to tcp block (#7149) (f4d9e79) (@dehaansa)
- otelcol.receiver.tcplog: Add auth argument for TCP connections (#7148) (bb080ea) (@dehaansa)
- otelcol.receiver.vcenter: Add host-level memory metrics (#7143) (41def15) (@dehaansa)
- otelcol: Add keepalive block to shared HTTP server config (#7166) (20244eb) (@dehaansa)
- otelcol: Log a warning for deprecated Kafka and
k8sattributessettings on component start and on every config update (#7109) (95354a7) (@dehaansa) - otelcol: Support encoding extensions for otelcol.receiver.awss3 (#7014) (c9f1806) (@x1unix, @clayton-cornell, @dehaansa)
- otelcol: Upgrade to OTel Collector v0.161.0, Prometheus v0.314.0, and Loki (#7109) (95354a7) (@dehaansa)
- prometheus.remote_write: Expose sigv4 session_name and tags (#7145) (a872c11) (@dehaansa)
- prometheus.scrape: Allow excluding labels from clustering ownership (#7160) (8a97530) (@thampiotr, @clayton-cornell)
- Update cAdvisor to v0.60.5 (#7079) (4ade38c) (@dehaansa)
Bug Fixes 🐛
- database_observability.mysql: Resolve query-parsed table names against known-table casing (#6953) (7243eae) (@gaantunes)
- database_observability.postgres: Set explain plan
search_pathto all schemas of the database (#7075) (23d9b8a) (@cristiangreco) - database_observability.sql_server: Fix explain_plans timeout (#7086) (0381e93) (@rgeyer)
- database_observability.sql_server: Model Update and Assert explain plan operators (#7142) (6f99ec7) (@rgeyer)
- Debug log the reason an exporter metrics handler fails instead of discarding it (#7064) (d325d4b) (@thampiotr)
- deps: Update Go dependencies to fix security advisories (#7041) (bff3d36) (@dehaansa)
- discovery.hetzner: Document __meta_hetzner_datacenter no longer set for hcloud targets (#7169) (08b82b0) (@dehaansa)
- Ensure Windows exporter uses correct text file defaults when not specified (#7047) (b5c82cb) (@blewis12)
- faro.receiver: Allow Faro SDK retry headers through CORS (#7054) (a6e19ce) (@Blinkuu)
- loki.source.docker: Reduce initial buffer allocation (#7183) (2fa1a08) (@kalleep)
- loki.source.journal: Dont override configured job label (#6982) (866eca2) (@kalleep)
- loki.source.kubernetes_events: Check for event.Series.LastObservedTime (#6825) (172f0b5) (@NachoxMacho)
- loki.write: Potential deadlock when queue is full and component shuts down (#7091) (5b405e4) (@kalleep, @kgeckhart)
- loki.write: Prevent data to be marked as sent if request is canceled due to hard shutdown (#7113) (b434582) (@kalleep)
- loki.write: Serialize WAL segment marker file access on Windows (#7181) (4af0406) (@dehaansa)
- loki.write: Stop started endpoints when one of them fails (#7115) (3df385d) (@kalleep)
- loki.write: WAL writer metrics is now collected after reload (#7093) (f6bf023) (@kalleep)
- Only log cluster warning for host-specific exporters when clustering is enabled (#7048) (163a617) (@blewis12)
- otel-supervisor: Remove the inert
reports_remote_configcapability from the built-in Grafana Fleet Management config (#7109) (95354a7) (@dehaansa) - otelcol.auth.google: Set valid authorization token header (#7031) (0dffb9f) (@odam06)
- otelcol.exporter.awss3: Apply upstream retry defaults and expose retry_on_failure (#7138) (5abf066) (@kgeckhart)
- otelcol.processor.memory_limiter: Apply upstream GC interval defaults and expose them (#7137) (406030b) (@kgeckhart)
- otelcol.receiver.cloudflare: Apply the documented default arguments (#7088) (b29717c) (@kgeckhart)
- otelcol.receiver.kafka:
authentication { plaintext { } }no longer silently drops its credentials (#7109) (95354a7) (@dehaansa) - otelcol.receiver.kafka: Reject configuring both
authentication.kerberosandauthentication.sasl/authentication.plaintext(#7109) (95354a7) (@dehaansa) - otelcol: Reject disable_keep_alives combined with a client keepalive block (#7171) (4ca2f1c) (@dehaansa)
- Prevent loki.write WAL watcher panic when a record spans a page boundary (#6766) (b7d69af), refs #6757 (@emmayusufu)
- prometheus.remote_write: Don't let metadata impact Remote Write v2 shard count (#7136) (2fa81a1) (@kgeckhart)
- prometheus.remote_write: Reset the WAL buffer after a failed write (#7179) (bdb9450) (@kgeckhart)
- prometheus.remote_write: Stop truncating the WAL on restart over records we wrote ourselves (#7180) (9493f4a) (@kgeckhart)
- pyroscope.ebpf: Count pprof samples correctly (#7119) (55bb01e) (@korniltsev-grafanista)
- remotecfg: Use atomic writes for cache file (#7131) (58a5b97) (@dehaansa)
- ui: Add accessible auto-scroll toggle in live debugging (#6649) (c86029b) (@harsh543)
- windows: Statically link Windows builds to fix missing DLL errors on startup (#6972) (3914c54) (@blewis12)
Upgrading
Read the release notes for specific instructions on upgrading from older versions:
Installation
Refer to our installation guide for how to install Grafana Alloy.