Vector v0.20.0 release notes
- When unit testing targets that have multiple outputs, Vector logs a warning for untested outputs. Will be fixed in
0.20.1. - If nonexistent extract_from/no_outputs_from targets are included in unit testing configurations,
vector testwill panic. Will be fixed in0.20.1.
The Vector team is pleased to announce version 0.20.0!
In addition to the new features, enhancements, and fixes listed below, this release includes a new opt-in disk buffer implementation that we hope will provide users with faster, more consistent, and lower resource usage buffer performance. We encourage you to opt-in during this beta period and give us feedback. See the beta disk buffer highlight article for more details including how to opt-in.
We also made additional performance improvements this release increasing the average throughput by 10-20% for common topologies (see our soak test framework).
Be sure to check out the upgrade guide for breaking changes in this release.
Vector Changelog
2 new features
A new
new_relicsink was added that can handle both logs and metrics. It can also send logs to New Relic as New Relic events. It replaces the existingnew_relic_logssink that has been deprecated.Thanks to @Andreu for this contribution!
- This release includes a new opt-in disk buffer implementation that we hope will provide users with faster, more consistent, and lower resource usage buffer performance. We encourage you to opt-in during this beta period and give us feedback. See the beta disk buffer highlight article for more details including how to opt-in.
14 enhancements
- Support for unit testing task transforms and named outputs was added. See the highlight article for more details.
- The
routetransform was refactored to rely on Vector’s new concept of named outputs for components. The behavior is the same, but the metrics emitted by the transform have been updated as noted in the highlight article for named output metrics. A
multiple_outputsoption was added to thedatadog_agentsource. When set totrue, rather than emitting both logs and metrics to any components using the component id of the source ininputs, the events will be split into two separate streams,<component_id>.logsand<component_id>.metrics, so that logs and metrics from the Datadog agent can be processed separately.When set to
true, the internal metrics from this source are also updated as mentioned in the highlight article for named output metrics.multiple_outputsdefaults tofalsefor compatibility with existing configurations.The telemetry for a few components was updated as a result expanding the use of named outputs in Vector for components with multiple output streams:
routedatadog_agent(whenmultiple_outputsistrue)remap(whenreroute_droppedistrue)
These components now add an
outputtag to their metrics. See highlight article for named output metrics.The
abortfunction can now take an optional string message to include in logs and the metadata for dropped events. For example:if .foo == 5 { abort "foo is " + .foo + "!" }The
foo is 5!message will appear in Vector’s internal logs as well as being used asmetadata.messagefor rerouted dropped events (ifreroute_droppedistrue).- If a custom message is passed to
assertorassert_eq, this message is now used asmetadata.messagerather than the default VRL error message which includedfunction call error: .... This allows cleaner handling of different assertion errors if routing dropped events to another component (whenreroute_droppedistrue). - The
vectorsource andvectorsink now default to version 2 of the protocol for inter-Vector communication. See the upgrade guide for more details. 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:
aws_ecs_metricsaws_kinesis_firehoseaws_s3datadog_agentdemo_logsdnstapdocker_logseventstoredb_metricsexechost_metricsinternal_logsinternal_metricskafkakubernetes_logsnatsnginx_metricsprometheus_scrapestdinvector
And these transforms:
aws_ec2_metadata
- The
lokisink now supports thecompressionoption. For now, the only available compression isgzip. The internal telemetry for the
lokisink has been improved by:- The addition of
component_discarded_events_totalmetric for discarded events - The addition of the
rewritten_timestamp_events_totalmetric to count events whose timestamp was rewritten - The log messages for out-of-order events were dropped in severity from
warntodebugsince out-of-order events are a common occurrence, something the sink is designed to handle, and the handling behavior is explicitly configured by the user
See the upgrade guide for more details.
- The addition of
- When a condition (for example for the
routetransform) that was written with VRL fails to execute, the reason for failure is now output in the logs. vector tophas been updated to show the event metrics per output when a component has multiple outputs.- TCP-based sources like
fluent,syslog, andsocketnow handle back-pressure better. Previously, back-pressure to these sources from downstream components would cause runaway resource growth as the source would continue to accept connections even though it couldn’t handle them right away. A new algorithm has been introduced to start applying back-pressure to clients once ~100k events are buffered in the source. The source will then start closing new connections, rather than accepting them, until it has flushed events downstream. The
vector tapcommand has had two enhancements:- It can now tap metric events in addition to log events
- It has a new
logfmtoption that can be used to format the tapped output as logfmt data
12 bug fixes
Fixed runaway memory growth when the
prometheus_exportersink was used with distributions due to the sink holding onto all of the samples it had seen.This required a breaking change as documented in the upgrade guide.
- The
splunk_hecsource now accepts invalid UTF-8 bytes, matching Splunk’s HEC behavior. It replaces them with the UTF-8 replacement character: � A few fixes were made to
parse_groks:The
arrayfilter now supports arrays without brackets, if empty string is provided as brackets. For example: `%{data:field:array("", “-”)} will parse “a-b” into [“a”, “b”].The
keyvaluefilter now supports nested paths as keys. For example:parse_groks("db.name=my_db,db.operation=insert", patterns: ["%{data::keyvalue}"] )will yield
{ "db" : { "name" : "my_db", "operation" : "insert", } }The
datefilter now supports thedandyshorthands. For example:parse_groks("Nov 16 2020 13:41:29 GMT", patterns: ["%{date("MMM d y HH:mm:ss z"):field}"] )Will yield:
1605534089000Numeric values are now returned as integers when there is no loss in precision; otherwise they continue to be returned as floats.
Aliases that match multiple fields now correctly extract as an array of values. extracted values.
Aliases with a filter now correctly extract.
The
keyvaluefilter now correctly ignores keys without values.To match the beginning and the end of lines,
\Aand\Zmust be used rather than^and $`The
keyvaluefilter now correctly handles parsing keys that start with a number
- The
azure_blobsink now correctly parses connection strings including SAS tokens. - Report correct
buffer_events_totalmetricdrop_newestis used for buffers. Previously, this was counting discarded events. - Support for HTTP(S) proxies was added to the
aws_sqssource. This can be configured the usual way through theproxyconfiguration field or environment variables. encoding.only_fieldsnow correctly deserializes again for sinks that used fixed encodings (i.e. those that don’t haveencoding.codec). This was a regression inv0.18.0.- Predicates in VRL
ifconditions now correctly check for fallibility. This is a breaking change. See the upgrade guide for more details. - Continue to process data when decoding fails in a source that is using
decoding.codec. - Division by a literal nonzero number in
VRLis no longer fallible. See the upgrade guide for more details. - All transforms now correctly publish metrics with their component span tags (like
component-id). This was a regression inv0.19.0. - The
syslogdecoder (encoding.codecon sources) now correctly errors if the incoming data is not actually syslog data. Previously it would pass through the invalid data. In the future, we will likely add a way to route invalid events.
1 chore
The minimal supported Kubernetes version was bumped from v1.15 to v1.19.
Older versions are likely to still work, we just only test against v1.19+.