How do you allow for the keep
relabel action halting relabelling for things not kept?
Any targets dropped by the drop
relabel action won't be processed by any following relabel actions. The same applies for keep
, if it's not kept then it's now gone. In practice this means that a list of actions like
- source_labels: [label] regexp: foo action: keep - source_labels: [label] regexp: bar action: keep
will return nothing, as label
cannot be both foo
and bar
at the same time.
You could combine the actions using the regex alternation operator:
- source_labels: [label] regexp: foo|bar action: keep
This can however get a little unwieldy when you want to apply more intricate business logic across multiple source labels.
Another approach would be to set a flag when your criteria is met, and use keep
on that:
- source_labels: [label] regexp: foo target_label: __tmp_keep_me replacement: true - source_labels: [label] regexp: bar target_label: __tmp_keep_me replacement: true - source_labels: [__tmp_keep_me] regex: true action: keep
The default replace
action only has an effect if it matches, so if label
is foo
or bar
the __tmp_keep_me
label ends up with the value true
which a keep
action can then be predicated on. This pattern can be used with any number of actions.
The __tmp
prefix is reserved for user usage in target relabelling, and it is promised that no future Prometheus feature will use this prefix. As is begins with __
it will be discarded with all other metadata before determining the final target labels.
Have questions about relabelling? Contact us.
No comments.