Prometheus(九)重新标记 relabel_config

规则

  • 所有以__开头的标签在抓取后都会被删除。大多数内部标签以__开头。
  • 您可以设置名为__param_<name>的内部标签。主要是提供那些为抓取请求设置带有键<name>的URL参数。
  • 有一个内部标签__address__,其值是由 Prometheus 配置文件中static_configstargets的每一个值设置的,其值是抓取请求的主机名。默认情况下,它后来用于设置标签instance的值,该值附加到每个指标上,并告诉您指标来自哪里。

标签重新配置 relabel_config

# source labels 从现有标签(可以是已经配置的和动态已经生成的)中选择值。
# 使用配置的分隔符(默认 = )并与配置的正则表达式匹配到的内容进行连接,用于替换、保留和删除操作。
[ source_labels: '[' <labelname> [, ...] ']' ]

# 分隔符 放在内容和原标签之间
[ separator: <string> | default = ; ]

# 在替换操作中将结果值写入的标签。
# 对于替换操作,它是强制性的。Regex捕获组($1,$2)是可以可用的
[ target_label: <labelname> ]

# 正则表达式  与提取的内容相匹配,一般是 source_labels
# 书写的正则表达是需要是 .*<regex>.* 的方式,就是两头必须都有 .*,或者使用单引号引起来 '<regex>'
[ regex: <regex> | default = (.*) ]

# 替换的值
# 如果正则表达式匹配,则对其执行正则表达式替换。Regex捕获组可用。
# 这个是默认行为,如果需要替换为其他值,可以使用这个配置去指定。
# 一般替换的值是给 target_label,可以用于创建新标签。
[ replacement: <string> | default = $1 ]

# 动作
# 基于正则表达式匹配执行的动作
[ action: <relabel_action> | default = replace ]

relabel_action 有:

  • replace: 替换 这个是默认动作,其行为是将 regexsource_labels 匹配的内容进行替换. 替换的值存放在replacement ,正则匹配到的组可以引用 (比如 ${1}, ${2}, …)。
    最终 replacement 值会赋值给 target_label。如果regex 不匹配,则不进行替换。
  • lowercase: 将连接的source_labels 映射到它们的小写字母。
  • uppercase: 将连接的source_labels 映射它们的大写字母。
  • keep: 删除regex与连接不匹配的目标 source_labels,让Prometheus丢弃没有匹配到regextarget.
  • drop: 删除regex与连接匹配的目标 source_labels,让Prometheus丢弃匹配到regextarget
  • labelmap: 匹配regex所有标签名称,并将捕获的内容分组,用第一个分组内容作为新的标签名(使用正则提取出多个字段,使用匹配到的作为新标签名,但是标签的内容不会改变,相对于对原有标签换了个名字,原标签仍然存在)
  • labeldrop:将正则表达式与所有标签名称匹配。任何匹配的标签都将从标签集中删除
  • labelkeep:将正则表达式与所有标签名称匹配。任何不匹配的标签都将从标签集中删除

实战分析

    static_configs:
      - targets:
        - getway=192.168.0.39:8766
        - a=192.168.0.39:6060
        - b=192.168.0.39:6130
        - c=127.0.0.1:6130
    relabel_configs:
      - source_labels: [__address__]
        regex: '([a-z]+)=.*'
        target_label: server_name

      - source_labels: [__address__]
        regex: '[a-z]+=(.*)'
        target_label: server_addr

      - source_labels: [server_addr]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.0.39:9115

__address__ 是targets 中的值,比如 getway=192.168.0.39:8766

      - source_labels: [__address__]
        regex: '([a-z]+)=.*'         
        target_label: server_name # 默认行为是将正则匹配到的第一个分组($1) 的内容赋值给这里指定的标签: server_name
  • source_labels: [__address__] 的意思是需要被处理的源标签是 __address__,此示例的值是 getway=192.168.0.39:8766

  • regex: '([a-z]+)=.*' 的意思是使用 regex 指定的正则表达式 '([a-z]+)=.*'
    __address__ 的值进行匹配,也就是 ([a-z]+)=.* 将会配到 getway=192.168.0.39:8766,并且 正则匹配的第一个分组 $1 的内容是 getway

  • target_label: server_name 的意思是把分组 $1 的内容赋值给新的标签 server_name, 标签将会被添加到指标名称中,便于以后搜索。

      - source_labels: [__address__]
        regex: '[a-z]+=(.*)'
        target_label: server_addr

原理同上,最终会有标签 server_addr=192.168.0.39:8766 被添加到指标中

      - source_labels: [server_addr]   # 192.168.0.39:8766
        target_label: __param_target  # 192.168.0.39:8766

上面的意思是把 server_addr 标签的内容赋值给 Prometheus 新建的一个自定义内置标签 __param_target,这将会被构建在一个有目标参数的请求中,比如:

http://黑盒测试的地:端口/probe?target=192.168.0.39:8766&module=tcp

当时有 黑盒测试的时候,实际也会会映射到 Prometheus 的配置文件中为如下内容

  - job_name: "java-tcp"
    scrape_interval: 5s
    metrics_path: /probe
    params:
      target:
        - 192.168.0.39:8766 # server_addr 的值
      - source_labels: [__param_target]
        target_label: instance

上面的意思是 把内置标签 __param_target 的值赋值给标签 instance

      - target_label: __address__
        replacement: 192.168.0.39:9115

这里其实省略了 source_labels:[__address__],意思是将标签 __address__ 的值,将正则 .*(默认的表达式)和 __address__ 匹配到的内容再重新赋值给标签 __address__, 但是赋值的值是 replacement 指定的值。而内部标签 __address__ 的值是 Prometheus 发送抓取指标请求时实际使用的请求地址。
这里的场景是 192.168.0.39:9115 为黑盒监控的监听地址。

因此最终每次抓取请求的 URL 是 http://192.168.0.39:9115/probe,请求的参数是 target=192.168.0.39:8766,最终组成完整的抓取指标请求:

`http://192.168.0.39:9115/probe?target=192.168.0.39:8766

/probe 这个是根据具体 exporter 设置的,所以它不是固定的,这个在 prometheus.yaml 文件中使用 metrics_path: /probe 指定。

而当 Prometheus 将这个请求发送给一个支持多目标监控对象的 exporter(这里指的是 黑盒测试 blakexport)时,这个程序就会获取到 target 参数的值,并且向这个值(这里是 192.168.0.39:8766)所代表的服务发起获取指标的请求,而 192.168.0.39:8766 会返回指标数据给黑盒测试 blakexport, 而 黑盒测试 blakexport 再返回 Prometheus。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用 `docker_sd_config` 监控 Docker 集群,需要在 Prometheus 的配置文件中设置相应的服务发现规则。以下是一个示例配置文件,用于监控运行在 Docker 集群中的 Node.js 应用程序: ```yaml global: scrape_interval: 15s scrape_configs: - job_name: 'nodejs-app' metrics_path: '/metrics' file_sd_configs: - files: - /etc/prometheus/targets.json refresh_interval: 5m relabel_configs: - source_labels: [__meta_docker_container_label_com_docker_swarm_service_name] regex: '(.+)' target_label: job replacement: '$1' - source_labels: [__meta_docker_container_label_com_docker_swarm_task_id] regex: '(.+)' target_label: instance replacement: '$1' - source_labels: [__address__, __meta_docker_container_label_com_docker_swarm_task_id] regex: '([^:]+)(?::\d+)?' target_label: __address__ replacement: '$1:3000' - source_labels: [__meta_docker_container_label_com_docker_swarm_service_name] regex: '(.+)' target_label: service replacement: '$1' ``` 在上面的配置文件中,`job_name` 是 Prometheus 的作业名称,`metrics_path` 是应用程序的指标路径。`file_sd_configs` 是文件服务发现配置,指定了用于存储应用程序地址信息的 JSON 文件路径。`relabel_configs` 是标签重写配置,用于将 Docker 元数据转换为 Prometheus 标签。 注意,上面的示例配置文件假设 Node.js 应用程序运行在容器的 3000 端口上。如果你的应用程序运行在不同的端口上,请相应地更改标签重写配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值