标签作用: Prometheus中存储的数据为时间序列,是由Metric的名字和一系列的标签(键值对)唯一标识的, 不同的标签代表不同的时间序列,即 通过指定标签查询指定数据 。
不同的标签代表不同的时间序列,即通过指定标签查询指定数据。

指标+标签实现了查询条件的作用,可以指定不同的标签过滤不同的数据
 

Metadata标签

在被监控端纳入普罗米修斯里面定义了一些元数据标签

在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:

• __address__:当前Target实例的访问地址<host>:<port>

• __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS

• __metrics_path__:采集目标服务访问地址的访问路径

上面这些标签将会告诉Prometheus如何从该Target实例中获取监控数据。除了这些默认的标签以外,我们还可以为Target添加自定义的标签。

Prometheus 正则模糊 label prometheus label_values_Server

在抓取被监控端就会带上这些标签,这些标签就是声明要采集谁,协议是什么,以及暴露的接口是谁

一般来说元标签只是普罗米修斯去使用,我们一般不会让其做什么事情,并且这些标签是不会写到数据库当中的,使用promql是查询不到这些标签的,因为这些标签只是普罗米修斯内部去使用的,不会存储在时序数据库供我们查询。

自定义标签

可以自定义标签,有了这些标签可以针对特定的标签去查询,比如根据机房,或者项目查询某些机器

添加的标签越多,查询的维度越细。

- job_name: 'BJ Linux Server'
    basic_auth:
      username: prometheus
      password: 123456
    static_configs:
    - targets: ['192.168.179.99:9100']
      labels:
        idc: tongniu
        project: www
 
  - job_name: 'Shanghai Linux Server'
    basic_auth:
      username: prometheus
      password: 123456
    static_configs:
    - targets: ['192.168.179.99:9100']
      labels:
        idc: sss
        project: blog

Prometheus 正则模糊 label prometheus label_values_java_02

可以看到基于自定义标签实现多维度的查询 

Prometheus 正则模糊 label prometheus label_values_java_03

 

重新标记标签

 重新标记目的:为了更好的标识监控指标。

在两个阶段可以重新标记:
• relabel_configs : 在采集之前(比如在采集之前重新定义元标签)
• metric_relabel_configs:在存储之前准备抓取指标数据时,可以使用relabel_configs添加一些标签、也可以只采集特定目标或过滤目标。 已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。

重新标记标签一般用途:

• 动态生成新标签  根据已有的标签生成新标签

• 过滤采集的Target

• 删除不需要或者敏感标签

• 添加新标签

action:重新标记标签动作

• replace:默认,通过regex匹配source_label的值,使用replacement来引用表达式匹配的分组,分组使用$1,$2...引用(正则匹配,提取字段重新创建新标签,注意这里是创建新的标签)

• keep:删除regex与连接不匹配的目标 source_labels , keep drop就是让普罗米修斯采集和不采集哪些目标

• drop:删除regex与连接匹配的目标 source_labels

• labeldrop:删除regex匹配的标签

• labelkeep:删除regex不匹配的标签

• labelmap:匹配regex所有标签名称,并将捕获的内容分组,用第一个分组内容作为新的标签名(使用正则提取出多个字段,使用匹配到的作为新标签名,但是标签的内容不会改变,相对于对原有标签换了个名字)

重新标记标签:重命名标签

场景1:动态生成添加标签(对已有的标签重新标记)  

 

- job_name: 'Linux Server'
    basic_auth:
      username: prometheus
      password: 123456
    static_configs:
    - targets: ['192.168.179.99:9100']
    metric_relabel_configs:
    - action: replace
      source_labels: ["instance"]
      regex: (.*):([0-9]+)  # 正则匹配标签值,( )分组
      replacement: $1       # 引用分组匹配的内容
      target_label: "ip"

可以看到该标签已经进入数据库里面了,这样就根据源标签通过正则匹配动态生成了新的标签 

Prometheus 正则模糊 label prometheus label_values_Server_04

重新标记标签:过滤Target 

场景2:选择采集的目标

- job_name: 'Linux Server'
    basic_auth:
      username: prometheus
      password: 123456
    static_configs:
    - targets: ['192.168.179.99:9100']
    relabel_configs:
    - action: drop
      regex: "192.168.179.99:9100"   # 正则匹配标签值
      source_labels: ["_address_"]

在target里面就没有了,在普罗米修斯里面就看不到该台机器,同时exporter也不会被停止,这样就完成过滤目标需求。