Vector v0.58.0 release notes
Deprecation Announcements
See the deprecations page for all active and historical deprecations.
version field on influxdb_logs and influxdb_metrics sinksThe version field selects the InfluxDB API version whose settings are used. It will be required
in a future release. Until then, when version is unset the version is inferred from the
configured settings.
version: "1"uses the v1 settings:database,consistency,retention_policy_name,username, andpassword.version: "2"uses the v2 settings:org,bucket, andtoken.
Migrate by adding version: "1" or version: "2" to match the settings already present:
sinks:
my_sink:
type: influxdb_logs
version: "2"
org: my-org
bucket: vector-bucket
token: ${INFLUXDB_TOKEN}
Vector Changelog
3 security changes
- The
logstashsource no longer runs out of memory and crashes on rare problematic compressed frames, such as one containing an extremely large number of events. Additionally, events received before a malformed frame inside a compressed payload are now delivered instead of being silently discarded along with the malformed frame.
Thanks to pront for contributing this change! - The
logstashsource now rejects frames larger than the configured maximum instead of buffering them indefinitely; previously, a sender could declare an extremely large frame and force the source to hold its bytes in memory until it ran out of memory. The limit is controlled by the existing--max-decompressed-size-bytesoption (default 100 MiB).
Thanks to pront for contributing this change! - Prevent configured HTTP proxy credentials from being sent in the
Authorizationheader to origin servers for plaintexthttp://requests; they are now sent only inProxy-Authorization.
Thanks to pront for contributing this change!
8 new features
The
azure_blobsink now supports atagsoption, which sets blob index tags (x-ms-tags) on every created blob (parity with thetagsoption on theaws_s3sink).The
azure_blobsink now supports ametadataoption, which sets custom blob metadata (x-ms-meta-*) on every created blob (parity with themetadataoption on thegcp_cloud_storagesink).
Thanks to danielku15 for contributing this change!- Added cuckoo filter support for
memoryenrichment table, to provide an efficient way to store and check presence of keys with a low memory footprint at the cost of false positives.
Thanks to esensar, Quad9DNS for contributing this change! - Added bloom filter support for
memoryenrichment table, similar to cuckoo filter, providing as imple and efficient way to store and check presence of keys with a low memory footprint at the cost of false positives, but with less features that cuckoo filter.
Thanks to esensar, Quad9DNS for contributing this change! - The
datadog_agentsource now accepts LLM Observability (LLMObs) telemetry at/api/v2/llmobs. Whenmultiple_outputsis enabled, LLMObs span events are available as log events on thellmobsoutput port.
Thanks to ronitanilkumar for contributing this change! - The
kafkasource now supports adecompressionoption for decompressing message payloads that were compressed by the producer at the application level (as opposed to Kafka protocol-level compression, which is handled transparently by the client library). Supported algorithms aregzip,zlib, andzstd, and zstd decompression supports custom dictionaries viadictionary_path. Payloads are decompressed before framing and decoding are applied.
Thanks to cjford for contributing this change! - The
metric_tag_valuesoption now accepts anautovalue that exposes single-value tags as strings and multi-value tags as arrays, preserving the underlying shape of each tag instead of forcing every tag into one form. Theluatransform continues to support onlysingleandfull.
Thanks to kaarolch for contributing this change! - The OTLP codec’s serializer now supports native Vector
Metricevents forCounter,Gauge,AggregatedHistogram, andAggregatedSummaryvalues, converting them into the OTLPSum,Gauge,Histogram, andSummaryprotobuf types respectively. Previously, encoding a native metric event with the OTLP serializer always failed.
Thanks to petere-datadog for contributing this change! Added an optional
tls_handshake_timeout_secssetting to thesocket(TCP mode),syslog(TCP mode),logstash,fluent, andstatsd(TCP mode) sources. When set, a TLS-enabled connection that does not complete its TLS handshake within the configured number of seconds is closed.Previously, TLS handshakes on these sources had no timeout: a client that opened a TCP connection and never completed (or never started) the TLS handshake would hold its slot against
connection_limitindefinitely, since neither TCP keepalive normax_connection_duration_secsare evaluated until after the handshake succeeds. This could let misbehaving or unresponsive clients gradually exhaust the connection limit and block legitimate traffic. The new setting is unset by default, preserving prior behavior.
Thanks to vladimir-dd for contributing this change!
14 enhancements
- Added common internal HTTP metrics to the connector used by AWS sinks.
Thanks to gwenaskell for contributing this change! - The
prometheus_exportersink’sflush_period_secsoption now accepts0to disable metric expiration entirely. Previously, metrics with sparse or bursty updates (for example, high cardinality counters produced bylog_to_metric) could be expired and re-added as a “new” series, causing gaps and apparent counter resets in downstream Prometheus queries even with a largeflush_period_secsconfigured. Settingflush_period_secs: 0keeps all previously seen metrics for the lifetime of the sink; be aware this can result in unbounded memory growth if metric series cardinality is unbounded.
Thanks to valerypetrov for contributing this change! - The
character_delimitedandnewline_delimiteddecoders now support truncating oversized frames. A newoversized_actionconfiguration option allows choosing betweendrop(default, existing behavior) andtruncate. Whenoversized_actionis set totruncate, frames that exceed the configuredmax_lengthare truncated to the maximum allowed size, and the remainder of the oversized frame is discarded up to the next delimiter.
Thanks to vparfonov for contributing this change! The
kubernetes_logssource now supports truncating oversized merged log lines instead of dropping them. A newmax_merged_line_actionconfiguration option allows choosing betweendrop(default, existing behavior) andtruncate. When truncation is enabled, lines exceedingmax_merged_line_bytesare truncated to the limit with a..TRUNCATEDsuffix appended.In
dropmode,max_line_bytesis capped tomax_merged_line_bytesto avoid wasted I/O. Intruncatemode, individual lines up tomax_line_bytesare allowed through so the merger can truncate the combined result. Note thatmax_line_bytesstill applies at the file level and always drops individual lines exceeding it; file-level truncation is not yet supported.
Thanks to vparfonov for contributing this change!- Dynamic
lokisink label and structured metadata values no longer require a literal prefix ordangerously_allow_unconfined_template_resolution. Template keys and tenant IDs remain confined.
Thanks to pront for contributing this change! - Dynamic
aws_cloudwatch_logssinkstream_nametemplates no longer require a literal prefix ordangerously_allow_unconfined_template_resolution.group_nameremains confined.
Thanks to pront for contributing this change! - Custom auth VRL enrichment (
%fieldwrites) is now supported by all HTTP-based sources (http_server,heroku_logs,prometheus_pushgateway,prometheus_remote_write), not just a subset. Enrichment fields are inserted into event metadata underhttp_server.<field>in the Vector namespace, or into the event body in the legacy namespace, without overwriting existing fields.
Thanks to petere-datadog for contributing this change! - The
aws_s3source can now retrieve objects from S3 Requester Pays buckets by settingrequest_payer: requester.
Thanks to vibe for contributing this change! - The
ssekms_key_idoption in theaws_s3sink now respects the configured timezone when the value is a template containing time components, matching the existing behavior ofkey_prefix.
Thanks to thomasqueirozb for contributing this change! gcp_stackdriver_logslabel templates are now unconfined; they were previously overly constrained.
Thanks to pront for contributing this change!- The
influxdb_logsandinfluxdb_metricssinks now accept aversionfield to select the InfluxDB API version whose settings are used. When unset, the version is inferred from the configured settings, matching the previous behavior. Theversionfield will be required in a future release.
Thanks to thomasqueirozb for contributing this change! - Explicitly log when components are gracefully shut down.
Thanks to clementd-dd for contributing this change! - Sink
endpointoptions now require an absolute URL that includes a host. Endpoints without a scheme are defaulted tohttps://(for exampleendpoint: "localhost:8080"becomeshttps://localhost:8080). Previously, partial or empty endpoints (for exampleendpoint: ""orendpoint: "localhost:8080"without a scheme) were accepted at configuration load and only failed when the sink attempted to send data, or were silently completed with a default scheme and host. Empty, host-less, or non-http(s)endpoints (for exampleendpoint: "",endpoint: "/path", orendpoint: "ftp://example.com") are now rejected at configuration load with a clear error, including withvector validate --no-environment. This affects theappsignal,azure_logs_ingestion,datadog_events,datadog_logs,datadog_metrics,datadog_traces,elasticsearch,gcp_cloud_storage,gcp_pubsub,gcp_stackdriver_logs,gcp_stackdriver_metrics,honeycomb,humio,influxdb,loki,prometheus_remote_write,sematext,splunk_hec, andwebhdfssinks.
Thanks to thomasqueirozb for contributing this change! - The
databricks_zerobussink now has OTel v2 compatibility.
Thanks to yorickvanzweeden for contributing this change!
27 bug fixes
- Propagate FIPS endpoint setting to STS AssumeRole clients. When
AWS_USE_FIPS_ENDPOINT=trueis configured, Vector now correctly uses FIPS endpoints for STS operations (e.g.,sts-fips.<region>.amazonaws.com) in addition to the primary service client.
Thanks to hligit for contributing this change! - Allow explicit null values in JSON and YAML configuration files to load without being converted
through TOML.
Thanks to pront for contributing this change! - The
redissource configured withdata_type = "channel"now automatically reconnects and re-subscribes after the Redis connection drops (for example on a Redis restart or a transient network blip), instead of silently stopping until Vector is restarted. Reconnect attempts use exponential backoff (capped at 30s) and emitcomponent_errors_totalon failures andconnection_established_totalon recovery.
Thanks to gibranbadrul for contributing this change! Fixed a deadlock in metric sinks that use a disk buffer where the sink would permanently stall after 10-15 minutes of operation. Affected sinks include
prometheus_remote_write,datadog_metrics,influxdb_metrics,aws_cloudwatch_metrics,gcp_stackdriver_metrics,appsignal,sematext,statsd, andgreptimedb.Additionally fixed a panic when
expire_metrics_secs: 0was set.
Thanks to GreyLilac09 for contributing this change!Fixed the OTLP decoder adding an extra
timestampfield to trace events whenlog_namespacewas set tolegacy. Trace events don’t have atimestampfield in their schema, so this field showed up unexpectedly:// Before { "trace_id": "...", "span_id": "...", "name": "test_span", "timestamp": "2026-08-06T12:00:00Z" } // After { "trace_id": "...", "span_id": "...", "name": "test_span" }
Thanks to kimjune01 for contributing this change!- The
mqttsink and source now honor the configuredtls.alpn_protocolsoption instead of always advertising the hardcodedmqttALPN protocol. This allows connecting to endpoints that require a specific ALPN protocol name, such as AWS IoT Core over port 443 which requiresx-amzn-mqtt-ca. Whentls.alpn_protocolsis not set, the previousmqttdefault is preserved.
Thanks to frank-hivewatch for contributing this change! - Fixed generated configuration schemas for overlapping untagged enum variants, allowing values accepted by
serdeto validate correctly.
Thanks to bruceg for contributing this change! vector validate --no-environmentnow catches sink confinement issues that previously only surfaced when Vector booted.For example, a Kafka sink with an unconfined topic template:
sinks: kafka_out: type: kafka inputs: [logs] bootstrap_servers: "localhost:9092" topic: "{{ topic }}" encoding: codec: jsonpreviously passed
vector validate --no-environmentand only failed with a fullvector validateor when running the config. It now fails validation with a confinement error due totopichaving no confinement base.sinks: kafka_out: type: kafka inputs: [logs] bootstrap_servers: "localhost:9092" topic: "events-{{ topic }}" encoding: codec: json
Thanks to thomasqueirozb for contributing this change!- Allows hyphens in the
<backend name>portion of theSECRET[<backend name>.<secret name>]collector regex. Before, a backend name containing a hyphen (e.g.my-backend) would fail to match, leaving the literalSECRET[...]string in the resolved config instead of the secret value.
Thanks to maklean for contributing this change! - Added missing “httpProtocol” field to dnstap source events.
Thanks to esensar, Quad9DNS for contributing this change! - Reduce transforms using the
summerge strategy now return an error instead of panicking when floating-point addition would produce NaN.
Thanks to pront for contributing this change! - The
sematext_logssink no longer panics when thetokencannot be parsed as a template (for example{{ }}); it now fails configuration validation with a clear error instead of crashing at startup.
Thanks to thomasqueirozb for contributing this change! - Fix Azure Blob Storage uploads larger than 4 MiB when using an account-key connection string. These uploads could send all data blocks successfully but fail with a 403 while completing the upload because the final request’s body length was missing during Shared Key signing. Vector now sets the body length before signing that request.
Thanks to ArunPiduguDD for contributing this change! - Fixed two problems with the
chunked_gelfframing decoder’s limits.pending_messages_limitwas applied to every chunk rather than only to new messages, so once the limit was reached even chunks of messages already pending were rejected and those messages could never complete. Separately, dropping a message for exceedingmax_lengthleft its timeout task running, so the number of live tasks was not bounded bypending_messages_limitthe way the pending message count was.
Thanks to pront for contributing this change! - Fixed a panic in the
chunked_gelfframing decoder when a one-byte message arrived and trace-level logging was enabled for it, which took down the source. Such a message is now passed on for the decoder to reject, as any other malformed payload would be.
Thanks to pront for contributing this change! Improve configuration error messages by including the affected field path. For example, this invalid configuration:
sources: broken: type: demo_logs interval: not-a-numbernow reports
sources.broken: invalid type: string "not-a-number", expected f64.
Thanks to pront for contributing this change!- Encode
resource.<type>metric tags as resources when using a V2datadog_metricssink, preserving Datadog Agent resources such asdatabase_instance.
Thanks to tessneau for contributing this change! - After a crash, affected
disk_v2buffers could incorrectly appear full, block new events, and stall recovery. Vector now restores buffer usage correctly on restart so the pipeline can continue processing.
Thanks to graphcareful for contributing this change! - Fixed a
disk_v2buffer bug where a record too large to write (one whose encoded size exceeds the buffer’s maximum record size) caused the buffer writer to return an unrecoverable error, which tore down the entire Vector topology and stopped the process. The writer now drops just that record and continues: the record’s finalizers are resolved with the defaultDroppedstatus (which sources with end-to-end acknowledgement treat asDelivered, so they ack or checkpoint rather than redelivering the un-writable record), an error is logged, and the drop is counted via thebuffer_discarded_events_totalandbuffer_discarded_bytes_totalmetrics (withintentional="false"). Every other record and the buffer itself are unaffected.
Thanks to graphcareful for contributing this change! - Prevent disk buffers from stalling by publishing flushed writer progress before notifying readers.
Thanks to graphcareful for contributing this change! - Fix deserialization of
aggregated_histogrambucketupper_limitwhen the value is provided as an integer instead of a float.
Thanks to dd-sebastien-lb for contributing this change! The
kubernetes_logssource now falls back to extracting pod metadata from the log file path when the pod is not found in the Kubernetes API store. Previously, if the pod was deleted before Vector could look it up, the event was sent downstream with no kubernetes metadata at all, causing errors in downstream transforms that expect fields likepod_namespaceto be present.On this fallback path, Vector still populates
pod_name,pod_namespace, andcontainer_name. The path segment that is usually a Pod UID is exposed aspod_log_directory_id(notpod_uid), because for static pods it can be a config hash instead of the API Pod UID. Users who want UID semantics can remap the field.
Thanks to vparfonov for contributing this change!- Fixed an issue where unusually deeply nested event data or metadata could make disk buffers unreadable or cause vector-to-vector pipelines to retry indefinitely. Vector now detects affected events before buffering or sending while leaving safely nested events unchanged. When when_full = “overflow” is configured, the original event is routed intact to the overflow stage regardless of buffer occupancy; otherwise, only the affected event is dropped.
Thanks to connoryy, ganelo, EricaJ6, jonodera97 for contributing this change! - Fixed the
vector_security_confinement_disabledinternal metric disappearing after the metric idle timeout (300 seconds by default) while a sink was still running withdangerously_allow_unconfined_template_resolutionenabled. The gauge is now owned by the topology and held for the lifetime of each sink, and refreshed on configuration reload, so alerts watching this metric no longer silently stop firing.
Thanks to thomasqueirozb for contributing this change! - Fixed the
tls.server_nameoption so that it is used for certificate hostname verification in addition to SNI. Previously, on the OpenSSL path (used by HTTP-based sinks such asdatadog_logs), the certificate was still verified against the connection URL host, causing a “hostname mismatch” verification failure whenserver_namediffered from the endpoint host. The override applies only to the upstream destination, so an HTTPS forward proxy’s own certificate is verified against the proxy host.
Thanks to gwenaskell for contributing this change! - Fix a panic in Vector when a sink endpoint or URI contains a non-numeric port (e.g.
http://localhost:notaport). Malformed URIs now produce a validation error instead of crashing Vector.
Thanks to thomasqueirozb for contributing this change! - Fixed a framing bug in the
varint_length_delimiteddecoder that corrupted streams whenever a frame was split across two reads from the underlying source. The decoder consumed the varint length prefix before confirming that the whole frame had been buffered, so a partial frame permanently desynchronized the stream: the first byte of the payload was then misread as the next length prefix. Any source usingframing.method = "varint_length_delimited"was affected once the stream exceeded the 8 KiB read buffer, unless the frame size happened to tile that buffer exactly.
Thanks to meirdev for contributing this change!
7 chore
- The deprecated
azure_monitor_logssink has been removed. Configurations using it now fail validation. Microsoft ends support for the sink’s underlying Data Collector API in September 2026.
Thanks to pront for contributing this change! - The deprecated
buffer_byte_sizeandbuffer_eventsgauge metrics have been removed.
Thanks to pront for contributing this change! - The deprecated
encodingoption has been removed from thehttp_serversource and its deprecatedhttpalias. Configurations using it now fail validation.
Thanks to pront for contributing this change! - The deprecated
namespaceoption has been removed from theinfluxdb_logssink. It has been deprecated since v0.24.0 in favor ofmeasurement. Configurations using it now fail validation.
Thanks to thomasqueirozb for contributing this change! - The deprecated
logdnasink alias has been removed. It was renamed tomezmoin v0.29.0. Configurations usingtype: logdnanow fail validation.
Thanks to thomasqueirozb for contributing this change! - Vector now refuses to build configs where a
{{ field }}reference lands inside the hostname (or immediately adjacent to it without a path separator). Previously, such templates built successfully but silently dropped every event at render time.
Thanks to thomasqueirozb for contributing this change! - The
webhdfssink’sendpointoption now defaults a missing scheme tohttps://instead ofhttp://. A scheme-less endpoint (for exampleendpoint: "127.0.0.1:9870") still loads and remains valid, but it now resolves tohttps://127.0.0.1:9870; previously the underlying WebHDFS client resolved tohttp://127.0.0.1:9870
Thanks to thomasqueirozb for contributing this change!
VRL Changelog
0.35.0 (2026-08-20)
Enhancements
- The
parse_aws_vpc_flow_logfunction now recognizes all fields introduced in AWS VPC Flow Logs versions 7 through 11, including the v7 ECS metadata fields, v8reject_reason, v9resource_id, v10encryption_status, and the v11 tag/interface/next-hop fields.
Fixes
- Fixed
round’s type definition, which previously always claimed to return an integer even though it returns a float for float inputs.
- Prevent float arithmetic that produces NaN from panicking or silently returning zero. Such operations now return a runtime error.