杨梅冲
每天在想什么呢?

一、Relabeling机制简介

前面讲了Prometheus的几种服务发现机制。通过服务发现的方式,可以在不重启Prometheus服务的情况下动态的发现需要监控的Target实例信息。

基于consul服务发现。 如何加lable标签?Prometheus能够按照某些规则(比如标签)从服务发现注册中心返回的Target实例中有选择性的采集某些Exporter实例的监控数据。

1.1 什么是Relabeling机制

在采集样本数据之前,对Target实例的标签(Metadata)进行重写的机制在Prometheus被称为Relabeling。Relabeling最基本的应用场景就是基于Target实例中包含的metadata标签,动态的添加或者覆盖标签

在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。如prometheus.yml下图:

 之前配置过

因为要对Metadata标签进行重写,所以我们先来看下Metadata标签

1.2 默认Metadata标签

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

默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:
● __address__:当前Target实例的访问地址<host>:<port>,如果在重新标记期间未设置标签,则默认将__address__标签值赋值给instance。
● __scheme__:采集目标地址的协议,HTTP或者HTTPS
● __metrics_path__:采集目标服务访问地址的访问路径
● __param_<name>:采集任务目标服务的中包含的请求参数
● job:设置为job_name相应的抓取配置的值。
● __scrape_interval__:scrape抓取数据时间间隔(秒)
● __scrape_timeout__: scrape超时时间(秒)

一般来说,Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。不过这里有一些例外,
例如,我们会发现所有通过Prometheus采集的样本数据中都会包含一个名为instance的标签,该标签的内容对应到Target实例的__address__。
这里实际上是发生了一次标签的重写处理。

2.Consul动态发现的metadata标签

通过Consul动态发现的服务实例还会包含以下Metadata标签信息:
● __meta_consul_address:consul地址
● __meta_consul_dc:consul中服务所在的数据中心
● __meta_consul_metadata:服务的metadata
● __meta_consul_health: 健康检查
● __meta_consul_node:服务所在consul节点的信息
● __meta_consul_service_address:服务访问地址
● __meta_consul_service_id:服务ID
● __meta_consul_service_port:服务端口
● __meta_consul_service:服务名称
● __meta_consul_tags:服务包含的标签信息

 3.relabel_configs配置

source_labels:源标签,没有经过relabel处理之前的标签名字。
target_labels:通过relabel处理之后的标签名字。
separator:源标签的值的连接分隔符。默认是";"
module:取源标签值散列的模数
regex:正则表达式,匹配源标签的值。默认是(.*)
replacement:通过分组替换后标签(target_label)对应的值。默认是$1
action:根据正则表达式匹配执行的动作。默认是replace
● replace:替换标签值,根据regex正则匹配到原标签值,使用replacement来引用表达式匹配的分组
● keep:满足regex正则条件的实例进行采集,把source_labels中没有匹配到regex正则内容的target实例丢掉,即只采集匹配成功的实例
● drop:满足regex正则条件的实例不采集,把source_labels中没有匹配到regex正则内容的target实例丢掉,即只采集没有匹配成功的实例
● hashmod: 使用hashmod计算source_labels的hash值并进行对比,基于自定义的模数取模,以实现对目标进行分类、重新赋值等功能
● labelmap: 匹配regex所有标签名称,然后复制匹配标签的值进行分组,通过replacement分组引用($1,$2,...)替代
● labeldrop: 匹配regex所有标签名称,对匹配到的实例标签进行删除
● labelkeep: 匹配regex所有标签名称,对匹配到的实例标签进行保留

3.1 替换标签值

可以通过 replace 这个操作来完成,如果没有指定 action 字段,则默认就是 replace

注:源数据需要加[]以便区分。目标数据不需要加。

# 案例1:
    relabel_configs:
      - source_labels: [__meta_consul_service_address]
        target_label: __param_target
action: replace # 如果没有指定,数值默认就是这个 - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.10.100:9115 源数据:__meta_consul_service_address="192.168.10.100" 会变成:target="192.168.11.62",instance="192.168.10.100",__adress__="192.168.10.100:9115/prod"
# 案例2
# 从Node Exporter实例采集上来的样本数据如下所示
node_load1{instance="test服务器", job="node_exporter"} 0.04

# 希望能有一个额外的标签dc,可以表示该样本所属的数据中心:
node_load1{instance="test服务器", job="node_exporter",dc="dc1"} 0.04

# relabel_config配置:
    relabel_configs:
    - source_labels:  ["__meta_consul_dc"]
      target_label: "dc"

源数据:__meta_consul_dc="dc1"
会变成:dc="dc1"

3.2 保留或丢弃对象

通过keepdrop 这两个动作可以来完成

# 案例1:
    relabel_configs:    
      - source_labels: [__meta_consul_tags]
        regex: .*exporter.*
        action: keep

 

源数据为:__meta_consul_tags=",exporter,"  会保留。如果action: drop就相反
源数据为:__meta_consul_tags=",domain,"    会丢弃,如果action: drop就相反

3.3 标签集映射

把源标签的值映射到一组新的标签中去,使用 labelmap 这个动作完成

# 案例
    relabel_configs:      
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
        
源数据为:__meta_consul_service_metadata_job="test" 
会变成: job="test"

3.4 保留或删除标签

使用 labelkeeplabeldrop 这两个操作

    relabel_configs:
      - regex: job
        action: labeldrop

数据:probe_success{instance="192.168.11.61:9090", job="consul_blackbox_tcp"}   
变成:probe_success{instance="192.168.11.61:9090"}  

action: labelkeep 刚好相反

4.consul案例

consul服务发现prometheus配置,可以使用下面的配置和http://192.168.10.14:9090/targets中标签labels比对了解

 - job_name: 'consul_exporter'
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*exporter.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
      - source_labels:  ["__meta_consul_dc"]
        target_label: "dc"
#  Spring Boot 2.x 应用数据采集配置
  - job_name: 'consul_springboot_demo'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*springboot.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
        
#http配置
  - job_name: "consul-blackbox_http"
    metrics_path: /probe
    params:
      module: [http_2xx]
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*blackbox_http.*
        action: keep
      - regex: job
        action: labeldrop
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
      - source_labels: [__meta_consul_service_address]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.10.100:9115
#tcp检查配置
  - job_name: "consul_blackbox_tcp"
    metrics_path: /probe
    params:
      module: [tcp_connect]
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*blackbox_tcp.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
      - source_labels: [__meta_consul_service_address]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.10.100:9115


#icmp检查配置
  - job_name: "consul_blackbox_icmp"
    metrics_path: /probe
    params:
      module: [icmp]
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*blackbox_icmp.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
      - source_labels: [__meta_consul_service_address]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.10.100:9115

#域名检测
  - job_name: consul_domain_exporter
    scrape_interval: 10s
    metrics_path: /probe
    consul_sd_configs:
      - server: '192.168.10.14:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*domain.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap
      - source_labels: [__meta_consul_service_address]
        target_label: __param_target
      - target_label: __address__
        replacement: 192.168.10.100:9222
                                                                                                   135,25

curl调用consul api添加服务命令,可以看到tags、meta之类

curl -X PUT -d '{"id": "rabbitmq2","name": "rabbitmq_exporter","address": "192.168.10.100","port": 9419,"tags": ["exporter"],"meta": {"job": "rabbitmq_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9419/metrics", "interval": "5s"}]}'  http://localhost:8500/v1/agent/service/register
 

 

 

 

posted on 2024-04-25 17:31  杨梅冲  阅读(314)  评论(0编辑  收藏  举报