天天看点

Relabeling 重新标记

Relabeling 重新标记

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​

    ​)
Relabeling 重新标记
平时在配置监控目标的时候我们更多的会用 ​

​relabel_configs​

​​ 与 ​

​metric_relabel_configs​

​ 两个配置
  1. 采集数据之前,通过 ​

    ​relabel_configs​

  2. 采集数据之后,写入存储之前,通过 ​

    ​metric_relabel_configs​

    ​ 进行配置。

所有这些 relabeling 配置块都是相同类型的 ​

​relabel_config​

​,每个配置块都由一个规则列表组成,这些规则依次应用与每个标记的对象。(重新标记的时候有一系列的规则,应用了规则1之后转换为另外一个对象,然后规则2又去应用它,然后规则3又去应用它,最后将处理后的对象输出出来)

Relabeling 重新标记

例如,一个 relabeling 规则可以根据正则表达式的匹配来保留或丢弃一个对象,可以修改其标签,也可以将一整组标签映射到另一组。一旦一个 relabeling 步骤决定放弃一个有标签的对象,就不会对这个对象执行进一步的 relabeling 步骤,它将从输出列表中删除。

隐藏的标签与元数据

以双下划线​

​__​

​开头的标签属于特殊的标签,它们在重新标记后会被删除。标记对象的来源最初可以附加这些隐藏的标签,以提供关于标记对象的额外元数据,这些特殊的标签可以在 relabeling 阶段被用来对对象的标签进行修改。

这些都是普通的标签,没有下划线开头的。 

Relabeling 重新标记

下面这些以双下划线开头和双下划线结尾的这些标签名称,这些都是特殊的标签。

可以对这些标签做relabel操作,操作完之后这些标签就删除了。

Discovered Labels可以映射为我们的目标标签Target Labels,只保留job instance标签,这里address就映射为instance这个标签了,其余的元标签以_xx_格式的就不要了,最后就只保留了job和instance标签。

Relabeling 重新标记
Relabeling 重新标记
Relabeling 重新标记
Relabeling 重新标记
Relabeling 重新标记
- 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__​

    ​​:包含应该被抓取目标的地址,它最初默认为服务发现机制提供的 ​

    ​<host>:<port>​

    ​​,如果在此之前没有明确地将实例标签 instance 设置为其他值,那么在 relabeling 之后,Prometheus 会将 instance 标签设置为​

    ​__address__​

    ​ 的值。(如果替换了,会根据替换之后的地址去抓取)
  • ​__scheme__​

    ​:抓取目标的请求模式,包括 http 与 https,默认为 http。
  • ​__metrics_path__​

    ​​:表示用于采集指标的 HTTP 路径,默认为​

    ​/metrics​

    ​​。(如果提供了metrics路径不在​

    ​__metrics_path__下面,那么可以对其使用relabel操作的,将里面的值做一个替换​

    ​)
  • ​__param_<name>​

    ​: 包含 HTTP 查询参数名称和它们的值。

继续阅读