一、背景

我们知道prometheus是一个时间序列数据库。会周期性的从各个target上抓取数据。那么我们抓取回来的各种指标数据,我们有没有办法再次进行处理呢?
比如:

1、添加或删除某些不必要的标签。

2、从指标中删除敏感或不需要的标签。

3、修改标签的名字或标签的值等。

要实现上述功能,我们就需要对标签进行重新标记
通过重新标记,我们可以控制、管理并标准化环境中的指标。

二、简化的指标抓取的生命周期

从上图中可知,我们有2个阶段(relable_configsmetric_relabel_configs)可以进行重新标记。

1、配置参数详解

# 从已有的标签选择值的源标签组;多个标签,使用separator分隔;
# regex匹配源标签里的值
[ source_labels: '[' <labelname> [, ...] ']' ] # 多个 source_labels 时以这个连接起来
[ separator: <string> | default = ; ] # 替换成的目标标签,可以使用正则中的分组
[ target_label: <labelname> ] # 正则表达式匹配标签中的值
[ regex: <regex> | default = (.*) ] # Modulus to take of the hash of the source label values.
[ modulus: <int> ] # 替换正则表达式匹配的分组,分组引用使用 $1,$2,$3
[ replacement: <string> | default = $1 ] # 正则表达式匹配后执行的动作
[ action: <relabel_action> | default = replace ]

1、action:存在的值

1、替换标签值

  1. replace:首先将source_labels中指定的各标签的值以separator进行连接起来,然后将regex字段中的正则标签是对连接起来的标签值进行匹配判定,如果匹配上了,则将target_label字段中指定的标签的值替换为replacement字段中保存的值。
  2. hashmod:target_label的值设置为一个hash值,该hash则由modules字段指定的hash模对source_labels上各标签的串联值进行hash计算生成。

2、删除指标

  1. keep: 使用regex不能匹配到target上的source_labels上的各标签的串联值时,则删除该target
  2. drop:使用regex能匹配到target上的source_labels上的各标签的串联值时,则删除该target

3、创建或删除标签

  1. lablemap:regex对所有的标签名进行匹配判定,而后将匹配到的标签的值赋给replacement字段指定的标签名之上。通常用于生成一个新的标签。
  2. labeldrop:regex对所有的标签名进行匹配判断,能够匹配到的标签从该target的标签集中删除。
  3. labelkeep:regex对所有的标签名进行匹配判断,不能够匹配到的标签从该target的标签集中删除。

2、删除标签注意事项

标签时间序列唯一性约束。如果删除标签或重命名标签并导致时间序列重复,那么系统 可能会出现问题。

3、几个系统内置的标签

__address__:当前Target实例的访问地址:。
__scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS。
__metrics_path__:采集目标服务访问地址的访问路径。
__param_<name>:采集任务目标服务的中包含的请求参数。
__name__:此标签是标识指标名称的预留标签。

1、relable_configs 阶段

该阶段发生在指标抓取之前,即来自服务发现的目标。

**示例:**将__scheme__、__address__和__metrics_path__标签对应的值连接起来,判断是否是以(http或https)开头,如果是,则将 instance 标签对应的值修改成正确匹配的值。

scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9080']
relabel_configs:
- source_labels: ["__scheme__","__address__","metrics_path__"]
regex: "(http|https)(.*)"
separator: ""
target_label: "instance"
replacement: "${1}://${2}"
action: replace

2、metric_relable_configs 阶段

该阶段发生在指标抓取之后且数据没有保存到系统之前。

**示例:**删除go_info标签

三、参考文档

1、https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

Prometheus重新标记的更多相关文章

  1. 阿里云上万个 Kubernetes 集群大规模管理实践

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...

  2. Prometheus 系统监控方案 一

    最近一直在折腾时序类型的数据库,经过一段时间项目应用,觉得十分不错.而Prometheus又是刚刚推出不久的开源方案,中文资料较少,所以打算写一系列应用的实践过程分享一下. Prometheus 是什 ...

  3. [系统集成] 部署 mesos-exporter 和 prometheus 监控 mesos task

    前几天我在mesos平台上基于 cadvisor部署了 influxdb 和 grafana,用于监控 mesos 以及 docker app 运行信息,发现这套监控系统不太适合 mesos + do ...

  4. Prometheus(转载)

    Prometheus 系统监控方案 一 https://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html 最近一直在折腾时序类型的数据库,经过一段时间 ...

  5. prometheus 标签使用

    标签的配置使用 考虑到要明智地使用标签,我们需要给事物重新命名.在一个集中的.复杂的监视环境中,我们有时无法控制正在监视的所有资源以及它们公开的监视数据.重新标记允许在自己的环境中控制.管理和潜在地标 ...

  6. Prometheus监控学习笔记之Prometheus从1.x升级到2.x

    详细参考这篇文章 https://cloud.tencent.com/developer/article/1171434 prometheus 2.0于2017-11-08发布,主要是存储引擎进行了优 ...

  7. Go语言开发Prometheus Exporter示例

    一.Prometheus中的基本概念 Prometheus将所有数据存储为时间序列,这里先来了解一下prometheus中的一些基本概念 指标名和标签每个时间序列都由指标名和一组键值对(也称为标签)唯 ...

  8. TiKV 源码解析系列文章(三)Prometheus(上)

    本文为 TiKV 源码解析系列的第三篇,继续为大家介绍 TiKV 依赖的周边库 rust-prometheus,本篇主要介绍基础知识以及最基本的几个指标的内部工作机制,下篇会介绍一些高级功能的实现原理 ...

  9. Prometheus监控学习笔记之初识PromQL

    0x00 概述 Prometheus 提供了一种功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据.表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTT ...

随机推荐

  1. React项目中应用TypeScript

    一.前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的 例如和vue.react 这些框架结合使用的时候,会有一定的门槛 使用 TypeScri ...

  2. AspectJWeaver文件写入gadget详解和两种应用场景举例

    目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...

  3. C# 中 async 和 await 的基本使用

    C# 中 async 和 await 的基本使用 前言 经常在 C# 的代码中看到以 Async 结尾的方法,大概知道意为异步方法,但不知道怎么使用,也不知道如何定义. 对于"同步" ...

  4. 小程序跳转H5及其他页面

    一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 图片有点小,我把文字打出来吧: 可关联已有的小程序或快速创建小程序.已关联的小程序可被使用在自定义菜单和模版消息等场景中. ...

  5. django使用celery搭配redis配置定时任务

    已经安装环境: Python3.6 django==2.1.8(用2.2.2需要升级sqlite3) 项目名称:ceshiproject   APP名称:ceshi 第一步:centos7下首先安装r ...

  6. linux中创建公私钥

    linux中创建公私钥要再~(root)目录下ssh-keygencd /root/.ssh/lsid_rsa 是私钥id_rsa.pub 是公钥把 authorized_keys删除掉,重新建aut ...

  7. 『PyTorch』矩阵乘法总结

    1. 二维矩阵乘法 torch.mm() torch.mm(mat1, mat2, out=None),其中mat1(\(n\times m\)),mat2(\(m\times d\)),输出out的 ...

  8. 鸿蒙内核源码分析(双向链表篇) | 谁是内核最重要结构体? | 开篇致敬鸿蒙内核开发者 | v1.11

    子曰:"见贤思齐焉,见不贤而内自省也."<论语>:里仁篇 百篇博客系列篇.本篇为: v01.xx 鸿蒙内核源码分析(双向链表篇) | 谁是内核最重要结构体 | 51.c ...

  9. P3190-[HNOI2007]神奇游乐园【插头dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3190 题目大意 \(n*m\)的网格上有权值,求一条权值和最大的不交回路. \(1\leq n\leq 100, ...

  10. Python3入门系列之-----异常处理

    前言 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python 有两种错误很容易辨认:语法错误和异常. Python ...