prometheus使用 (十九) 标签重写

在前面我们已经声明了targets实例以此来监听收集我们的节点服务状态,如下

然而,当prometheus加载target实例后,会存在一些默认的标签。我们将鼠标放在标签上面就会显示出来

这些标签都会帮助我们去声明prometheus该如何从target实例中获取指标

一. 常见系统内置标签

__address__              #当前Target实例的访问地址<host>:<port>
__scheme__               #采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
__metrics_path__         #采集目标服务访问地址的访问路径
__param_<name>           #采集任务目标服务的中包含的请求参数

 一般来说,targets中以"__"作为前置的是系统内置标签,这些标签是不会写入到指标数据中的

不过也会有一些例外,比如我们前面得知prometheus采集的数据中都包含了instance的标签

这些标签的内容对应到target实例中的__address__的标签,这里实际上是做 了一次标签的重写操作

二. 自定义标签

#首先我们查看一下node-exporter的基本配置
- job_name: 'node'
    static_configs:
      - targets: ['192.168.1.21:9100']

从上图中我们可以获得一些简要的信息,我们在这个基础上可以去添加一些自定义标签

  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.21:9100']

        labels:                    #添加标签
          env: test1-cluster
          __hostname__: localhost

重载配置

curl -XPOST http://localhost:9090/-/reload

 前面我们也说了,带__前缀的标签是不会出现在指标显示中的,如下图

 

如上图所示,我们成功给该实例添加了2个标签(env,__hostname__),当集群环境较多时,我们会在每套集群上都部署prometheus服务

为了使得alertmanager告警的精准程度,我们需要在不同的prometheus服务器上设置我们当前集群特有的一个标签

三. 标签重写

我们之前的其实也碰到过重写的操作,如下,实际上instance是由__address__重写得到的

 

可能这么说有点迷糊,我们做个小案例

案例1 重写新增

    relabel_configs:
      - source_labels: [ '__address__' ]
        target_label:  'addr'


#我们这里的操作是将内置系统标签 '__address__'
#重写为 addr,而值则是直接继承之前的值

重载

curl -XPOST http://localhost:9090/-/reload

 

相当于我们从address的内置标签重定义了一个新的标签,不过从targets里看有点费眼,我们也可以从服务发现中查看

 

案例2 重写覆盖

这个和上面的类似,不同之处在于,我们将不会使用元标签的值,而是改为我们自定义的值

    relabel_configs:
      - source_labels: [ '__address__' ]
        target_label:  'addr'
        replacement: 'localhost'  #添加

 重载

curl -XPOST http://localhost:9090/-/reload

 

小知识

#我们可以设置多个源标签
#再通过separator: _声明分隔符
#来对目标标签的值更加精准的定义
#如下

      - source_labels: ['__address__','job']
        separator: _          
        target_label: addr

#我们会得到
192.168.1.20:9100_node

案例3 正则重写

我们上面重写使用的值并不准确,新增的值不准确,覆盖的值不方便

我们可以通过正则来确保匹配的是我们需要的值

    relabel_configs:
      - source_labels: [ '__address__' ]
        target_label:  'addr'
        regex: "(.*):(.*)"           #添加
        replacement: $1-$2           #修改


#这里给不太懂正则的自己说一下
#上面不变,获取值应该是得到192.168.1.20:9100的值
#我们使用regex参数表示正则匹配,匹配到的值分为2块
#$1 192.168.1.20
#$2 9100

#replacement 设置定值为$1-$2
#那么值应该是192.168.1.20-9100才对
#我们看看

curl -XPOST http://localhost:9090/-/reload

案例4 重写丢弃1 (drop)

我现在有一个target不需要采集的,需要将他后续采集到的指标全部丢弃

而drop是使用正则去匹配源标签中是否匹配对应的值,如果匹配则会丢弃该数据

      - source_labels: ['addr']
        regex: "192.168.1.21-9100"
        action: drop

如上配置,drop会匹配源标签addr的值,如果匹配则丢弃它后续所有的指标,并将targets状态设置为drop

 

案例5 重写丢弃2 (keep)

与drop相反,删除与连接不匹配的目录的source_labels

      - source_labels: ['addr']
        regex: "192.168.1.21-9100"
        action: keep

上面的drop匹配到后丢弃了该targets,而keep是匹配不到标签则丢弃,所以应该会将192.168.1.20的也丢弃

 

案例6 标签名称替换(labelmap)

前面node的targets我们都drop掉了,我们先将他们注释掉

      - source_labels: [ '__metrics_path__' ]
        regex: __metrics_(.+)__
        action: labelmap

这个其实和上面的覆盖有点像,它会将正则匹配到的值作为标签的key来使用,而值是直接继承

如下,它匹配到的内置标签的名称中的path字段,拿它作为标签名称使用

 

案例7 hash (hashmod)

当relabel_config设置为hashmod时,Prometheus会根据modulus的值作为系数,计算source_labels值的hash值。

      - source_labels: [ '__address__' ]
        modulus: 4  
        target_label: tmp_hash
        action: hashmod

重载配置

curl -XPOST http://localhost:9090/-/reload

讲真,我也不明白是干啥用的,找了些资料说是用于散列拆分的,横向扩展用的。 有懂的回复下谢谢(≧∇≦)ノ

 

 

案例8 标签删除1(labeldrop)

labeldrop会将所有匹配到的标签删除

      - regex: '(job)'
        action: labeldrop
可以看到job的标签被删除了

 

 

案例9 标签删除2(labelkeep)

和labeldrop相反,它会删除所有不匹配的标签

      - regex: '(job)'
        action: labelkeep

猜猜会出现什么?  对,连targets都没了

 

四. metric_relabel_configs

metric_relabel_configs模块和relabel_config类似,不过它有一个很常用的方法

就是将不需要的数据直接丢掉,首先我们了解一下他们之间有什么区别

如图所示,prometheus在抓取指标到内存之前,可以进行第一次重写操作

在写入磁盘之前,可以再此进行标签的重写操作

案例  删除不需要的metric

这里我们先将上面的重写操作都注释掉,添加以下配置

    metric_relabel_configs:
    - source_labels: [ '__name__' ]
      regex: 'node_cpu_seconds_total'
      action: drop



#这里的__name__是指标名称,不是标签
#这个操作是将所有node_cpu_seconds_total指标全部丢弃

 重载

curl -XPOST http://localhost:9090/-/reload

我们手动查询一下,已经没有数据了

 

 

 

 

Prometheus是一个开源的系统监控和告警系统。你可以使用Docker来安装和运行Prometheus。首先,你需要拉取最新的Prometheus镜像,可以使用以下命令:[1] ``` docker pull prom/prometheus:latest ``` 然后,创建一个目录来存储Prometheus的配置文件,可以使用以下命令:[1] ``` mkdir -p ~/dockerdata/prometheus ``` 接下来,你需要编辑Prometheus的配置文件prometheus.yml,可以使用以下命令:[1] ``` vim ~/dockerdata/prometheus/prometheus.yml ``` 在配置文件中,你可以定义监控的目标和规则。配置文件的详细解释可以参考官方文档。[2] 完成配置后,你可以启动Prometheus容器,可以使用以下命令:[2] ``` docker run -d --name prometheus -p 9090:9090 \ -v ~/dockerdata/prometheus:/etc/prometheus \ -v ~/dockerdata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:latest ``` 你可以使用以下命令查看Prometheus容器的日志:[2] ``` docker logs prometheus ``` 通过访问http://127.0.0.1:9090,你可以访问Prometheus的原生Web界面。你可以在该界面上查看状态信息和配置详解。[2] 如果你想使用docker-compose来管理Prometheus容器,你可以创建一个docker-compose.yaml文件,并添加以下内容:[3] ``` version: '3' services: prometheus: image: prom/prometheus container_name: prometheus volumes: - "/home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml" - "/etc/localtime:/etc/localtime" ports: - "9090:9090" ``` 然后,你可以使用以下命令启动Prometheus容器:[3] ``` docker-compose up -d ``` 这样,你就可以使用Prometheus进行系统监控和告警了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值