Enhanced Metric Tags
The metric data model now supports an enhanced representation of tag values
The existing set of tags that have been available on metrics was a simple mapping of string values to single string keys. Some sources, however, may produce metrics that contain tags that don’t fit into this model, such as tags that are bare strings (rather than a key/value pair) or have multiple values for a given key.
With this release, tag values for a given key may now contain a set of values, each of which may be
a string value or
null, which represents a “bare” tag (i.e. a tag with no value, as distinct from
an empty string value). This new tag set only stores unique values, as duplicated tags are not
useful for any component, and so each tag name/value pair will appear only once across all tags.
For compatibility with previous releases, this value set also tracks the last seen or assigned value for each tag. Since most components, in particular sinks, can only make use of a single value for each tag, this last value is used by those components.
The scripting components of
remap have been extended with a configuration option of
metric_tag_values. This controls how these tag values are exposed to scripts. In the default
single, tag values will be exposed as the single value described above. This behavior
matches the existing behavior of scripts so that no script changes will be needed. When set to
full, however, all tag values are exposed as an array for each element. In either case, scripts may
assign either a single value or an array of values to a tag.
.tags.host = "localhost" # Assign a single string value .tags.bare = null # Create a single-valued bare tag .tags.complex = ["remotehost", null, "otherhost"] # Creates three tag values
metric_tag_values setting also shows up in the
codec configuration of sinks and controls
how metric tags are exposed in codecs that can encode metrics. As above, when set to
codecs will expose all values of tags either as arrays (for the
json codec) or as repeated
instances of each tag (for the
text codec). This setting does not apply to the
native_json codecs which always expose all tag values in order to seamlessly transport the
values to other Vector instances.