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

Metadata标签

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

address:当前Target实例的访问地址:

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

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

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

自定义标签

bash
- job_name: 'linux'
basic_auth:
username: prometheus
password: 123.com
static_configs:
- targets: ['192.168.0.12:9100']
labels:
idc: BJ #北京的机房
project: JD #京东的项目

#在这个下面可以任意的添加多个标签

北京机房京东项目整个cpu使用率

重新标记标签

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

在两个阶段可以重新标记:

• relabel_configs :在采集之前

• metric_relabel_configs:在存储之前

准备抓取指标数据时,可以使用relabel_configs添加一些标签、也可以只采集特定目标或过滤目标。 已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。

重新标记标签一般用途:

• 动态生成新标签

• 过滤采集的Target

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

• 添加新标签

action:重新标记标签动作

• replace:默认,通过regex匹配source_label的值,使用replacement来 引用表达式匹配的分组,分组使用$1,$2…引用

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

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

• labeldrop:删除regex匹配的标签

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

• labelmap:匹配regex所有标签名称,并将捕获的内容分组,用第一个分 组内容作为新的标签名

重新标签的应用

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

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

bash
- job_name: 'linux'
basic_auth:
username: prometheus
password: 123.com
static_configs:
- targets: ['192.168.0.12:9100']
labels:
idc: BJ
project: JD
metric_relabel_configs: #在存储数据之前重新标记
- action: replace #重新标记标签动作,默认replace
source_labels: ['instance'] #告诉prometheus基于哪个标签生成新的标签(重新标记)
regex: (.*):([0-9]+) #正则匹配,(.*)代表一组IP,([0-9]+)代表一组数字,通过:分隔
replacement: $1 # 赋予生成新标签的值,引用正则匹配值,$1表示第一组,$2表示第二组,可以明确指定值
target_label: "ip" #生成的新的标签名叫什么

动态生成新的标签---->ip

重新标记标签:过滤Target

场景2:选择采集的目标

bash
- job_name: 'linux'
basic_auth:
username: prometheus
password: 123.com
static_configs:
- targets: ['192.168.0.12:9100']
labels:
idc: BJ
project: JD
relabel_configs: #在采集之前
- action: drop #重新标记标签动作 ,删除regex与连接匹配的目标 source_labels
regex: "192.168.0.12.*" #意思就是通过正则过滤掉这个target实例
source_labels: ["__address__"] #基于哪个标签过滤

过滤掉192.168.0.12这个target实例了

注意:

address :这个标签是在采集之前

instance : 这个标签是在存储之前

prometheus采集之前使用的是__address__ 这个标签,采集到之后(入库之前),可能生成了一个新的标签,也就是instance这个标签。

重新标记标签:删除标签

场景3:删除不需要或者敏感的标签

bash
- job_name: 'linux'
basic_auth:
username: prometheus
password: 123.com
static_configs:
- targets: ['192.168.0.12:9100']
labels:
idc: BJ
project: JD
metric_relabel_configs: #在存储之前(入库之前)
- action: labeldrop #重新标记标签动作 , 删除regex匹配的标签
regex: "job" #通过正则删除job这个标签

会发现库里没有job这个标签