1.Relabeling 标签重写介绍
2.relabel功能详解
3.标签增删改查
- 3.1使用keep对标签值进行匹配保留regex的targets
- 3.2使用drop对标签值进行匹配删除regex的targets
- 3.3使用droplabel对标签名进行匹配并删除
- 3.4修改标签的名称
- 3.5修改标签的值
- 3.6多标签合并
- 3.7完整案例
Relabeling标签重写介绍
在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:
默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:
- address:当前Target实例的访问地址
: - scheme:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
- metrics_path:采集目标服务访问地址的访问路径
- _param
:采集任务目标服务的中包含的请求参数
一般来说,Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。不过这里有一些例外,例如,我们会发现所有通过Prometheus采集的样本数据中都会包含一个名为instance的标签,该标签的内容对应到Target实例的__address__。 这里实际上是发生了一次标签的重写处理。
这种发生在采集样本数据之前,对Target实例的标签进行重写的机制在Prometheus被称为Relabeling。
Prometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。
Relabel用来重写target的标签
每个Target可以配置多个Relabel动作,按照配置文件顺序应用
Target包含一些内置的标签(以’__'开头),都可以用于relabel,在relabel时未保留,内置标签将被删除
Relabel功能详解
relabel流程
Target([source_label,…]) -> relabel -> Target ([target_label,…])
Relabel的配置
[ source_labels: '[' <labelname> [, ...] ']' ]
[ separator: <string> | default = ; ]
[ target_label: <labelname> ]
[ regex: <regex> | default = (.*) ]
[ modulus: <uint64> ]
[ replacement: <string> | default = $1 ]
[ action: <relabel_action> | default = replace ]
Relabel的action
ACTION | Regex匹配 | 操作对象 | 重要参数 | 描述 |
---|---|---|---|---|
keep | 标签值 | Target | 源标签、regex | 丢弃指定源标签的标签值没有匹配到regex的target |
Drop | 标签值 | Target | 源标签、regex | 丢弃指定源标签的标签值匹配到regex的target |
labeldrop | 标签名 | Label | Regex | 丢弃匹配到regex 的标签 |
labelkeep | 标签名 | Label | Regex | 丢弃没有匹配到regex 的标签 |
Replace | 标签值 | Label名+值 | 源标签、目标标签、替换(值)、regex(值) | 更改标签名、更改标签值、合并标签 |
hashmod | 无 | 标签名+值 | 源标签、hash长度、target标签 | 将多个源标签的值进行hash,作为target标签的值 |
labelmap | 标签名 | 标签名 | regex、replacement | Regex匹配名->replacement用原标签名的部分来替换名 |
replace是缺省action,可以不配置action
使用labeldrop 和labelkeep Relabel后需要注意保证metrics+labels唯一
regex 和 replacement 参数详解
regex 正则匹配字段是标签名、标签值具体看上面的表格, Replacement会用到了正则捕获组(需要自行补充相关知识)来替换相应的值(标签名、值)
如何查看源标签
从prometheus --> status --> service Discovery
3.标签的增删改
3.1使用keep保留标签值regex到的targets
使用keep,保留标签值匹配regex的targets
scrape_configs:
- …
- job_name: "cephs"
relabel_configs:
- action: keep
source_labels:
- __address__
regex: ceph01.*
relabel结果可以在Prometheus网页的status/ Service Discovery中查看
3.2使用drop 丢弃标签值regex到的targets
scrape_configs:
- …
- job_name: "cephs"
relabel_configs:
- action: drop
source_labels:
- __address__
regex: ceph01.*
labeldrop or labelkeep
将标签名为job的标签删除
scrape_configs:
- …
- job_name: "cephs"
relabel_configs:
- regex: job
action: labeldrop
labelKeep和labeldrop不操作’__’开头的标签,要操作需要先改名
3.4修改标签的名称
使用replace将scheme标签改名为protocol
scrape_configs:
- …
- job_name: "cephs"
relabel_configs:
- source_labels:
- __scheme__
target_label: procotol
这里可以是多个source_labels,只有值匹配到regex,才会进行替换
使用labelmap,将原始标签的一部分转换为target标签,这一功能replace无法实现
修改标签的值
修改label值
配置k8s服务发现
scrape_configs:
- …
- job_name: "sd_k8s_nodes"
kubernetes_sd_configs:
- role: node
bearer_token_file: bearer_token
tls_config:
ca_file: ca.crt
namespaces:
names:
- default
api_server: https://master01:6443
服务发现完成后,默认node的port是10250,会无法取得数据,同通过relabel修改标签.
relabel_configs:
- source_labels:
- __address__
regex: (.*)\:10250
replacement: "${1}:10255"
target_label: __address__
多标签合并
标签合并,可以将多个源标签合并为一个目标标签,可以取源标签的值,也可以进行hash,用户target分组
在文件服务发现中,将标签filename=“mysql.yml” 和sd_type="file"合并为sd=”file;mysql.yml”,标签值使用分号连接
scrape_configs:
- …
- job_name: "sd_file_mysql"
file_sd_configs:
- files:
- mysql.yml
refresh_interval: 1m
relabel_configs:
- source_labels:
- sd_type
- filename
separator: ;
target_label: sd
将多个标签的值进行hash,形成一个target标签,只要target标签一致,则表示源标签一致,可以用来实现prometheus的负载均衡
scrape_configs:
- …
- job_name: "sd_file_mysql"
file_sd_configs:
- files:
- mysql.yml
refresh_interval: 1m
relabel_configs:
- action: hashmod
source_labels:
- __scheme__
- __metrics_path__
modulus: 64
target_label: hash_id
完整案例
完整案例
以下是一个完整的relabel案例,这个案例包括
- 根据标签值过滤target
- 合并标签值,并进行正则匹配
- 修改标签名
- 直接添加标签名
这个案例说明源标签是可以重复使用的