UTF-8 support in metric and label names #1255
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Adds UTF-8 support for metric and label names.
These changes are based on the work done on the Prometheus common libraries here and here
prometheus-metrics-exposition-formats
module will use the new quoting syntax{"foo"}
iff the metric does not conform to the legacy name format (foo{}
)prometheus-metrics-model
module has a new flag (NameValidationScheme
) that determines if validation is done using the legacy or the UTF-8 scheme. This flag can be set via a property in the properties file.escaping=allow-utf-8
in the Accept header. In cases where UTF-8 is not available, metric providers can be configured to escape names in a few different ways: values (U__
UTF value escaping for perfect round-tripping), underscores (all invalid chars become_
), dots (dots become_dot_
,_
becomes__
, all other values become___
). Escaping can either be a global default (PrometheusNaming.nameEscapingScheme
) or can also be specified in Accept header with theescaping=
term, which can beallow-utf-8
(for UTF-8-compatible),underscores
,dots
, orvalues
.This should still be a noop for existing configurations because scrapers will not be passing the escaping key in the Accept header. Existing functionality is maintained.
prometheus-metrics-exporter-pushgateway
module will escape UTF-8 grouping keys in the URL path used when pushing metrics (see Add UTF-8 support in metric and label names pushgateway#689)Work towards prometheus/prometheus#13095