From e57a291eff9e7ee04c8789d3fb98274854412987 Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Tue, 15 Jul 2025 12:26:21 +0100 Subject: [PATCH 1/7] Add Important Labels subsection, with job and instance called out Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index 4999feb5d..1ad1625da 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -80,7 +80,18 @@ the underlying metric type and unit you work with. * **Metric collisions**: With growing adoption and metric changes over time, there are cases where lack of unit and type information in the metric name will cause certain series to collide (e.g. `process_cpu` for seconds and milliseconds). -## Labels +### Important Labels + +* `job` + * The `job` label is a primary key to differentiate metrics from eaach other. + * If not specified in PromQL expressions, they will match unrelated metrics with the same name. This is especially true in a multi system or multi tenant installation + +WARNING: When using `without`, be careful not to strip out the `job` label accidentally. + +* `instance` + * The `instance` label will include the `ip:port` what was scraped, providing a crucial breadcrumb for debugging scrape time issues + +### General Labelling Advice Use labels to differentiate the characteristics of the thing that is being measured: From a40367a3df6e898a1df7bad47994d3babd6a4072 Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Tue, 15 Jul 2025 13:34:11 +0100 Subject: [PATCH 2/7] Add a new section about labels Signed-off-by: Conall O'Brien --- docs/practices/rules.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/practices/rules.md b/docs/practices/rules.md index f91fef5eb..eebe880ed 100644 --- a/docs/practices/rules.md +++ b/docs/practices/rules.md @@ -19,6 +19,8 @@ This page documents proper naming conventions and aggregation for recording rule Keeping the metric name unchanged makes it easy to know what a metric is and easy to find in the codebase. +IMPORTANT: `job` label acts as a primary key. It is **strongly** recommended that you use it to scope your PromQL expressions to the system you are monitoring. + To keep the operations clean, `_sum` is omitted if there are other operations, as `sum()`. Associative operations can be merged (for example `min_min` is the same as `min`). @@ -27,6 +29,18 @@ If there is no obvious operation to use, use `sum`. When taking a ratio by doing division, separate the metrics using `_per_` and call the operation `ratio`. +## Labels + +NOTE: Omitting a label in a PromQL expression is the functional equivalent of specifying `label=*` + +* In both recorded rules and alerting expressions, always specify a `job` label to prevent expression mismatches from occuring. + This is especially important in multi-tenant systems where the same metric names may be exported by different jobs or the + same job (e.g `node_exporter) in multiple, distinct deployments + +* Always specify a `without` clause with the labels you are aggregating away. +This is to preserve all the other labels such as `job`, which will avoid +conflicts and give you more useful metrics and alerts. + ## Aggregation * When aggregating up ratios, aggregate up the numerator and denominator @@ -40,10 +54,6 @@ Instead keep the metric name without the `_count` or `_sum` suffix and replace the `rate` in the operation with `mean`. This represents the average observation size over that time period. -* Always specify a `without` clause with the labels you are aggregating away. -This is to preserve all the other labels such as `job`, which will avoid -conflicts and give you more useful metrics and alerts. - ## Examples _Note the indentation style with outdented operators on their own line between From ccf009af0898d2c2f3d16864c1a6a43cbd081a38 Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Thu, 14 Aug 2025 12:08:39 +0100 Subject: [PATCH 3/7] Fix typo Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index 1ad1625da..d17b13b0f 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -83,7 +83,7 @@ of unit and type information in the metric name will cause certain series to col ### Important Labels * `job` - * The `job` label is a primary key to differentiate metrics from eaach other. + * The `job` label is a primary key to differentiate metrics from each other. * If not specified in PromQL expressions, they will match unrelated metrics with the same name. This is especially true in a multi system or multi tenant installation WARNING: When using `without`, be careful not to strip out the `job` label accidentally. From 0e87e09e4b65735a059e8bcd261a9bb8dbecce1a Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Thu, 14 Aug 2025 14:07:39 +0100 Subject: [PATCH 4/7] Update docs/practices/naming.md Co-authored-by: Ben Kochie Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index d17b13b0f..485f65bb4 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -80,7 +80,7 @@ the underlying metric type and unit you work with. * **Metric collisions**: With growing adoption and metric changes over time, there are cases where lack of unit and type information in the metric name will cause certain series to collide (e.g. `process_cpu` for seconds and milliseconds). -### Important Labels +### Labels * `job` * The `job` label is a primary key to differentiate metrics from each other. From a79aa9b2fb2029c171815b4128f3d763f0117e8c Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Fri, 15 Aug 2025 11:54:05 +0100 Subject: [PATCH 5/7] Update docs/practices/naming.md Co-authored-by: Ben Kochie Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index 485f65bb4..a337c640f 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -80,7 +80,7 @@ the underlying metric type and unit you work with. * **Metric collisions**: With growing adoption and metric changes over time, there are cases where lack of unit and type information in the metric name will cause certain series to collide (e.g. `process_cpu` for seconds and milliseconds). -### Labels +## Labels * `job` * The `job` label is a primary key to differentiate metrics from each other. From a0ebfa9beff85909523b35437ac527f787115edc Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Sun, 17 Aug 2025 20:42:46 +0100 Subject: [PATCH 6/7] Iterate on the job label description Iterate on the description of the job label, removing "primary key", given it's association with SQL Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index a337c640f..9fe727172 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -83,7 +83,7 @@ of unit and type information in the metric name will cause certain series to col ## Labels * `job` - * The `job` label is a primary key to differentiate metrics from each other. + * The `job` label is one of the few ubiquitious labels, set at scrape time, and is used to identify metrics scraped from the same target/exporter. * If not specified in PromQL expressions, they will match unrelated metrics with the same name. This is especially true in a multi system or multi tenant installation WARNING: When using `without`, be careful not to strip out the `job` label accidentally. From 769452372a75a82d8d5c6fa82e450ba3fdc257f5 Mon Sep 17 00:00:00 2001 From: Conall O'Brien Date: Tue, 7 Oct 2025 16:59:07 +0100 Subject: [PATCH 7/7] Update docs/practices/naming.md Co-authored-by: Ben Kochie Signed-off-by: Conall O'Brien --- docs/practices/naming.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/practices/naming.md b/docs/practices/naming.md index 9fe727172..49a37f4c5 100644 --- a/docs/practices/naming.md +++ b/docs/practices/naming.md @@ -82,6 +82,10 @@ of unit and type information in the metric name will cause certain series to col ## Labels +Prometheus labels can come from both the target and from [relabeling in discovery](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) as well as from the target itself. + +By default Prometheus configures two primary discovery target labels. + * `job` * The `job` label is one of the few ubiquitious labels, set at scrape time, and is used to identify metrics scraped from the same target/exporter. * If not specified in PromQL expressions, they will match unrelated metrics with the same name. This is especially true in a multi system or multi tenant installation