Vector v0.21.0 release notes
- The
kubernetes_logssource can panic when while processing Kubernetes watcher events when there is an error. #12245. Fixed in0.21.1. - The
elasticsearchsink fails to include the security token when signing requests for AWS authentication to OpenSearch. #12249. Fixed in0.21.1. - The
natssource and sink authentication options were not configurable. #12262. Fixed in0.21.1. - The
internal_logssource includes excess trace logs whenevervector topis used. #12251. Fixed in0.21.1. - The
aws_cloudwatch_logssource does not handle throttle responses from AWS. #12253. Fixed in0.21.1. - Vector panics when loading configuration that includes event paths like
encoding.only_fields. #12256. Fixed in0.21.1. - Vector panicked when reloading configuration that added components to a running topology. #12273. Fixed in
0.21.1. - Using
assume_roleon AWS components did not function correctly. #12314. Fixed in0.21.1. - The Vector VRL REPL loses variable assignments if the expression being evaluated errors. #12400. Fixed in
0.21.2. - Vector docker images require a volume to be mounted at
/var/lib/vectorto start correctly when the defaultdata_dirof is used. #12413. Fixed in0.21.2. - For AWS components, the timeout for loading credentials was dropped from 30 seconds to 5 seconds. #12421.
0.21.2adds a new option,load_timeout_secsthat can be configured to a higher value. vector generateworks again with thedatadog_agentsource. #12469. Fixed in0.21.2.- Using
assume_roleconfiguration for AWS components doesn’t cache the credentials, resulting in a high number of calls toAssumeRole. This was fixed in0.22.0via awslabs/smithy-rs#1296.
The Vector team is pleased to announce version 0.21.0!
Be sure to check out the upgrade guide for breaking changes in this release.
In addition to the new features, enhancements, and fixes listed below, this release adds:
- A new implementation of the VRL runtime as a Virtual Machine (VM). This new implementation improves performance over VRL’s current tree-walking interpreter implementation. For its initial release, this is an opt in feature (see the highlight for how) but will become the default VRL implementation in the future once it has stabilized. We encourage you to try it out and report any issues you find.
- A new
redissource to complement theredissink. - Initial support for ingesting traces from the Datadog Agent (version < 6/7.33) and forwarding them to Datadog. We are working on adding support for newer Datadog Agents.
- The
kubernetes_logssource has been rewritten to use the community supportedkube-rslibrary. We expect that this will resolve some long outstanding bugs with Vector ceasing to process container logs. It also adds support for Kubernetes authentication token rotation.
We made additional performance improvements this release increasing the average throughput by up to 50% for common topologies (see our soak test framework).
Also, check out our new guide on using vector tap for observing events
running through Vector instances
Vector Changelog
3 new features
- This release includes a beta of a new implementation of VRL as a Virtual Machine. This new implementation improves on VRL performance and otherwise exactly compatible with the existing VRL implementation. This is an opt-in feature for this release to gather feedback (see the highlight for how to enable) but will become the default VRL implementation in the future once it stabilizes.
- The
natssink andnatssource now support TLS and authentication via username/password, JWT, Token, NKey, and client certificate. - A new
redissource was added to complement the existingredissink. It supports fetching data via subscribing to a pub/sub channel or popping from a list.
27 enhancements
We are in the process of updating all Vector components with consistent instrumentation as described in Vector’s component specification).
With this release we have instrumented the following sources with these new metrics:
mongodb_metricspostgresql_metricssocketstatsd
As well as all transforms.
- The
tlsoptions can now be configured on AWS sinks. This is useful when using AWS compatible endpoints where the certificates may not be trusted by the local store. The end-to-end acknowledgements configuration,
acknowledgements, was moved from sources to sinks. When set on a sink, all connected sources that support acknowledgements are configured to wait for the sink to acknowledge before acknowledging the client. Settingacknowledgementson sources is now deprecated.See the upgrade guide for more details.
vector tapandvector tophave had a few enhancements.vector tap:- It now supports tapping inputs via
--inputs-of - It now reports when the component id patterns provided do not match. It supports
--quietto suppress these messages. - A
--metaflag was added to include metadata about which component the output events came from.
Both
vector topandvector tapnow automatically reconnect if the remote Vector instance goes away. This behavior can be disabled by passing--no-reconnect.- It now supports tapping inputs via
Initial support was added for ingesting traces from the Datadog Agent into Vector (via the
datadog_agentsource) and forwarding them to the Datadog API (via the newdatadog_tracessink). Note that currently APM metrics are dropped and so you will be missing these statistics in Datadog if you forward traces to it through Vector. We will be following up to add support APM metrics to Vector.Datadog docs are forthcoming but the Agent configuration option,
apm_config.apm_dd_url, can be used to forward traces from the Datadog Agent to Vector.- The
scrape_interval_secsconfiguration option of theinternal_metricssource can now be fractional seconds. - VRL’s
to_timestampnow accepts an optionalunitargument to control how numeric unix timestamp arguments are interpreted. For example,unitcan be set tomillisecondsif the incoming timestamps are unix millisecond timestamps. It defaults tosecondsto maintain current behavior. - For Debian packages, the created
vectoruser is now added to thesystemd-journal-remotegroup, if it exists, to facilitate Vector being used to collect remote journald logs. - The
lokisink now supports settingout_of_order_actiontoacceptto instruct Vector to not modify event timestamps. Vector would previously modify timestamps to attempt to satisfy Loki’s ordering constraints, but these constraints were relaxed in Loki 2.4. If you are running Loki >= 2.4 it is recommended to setout_of_order_actiontoacceptto enable Vector to send data concurrently. All AWS components were migrated to the new AWS SDK from the end-of-life rusoto SDK. This new SDK supports IMSDv2 for authentication.
See the upgrade guide for more information.
- The
journaldsource now supports asince_nowoption to instruct Vector to only fetch journal entries that occur after Vector starts. - Reporting for the
blackholesink can now be disabled via settingprint_interval_secsto0. - The
routetransform now has an_unmatchedroute that can be consumed to receive events that did not match any of the other defined routes. - Add
ip_ntopandip_ptonVRL functions which can convert IPv6 addresses to and from their byte and string representations. - Add
is_emptyVRL function which returns whether the given object, array, or string is empty. - The
splunk_hecsource now accepts events on/services/collector. This route is an alias for/services/collector/event. - The
datadog_metricssink now allows configuration of TLS via the standardtlsoptions. - The
aws_ec2_metadatatransform now allows fetching theaccount-idfield (this field must be opted into). Additional options have been added to the
aws_sqssource:delete_messageto control whether messages are deleted after processing. This is useful for testing out the source.visibility_timeout_secsto control how long messages are locked for before being rereleased to be processed again. Tuning this is useful for controlling how long a message will be “sent” if a Vector instance crashes before deleting the message.
These options mirror those that existed for the
aws_s3source for its SQS configuration.The
kubernetes_logssource has been rewritten to use the community supportedkube-rslibrary. We expect that this will resolve some long outstanding bugs with Vector ceasing to process container logs. It also adds support for Kubernetes authentication token rotation.See the highlight for more details.
- Component
proxyconfiguration can now include username/password encoded into the URL of the proxy likehttp://john:password@my.proxy.com. - A
strlenfunction was added to VRL to complement thelengthfunction. Thelengthfunction, when given a string, returns the number of bytes in that string. Thestrlenfunction returns the number of characters. Users can now provide dynamic label names to the
lokisink via a trailing wildcard. Example:labels: pod_labels_*: {{ kubernetes.pod_labels }}This is similar to the promtail configuration of:
- action: labelmap regex: __meta_kubernetes_pod_label_(.+) replacement: pod_labels_$1- Users can now configure query parameters on the
prometheus_scrapesource that are sent to all configuredendpoints via the newqueryoption. This is useful when using Vector with a federated Prometheus endpoint. - The
vector sinkcan now enable gzip compression by settingcompressiontotrue. - The
splunk_hecsource’s healthcheck that is exposed at/service/collector/healthno longer requires a HEC token. This matches the behavior of the Splunk forwarder and makes it easier to use with load balancers that cannot set this header. - The
batch.timeoutconfiguration on sinks can now be include fractional seconds.
20 bug fixes
- Vector’s
/healthendpoint (mounted whenapi.enabledistrue) now returns a 503 when Vector is shutting down. This is useful when using a load balancer so that traffic is routed to other running Vector instances. - The
luatransform now returns an error at configuration load time if an unknown field is present onhooks. This helps make typos more visible. docker_logssource now exits, shutting down Vector, if it hits an unrecoverable deserialization error. Previously it would just stall.- AWS components now allow
regionandendpointto be configured simultaneously. This is useful when using an AWS compatible API. - The
gcp_stackdriver_logssink now recognizes a severity ofERasERROR. - The remainder operation in VRL is now fallible if the right-hand side is a field or variable as this can fail at runtime if the right-hand side is
0. This matches the behavior of division. - A case where Vector would panic during reload was fixed that would occur whenever a component has changing inputs, but some inputs are the same.
- The
journaldsource now flushes internal batches every 10 milliseconds, regardless of whether the batch is full. This avoids an issue where the source would wait a very long time to send data downstream when the volume was low but the batch size was configured high to handle spikes. - The
geoiptransform now avoids re-reading the database from disk randomly. This was unintended behavior. We have an open issue for reloading the database from disk during Vector’s reload process. - Ensure that instrumentation labels on internal logs and metrics are not lost when Vector is run in quiet mode (
-qor-qq). Previously running with a log level belowINFOwould cause some instrumentation labels to be lost (likecomponent_id). - Escape quotes and backslashes in metric tags for the
prometheus_exportersink. Previously these were not escaped and so resulted in invalid Prometheus export output that could not be scraped. - The Debian package names were updated to confirm to the Debian packaging standards by changing from
vector-${VECTOR_VERSION}-${PLATFORM}.debtovector_${VECTOR_VERSION}_${PLATFORM}-${REV}.deb.REVis typically1. - The
kafkasource now reads the incoming message as raw bytes rather than trying to deserialize it as a UTF-8 string. - End-to-end acknowledgements were fixed for the
aws_sqssource which would previously only acknowledge the last message in each batch from SQS when acknowledgements were enabled. - The
aws_sqssource would previously acknowledge events in SQS even if it failed to push them to downstream components. This has been corrected. - The VRL
parse_xmlfunction now correctly parses the node attributes for solo nodes which have no siblings. Previously these node attributes were dropped. vector topnow reports error metrics correctly again.- The buffer received event metrics (
buffer_received_events_totalandbuffer_received_bytes_total) now include the counts from discarded events. This was done to match the component metrics and to support future bufferon_fullmodes which may not discard events right away. The
socketsource when inudpmode would previously include the port of the remote address in the enrichedhostfield. This differed from thetcpmode where only the host part of the remote address is enriched. Instead, this source now does not include the port in the enrichedhostfield.However, the
socketsource now has aport_keythat can be set to opt into enrichment of the remote peer port as part of the address.Vector’s published docker images no longer include
VOLUMEdeclarations. Instead, users should provide a volume at runtime if they require one. This avoids the behavior of Vector creating a volume for its data directory even if it is unused.See the upgrade guide for more information.
1 chore
- Deprecated GraphQL API routes were removed. See the upgrade guide for more details
What’s next
We are in the process of adding a source for ingesting data from the OpenTelemetry collector and OpenTelemetry compatible tools. We are starting with traces, since this has stabilized, but will move on to metrics and logs.
We’ll also be adding an OpenTelemetry sink for forwarding data from Vector to OpenTelemetry-compatible APIs.
At long last, support for iteration in VRL is almost ready. We expect it to be included in the next release.
See the RFC for a preview of how this will work.
VRL now has lexical scoping for blocks. This means that variables defined inside of a block in VRL (e.g.
an if condition block) are no longer accessible from outside of this block. This breaking change
was done to support VRL’s forthcoming iteration feature which requires it.
See the upgrade guide for how to migrate your VRL programs.