一个计算机技术爱好者与学习者

0%

Prometheus中标签(Labels)详解

1. 前言

Prometheus中,数据模型的核心是标签(Labels)。标签允许我们对指标数据进行维度化和分类,从而更好地理解系统的运行状态和性能。

本文将学习 Prometheus 中标签的基础知识,以及如何使用标签来优化指标的管理和查询。

参考文档:

2. 标签是什么?

标签是 Prometheus 数据模型中的重要组成部分,它是一个键值对,用于描述指标的维度和属性。
每个样本数据都附带一组标签,这样我们可以将数据划分为不同的维度,从而更好地分析和查询数据。
例如,对于 CPU 使用率指标,我们可以使用 instance 标签来表示不同的主机,使用 job 标签来表示不同的任务。

标签的作用包括:

  • 数据分类和分组: 标签允许我们将数据按照不同的维度进行分类和分组,从而在查询和分析时更精确地选择数据。
  • 查询和过滤: 标签使我们能够在查询时按照特定维度进行过滤,从而获取我们所需的数据。
  • 聚合和计算: 标签使我们能够对数据进行聚合和计算,生成更高级别的指标,如平均值、总和等。

3. 使用标签

3.1. 添加标签

1
2
3
4
5
6
7
scrape_configs:
- job_name: 'example-job'
static_configs:
- targets: ['example-host:9090']
labels:
app: 'example-app'
environment: 'production'

在上述示例中,我们通过 labels 字段添加了两个标签:app 和 environment。这样,所有从 example-host:9090 采集到的指标都会带有这两个标签,从而更好地描述数据的来源和环境。

3.2. 查询和分组

在 PromQL 查询中,我们可以使用标签进行数据的选择、分组和聚合。
例如,我们可以使用以下查询来获取特定应用的请求计数:

1
http_requests_total{app="example-app"}

4. relabel_configs是什么?

relabel_configs 是Prometheus中的一个关键配置项,它允许我们在数据采集之前对指标的标签进行操作。
relabel_configs 允许我们对标签进行添加、删除、重命名、合并,以及对标签值进行提取和替换等操作,以满足不同场景下的需求。

5. 使用relabel_configs

5.1. relabel_configs 的配置格式

在 Prometheus 的配置文件中,我们可以在 scrape_config(用于数据采集配置)或者 service_monitor(用于服务监控配置)中使用 relabel_configs。
下面是一个示例配置:

1
2
3
4
5
6
7
8
9
10
scrape_configs:
- job_name: 'example-job'
static_configs:
- targets: ['example-host:9090']
relabel_configs:
- source_labels: [source_label]
target_label: target_label
action: [keep|drop|replace|labelmap]
regex: 'regex_pattern'
replacement: 'replacement_string'

在上面的配置中,我们可以配置以下属性:

  • source_labels:源标签,用于指定操作的源标签。
  • target_label:目标标签,用于存储操作的结果。
  • action:操作类型,可以是 keep(保留)、drop(删除)、replace(替换)和 labelmap(从标签名中提取)。
  • regex:正则表达式,用于匹配源标签的值。
  • replacement:在替换操作中使用的字符串。

5.2. relabel_configs 常见操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
scrape_configs:
- job_name: 'example-app'
metrics_path: /metrics
static_configs:
- targets: ['example-app:8080']
relabel_configs:
# 添加标签
- source_labels: []
target_label: added_label
replacement: 'new_value'

# 重命名标签
- source_labels: [old_label]
target_label: new_label

# 删除标签
- action: labeldrop
regex: label_to_remove

# 多值标签的操作 - 合并多个标签值为一个
- action: replace
source_labels: [label1, label2]
target_label: merged_labels
separator: ';'

# 使用正则表达式从标签值中提取信息
- source_labels: [instance]
target_label: extracted_info
regex: ^(.*):8080$
replacement: $1

# 对标签值进行保留
- action: keep
source_labels: [important_label]

# 替换标签值
- source_labels: [instance]
target_label: instance
regex: (.*).example-app.*$
replacement: $1

5.3. relabel_configs示例

场景: 我们有一个 Kubernetes 集群中运行的微服务架构,每个服务都暴露了 /metrics 端点。我们想要为每个服务添加一个标签,以标识不同的应用。

步骤:
1、在 Prometheus 的 scrape_configs 中,配置每个服务的 job_name 和 targets。
2、使用 relabel_configs 来为每个服务添加一个标签,如 app_name。

以下是一个示例的配置:

1
2
3
4
5
6
7
scrape_configs:
- job_name: 'service-metrics'
static_configs:
- targets: ['service-1:8080', 'service-2:8080', 'service-3:8080']
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_app]
target_label: app_name

在上述配置中,我们使用 relabel_configs 将 Kubernetes 服务标签 __meta_kubernetes_service_label_app 的值赋给了 app_name 标签。

6. relabelings是什么?

relabelings是Kubernetes servicemonitor中专用配置项,配置方式和 relabel_configs 相同。
relabelings 和 relabel_configs 有什么区别?名字不同,子项的大小写不同,其余没有区别。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-prometheus-labels/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~