## relabeling机制
## 一、基本介绍
### 1.1 引子
上个章节中增加consul_exporter的自动发现时,就应用了relabeling机制。主要对自动发现的服务器节点中“带有exporter的tag”进行数据保留,其余的服务器节点进行过滤。
![](https://img.kancloud.cn/f1/55/f1554da559134034c4c69be9a7eac1a9_453x194.png)
### 1.2 什么是relabeling?
在Prometheus拉取数据的这个过程中,可能有很多数据是我们不想要的或者需要修改的。Prometheus提供了一个叫relabeling的功能,它能够在抓取到目标实例之前把目标实例的元数据标签动态重新修改,动态添加或者覆盖标签。
![](https://img.kancloud.cn/e6/40/e6407cfd9737ffbab63a34ae11542fed_467x242.png)
prometheus从consul动态发现目标(targets)之后,在被发现的target实例中,都包含一些原
始的Metadata标签信息,默认的标签有如下几种
* address:以以<host>:<port>格式显示日标targets的地址。
* scheme:采集的目标服务地址的Scheme形式,HTTP或者HTTPS。
* metrics_path:采集的目标服务的访问路径。
### 1.3 relabeling的两个阶段
为了更好的识别监控指标,便于后期调用数据绘图、告警等需求,prometheus支持对发现1的目标进行label修改,在两个阶段可以重新标记:
* relabel_configs阶段
在对target进行数据采集之前(比如在采集数据之前重新定义标签信息,如目的IP、目的口等信息),可以使用relabel_configs添加、修改或删除一些标签、也可以只采集特定目或过滤目标。这种方式也是用的最多的。
* metric_relabel_configs阶段
在对target进行数据采集之后,即如果是已经抓取到指标数据时,可以使用metric relabel configs做最后的重新标记和过滤
![](https://img.kancloud.cn/79/19/79191072bbaa411bde41b08f4738acae_463x56.png)
### 1.4 label的类型
source_labels:源标签,没有经过relabel处理之前的标签名字
target_label:通过action处理之后的新的标签名字
regex:给定的值或正则表达式匹配,匹配源标签的值
replacement:通过分组替换后标签(target_label)对应的/(/()1:2,就是引用regex中的分组信息
<hr>
<br>
## 二、relabel_configs实际运用介绍
### 2.1 案例
![](https://img.kancloud.cn/a5/a2/a5a22e8166699106407f7322c1c17b2f_453x197.png)
### 2.2 action类型讲解
#### 2.2.1 replace
将regx正则表达式与连接的 source_labels 进行匹配。然后,将 target_label 设置为replacement,其中replacement 中的匹配组引用(1、(1}、1、{2}等)将被其值替换。如果正则表达式不匹配,则不进行替换。
* 示例
![](https://img.kancloud.cn/0e/a6/0ea6aa6694fd5020ad1f774ae3379b06_452x367.png)
#### 2.2.2 keep
删除regex与连接的source_labels不匹配的目标
* 示例
![](https://img.kancloud.cn/2f/e6/2fe6e1a40614fc6985b892502de7d54c_460x253.png)
#### 2.2.3 drop
删除regex与连接的source_labels匹配的目标
* 示例
![](https://img.kancloud.cn/6b/eb/6bebe2ceb82725305def4ae64379524c_449x260.png)
#### 2.2.4 labelmap
对所有源标签名匹配regex,而不仅仅是source_labels中指定的那些。然后将匹配标签的值复制到标签名称中,替换为匹配组引用(1,(1),1,(2),…),替换为它们的值
* 示例
![](https://img.kancloud.cn/9f/3f/9f3fe3c21ca07dcfa17e18000ef67289_451x256.png)
#### 2.2.5 labelkeep
对所有标签名称匹配reg中。任何不匹配的标签都将从标签集中除
* 示例
![](https://img.kancloud.cn/83/60/8360a4342787c72d6fcc9326bc227d34_449x216.png)
#### 2.2.6 labeldrop
对所有标签名称匹配regex。任何匹配的标签都将从标签集中除
* 示例
![](https://img.kancloud.cn/cd/d8/cdd869006bb4f0e8e256307ae65160d2_448x211.png)
#### 2.2.7 hashmod
将target_label设置为连接的source_labels的哈希值的模数
* 示例
![](https://img.kancloud.cn/77/45/77456c2c0f54264f6489f76ebbd3d9ef_451x317.png)
#### 2.2.8 lowercase
将连接的source_labels映射为它们的小写
* 示例
![](https://img.kancloud.cn/52/6a/526af3b43507977ec0203ab37ac1bc07_450x257.png)
#### 2.2.9 uppercase
将连接的source_labels映射为它们的大写
#### 2.2.10 keepequal
删除source_labels与target_label不匹配的目标
#### 2.2.11 dropequal
删除连接的source_labels与target_label匹配的目标
- Prometheus教程
- 一. dokcer 安装
- 二. 安装docker-compose
- 三. docker-compose安装Prometheus
- 四. 配置grafana的数据源
- 五. Prometheus的Exporter
- 六. Prometheus的基本术语
- 七. 监控Linux
- 八. 监控redis和mongodb
- 九. 监控mysql数据库
- 十. 监控go程序
- 十一. 监控nginx
- 十二. 监控消息队列
- 十三. 监控docker
- 十四. 监控进程
- 十五. 域名监控
- 十六. SNMP监控
- 十七. 黑盒监控
- 十八. 自定义监控
- 十九. go实现自定义监控
- 二十. 服务发现概述
- 二十一. 基于文件的服务发现
- 二十二. 基于Consul的服务发现
- 二十三. relabeling机制