Prometheus relabel configs are notoriously badly documented, so here’s how to do something simple that I couldn’t find documented anywhere: How to add a label to all metrics coming from a specific scrape target.
Example
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# Add your relabel config under the scrape configs
relabel_configs:
# source label must be one that exists, so use __address__
- source_labels: [__address__]
# target label is the one you want to create
target_label: my_new_label
replacement: "my-new-label-value"
And there you have it.
This will create a new label “my_new_label
” with the fixed value “my-new-label-value
“.
How does it work?
If you don’t supply them, the default settings for a relabel_config are:
action: replace
regex: (.*)
separator: ;
By choosing a single always existing source label
(__address__
always exists), you are guaranteed to get a source match for replacing the target_label
with. The default regex
wil always match, which causes the replacement to be carried out. However, we’re not specifying any match group’s in our replacement
string, so the entire string is just copied into target_label
. This is just a very specific case of how you can use a relabel_config
to copy (parts of) a label into another (new) label.
Hi, this is nice, but what is the benefit or difference to just adding new label for a target?
I mean like this:
static_configs:
– targets: [‘localhost:9090’]
labels:
my_new_label: my_new_label-value
Good question!
Because you can only add labels using the labels: setting to static_configs:
You can’t do this when you are using any of the service discovery scrape configurations.
Properly understanding how to use relabel_configs is essential when working with service discovery.