Release Candidate 0 for v1.21.0
This is a release candidate and should be used for testing purposes only.
⚠️ This is a pre-release. Do not use in production.
Changes
See the release PR #7234 for the full changelog.
1.21.0 (2026-10-14)
⚠ BREAKING CHANGES
- otelcol.receiver.kafka:
otelcol.receiver.kafkaandotelcol.exporter.kafkametadata > retry > max_retriesnow defaults to20(was3) and is now actually applied. Upstream's Kafka client silently ignored it since the franz-go migration.otelcol.exporter.kafkanow also appliesbackoff. (#7366) - otelcol.connector.signaltometrics:
otelcol.connector.signaltometricserror_modenow defaults toignore(waspropagate). A failing OTTL expression now skips the record and logs the error instead of dropping the whole payload. Seterror_mode = "propagate"to restore the previous behavior. (#7366) - loki.write:
loki.writeconfigurations that setwal { enabled = true }now fail to load unless Alloy runs with--stability.level=experimental. To keep using the WAL, add--stability.level=experimentalto thealloy runcommand. To keep the default stability level, remove thewalblock or setenabled = false. (#7257) - loki.write: Remove tenant label from metrics (#7232)
Features 🌟
- Add CAP_DAC_OVERRIDE in the allowed Linux capabilities list (#7303) (dddc5d8) (@grcevski)
- database_observability.postgres: Enable stat_statements by default (#7224) (044d3a4) (@matthewnolf)
- database_observability.sql_server: Add
health_checkcollector (#7205) (c1d90e0) (@rgeyer) - database_observability.sql_server: Add support for clustering mode (#7208) (90100b3) (@matthewnolf)
- database_observability.sql_server: Support monitoring multiple database blocks (#7207) (bbf24e2) (@matthewnolf)
- database_observability: Add engine label for explain_plan log digests (mysql/postgres) (#6944) (551c3ad) (@rgeyer)
- database_observability: Add relabel blocks to database_instance (#7369) (320c17e) (@matthewnolf)
- helm: Add resizePolicy to alloy and config-reloader containers (#7274) (9983d74) (@younsl)
- loki.source.cloudflare: Add api_url argument (#7353) (befe940) (@thampiotr)
- otelcol.connector.signaltometrics:
error_modenow defaults toignore(waspropagate) (#7366) (1e353a6) (@ptodev) - otelcol.encoding.jsonlog: Add the
parse_intsargument (#7377) (42fe191) (@ptodev) - otelcol.exporter.loadbalancing: Add the
randomnessandattributesrouting keys, and therouting_attributesargument (#7377) (42fe191) (@ptodev) - otelcol.receiver.kafka:
metadata > retry > max_retriesnow defaults to20(was3) (#7366) (1e353a6) (@ptodev) - otelcol.receiver.kafka: Deprecate
metadata > full, which has no effect upstream. This also applies tootelcol.exporter.kafka(#7366) (1e353a6) (@ptodev) - otelcol.receiver.vcenter: Add the
proxy_urlargument (#7377) (42fe191) (@ptodev) - otelcol: Add a
partitionblock (metadata_keys,cache_size,idle_timeout) to thesending_queue > batchblock of exporters (#7377) (42fe191) (@ptodev) - otelcol: Upgrade to OTel Collector v0.162.0 (#7366) (1e353a6) (@ptodev)
- Remove the experimental prometheus.exporter.catchpoint component (#7309) (7b24cb1) (@dehaansa)
- Update Beyla to version 3.38.0 (#7322) (bd8d703) (@grcevski)
Bug Fixes 🐛
- database_observability.postgres: Stop retrying explain plans with missing session settings (#7325) (0bdc41d) (@cristiangreco)
- database_observability.sql_server: Redact native explain-plan XML (#7230) (5b01d2a) (@rgeyer, @cristiangreco)
- database_observability: Correct explain plan cost semantics (#7307) (2cdeba9) (@cristiangreco, @cursoragent)
- database_observability: Escape strings to avoid logfmt parsing issues (#7302) (8b722eb) (@fridgepoet)
- database_observability: Use
strconv.Quoteon database-derived strings (#7288) (7aad05f) (@cristiangreco) - deps: Update gosnowflake to v2.2.0 to fix GO-2026-6665 (#7340) (4b1e336) (@thampiotr)
- local.file_match, loki.source.file: Fix matching through Widows junctions (#7261) (653850b) (@ptodev)
- loki.process: Move stage.label validation to syntax.Validator (#7308) (b24cd5d) (@michael-duren)
- loki.process: Move stage.label_keep validation to syntax.Validator (#7244) (1f29bd7) (@michael-duren)
- loki.process: Move stage.limit validation to syntax.Validator (#7278) (9423ed4) (@michael-duren)
- loki.process: Move stage.output validation to syntax.Validator (#7243) (97a5026) (@michael-duren)
- loki.process: Move stage.regex to syntax.Validator (#7342) (0cbb482) (@michael-duren)
- loki.process: Move stage.static_labels validation to syntax.Validator (#7175) (2b92bfb) (@michael-duren)
- loki.process: Move stage.structured_metadata_drop validation to syntax.Validator (#7245) (8b55f30) (@michael-duren)
- loki.process: Move stage.tenant validation to syntax.Validator (#7263) (5f45ab2) (@michael-duren)
- loki.source.docker: Do not time out log streams (#7297) (4b2e798) (@SaiPisey2)
- loki.source.file: Reduce CPU usage for long lines (#7291) (f98aef2) (@kalleep)
- loki.source.kubernetes: Forward log lines with out-of-order timestamps (#7080) (41d9001) (@johnpinto-clarity)
- loki.write: Catch more runtime errors when parsing config (#7216) (32c2180) (@kalleep)
- loki.write: Prevent panic on failed update (#7128) (3aa1c65) (@kalleep)
- loki.write: Remove tenant label from metrics (#7232) (ad6125b) (@kalleep)
- loki.write: Require experimental stability level to enable the WAL (#7257) (cc12943) (@dehaansa)
- loki.write: Retry wal write errors (#7316) (fc8eb73) (@kalleep)
- loki.write: Zero-initialize counters when the metrics registry is reused (#7258) (04838bf) (@dehaansa)
- loki: Add the timestamp to batch size calculation (#7226) (222798c) (@grobinson-grafana)
- loki: Include estimate for stream labels in batch size (#7176) (6c131a1) (@grobinson-grafana)
- loki: Make loki_write_sent_bytes_total and loki_write_dropped_bytes_total count uncompressed bytes (#7228) (4de4474) (@grobinson-grafana)
- otelcol.connector.host_info: Mirror upstream logic and fix potential sources of over-count (#7236) (4371d71) (@jcreixell)
- otelcol.exporter.loki: Release fanout lock when the context ends mid-forward (#7259) (0308c4d) (@dehaansa)
- otelcol.receiver.cloudflare: Default max_request_body_size to 20MiB (#7194) (2eadc7b) (@sindef)
- otelcol.receiver.filelog: Use alphabetical instead of lexicographic sort type (#7212) (d652b74) (@geonusp)
- otelcol.receiver.vcenter: Convert
max_query_metricswhen converting an OpenTelemetry Collector config (#7377) (42fe191) (@ptodev) - otelcol: Convert the exporter
sending_queue > batchblock when converting an OpenTelemetry Collector config (#7377) (42fe191) (@ptodev) - otelcol: Converters now read the upstream
keepalivesection of HTTP client and server configs (#7366) (1e353a6) (@ptodev) - prometheus.remote_write: Tolerate unknown WAL record types on replay (#7189) (26d1a25) (@kgeckhart)
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.