Relabeling 重新标记
主要是在Prometheus配置当中的使用。
Relabeling 重新标记用于配置 Prometheus 元信息的方式,它是转换和过滤 Prometheus 中 label 标签对象的核心,我们将了解 Relabeling 规则的工作原理,并能够将它们应用于不同的场景中。
Prometheus在抓取目标配置完成之后,就会将监控的目标抓取过来。抓取过来之后,下面会有很多label标签,有些label标签需要我们去过滤,做一些转换,可能某些序列不是我们想要的,这个时候就需要将这个序列过滤掉,有些时候可能需要添加标签或者将里面的标签更改掉,这个时候就需要Relabeling,这些配置还是在Prometheus配置文件里面配置。
概述
Prometheus 发现、抓取和处理不同类型的 label 标签对象,根据标签值操作或过滤这些对象非常有用,比如:
- 只监视具有特定服务发现注解的某些目标,通常在服务发现中使用(主要在服务发现当中,因为服务发现会自动将抓取的目标添加元信息,根据这些元信息做一些过滤)
- 向目标抓取请求添加 HTTP 查询参数(查询的路径不是metrics需要做些替换)
- 仅存储从指定目标中提取样本的子集(有些样本不需要,需要将其过滤掉)
- 将抓取序列的两个标签值合并为一个标签
Relabeling 是作为一系列转换步骤实现的,我们可以在 Prometheus 的配置文件中应用这些步骤来过滤或修改标记对象,我们可以对一下类型的标记对象应用 Relabeling 操作:
- 发现的抓取目标(
)relabel_configs
- 抓取的单个样本(
)metric_relabel_configs
- 发送给 Alertmanager 的报警(
)alert_relabel_configs
- 写到远程存储的样本(
)write_relabel_configs
平时在配置监控目标的时候我们更多的会用 与
relabel_configs
两个配置
metric_relabel_configs
- 采集数据之前,通过
relabel_configs
- 采集数据之后,写入存储之前,通过
进行配置。
metric_relabel_configs
所有这些 relabeling 配置块都是相同类型的
relabel_config
,每个配置块都由一个规则列表组成,这些规则依次应用与每个标记的对象。(重新标记的时候有一系列的规则,应用了规则1之后转换为另外一个对象,然后规则2又去应用它,然后规则3又去应用它,最后将处理后的对象输出出来)
例如,一个 relabeling 规则可以根据正则表达式的匹配来保留或丢弃一个对象,可以修改其标签,也可以将一整组标签映射到另一组。一旦一个 relabeling 步骤决定放弃一个有标签的对象,就不会对这个对象执行进一步的 relabeling 步骤,它将从输出列表中删除。
隐藏的标签与元数据
以双下划线
__
开头的标签属于特殊的标签,它们在重新标记后会被删除。标记对象的来源最初可以附加这些隐藏的标签,以提供关于标记对象的额外元数据,这些特殊的标签可以在 relabeling 阶段被用来对对象的标签进行修改。
这些都是普通的标签,没有下划线开头的。
下面这些以双下划线开头和双下划线结尾的这些标签名称,这些都是特殊的标签。
可以对这些标签做relabel操作,操作完之后这些标签就删除了。
Discovered Labels可以映射为我们的目标标签Target Labels,只保留job instance标签,这里address就映射为instance这个标签了,其余的元标签以_xx_格式的就不要了,最后就只保留了job和instance标签。
- job_name: 'kubernetes-node-exporter'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:9100'
target_label: __address__
action: replace
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
对于抓取指标,其中就包含一些隐藏的标签,可以用来控制目标应该如何被抓取。
-
:包含应该被抓取目标的地址,它最初默认为服务发现机制提供的 __address__
,如果在此之前没有明确地将实例标签 instance 设置为其他值,那么在 relabeling 之后,Prometheus 会将 instance 标签设置为<host>:<port>
的值。(如果替换了,会根据替换之后的地址去抓取)__address__
-
:抓取目标的请求模式,包括 http 与 https,默认为 http。__scheme__
-
:表示用于采集指标的 HTTP 路径,默认为__metrics_path__
。(如果提供了metrics路径不在/metrics
)__metrics_path__下面,那么可以对其使用relabel操作的,将里面的值做一个替换
-
: 包含 HTTP 查询参数名称和它们的值。__param_<name>