Skip to content

Instantly share code, notes, and snippets.

Created April 19, 2017 07:06
What would you like to do?
sample prometheus configuration explained
// For all the confusing Prometheus configuration and
// regular expressions,
// explained in examples.
// Remember, there are default values for each item if it's missing.
// regex is (.*),
// replacement is $1,
// separator is ;
// ,and action is replace
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
// keep targets with label __meta_kubernetes_service_annotation_prometheus_io_scrape equals 'true',
// which means the user added true in the service's annotation.
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
// if __meta_kubernetes_service_annotation_prometheus_io_scheme is http or https, replace __scheme__ with its value that is the default replacement: $1.
// this means the user added in the service's annotation.
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
// this is also for service annotation of prometheus, if the user overrides the scrape path,
// its value will be put in __metrics_path__
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: (.+)(?::\d+);(\d+)
replacement: $1:$2
// if the user added in the service annotation,
// use this port to replace the port in __address__
// all above rules are for handling prometheus annotation:
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
// all __meta_kubernetes_service_label_(.+) will be changed to the (.+)
// e.g. __meta_kubernetes_service_label_app='armada-api' to app='armada-api'
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
// if __meta_kubernetes_namespace matches .*, put its value in label kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: service_name
// if __meta_kubernetes_service_name matches .*, put its value in label service_name
- source_labels: [__meta_kubernetes_pod_node_name]
action: replace
target_label: hostname
// if __meta_kubernetes_pod_node_name matches .*, put its value in label hostname
Copy link

nicocolt commented Nov 5, 2019

Thanks, can you provide us the updated link ?

Copy link

Well done 🥇 ! That should really go into the docs

Copy link


Copy link

I am still confused... If I have a metric


How do I drop all baz labels and keep only app=foo metrics so that I end up with:


Also, what is separator? What am I separating? The only thing I can think of are labels, and I have never seen them separated by a ; which makes using it as the default very confusing.

Copy link

songleo commented Jul 8, 2020

@bschaeffer you can use labeldrop action to do it. for details

Copy link

for replace action , should the target label be already present / if its not present does prometheus add one ?

Copy link

Amazing, made my day much easier, thanks!

Copy link

thanks everyone, but really not in the mood to update this. i just got laid off by IBM :(

Copy link

I'm so sad to heard this :( good luck

Copy link

genseb13011 commented Oct 21, 2022

Thanks very useful when onboarding on Opentelemetry <3

Copy link

Thanks this is helpful.

Copy link

reachlin commented Nov 9, 2022

@nicocolt thanks. i am working at a start-up now, as an infra. engineer

Copy link

zimmnik commented Dec 23, 2022

Thanks very much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment