> 文章列表 > prometheus标签

prometheus标签

prometheus标签

004 标签

1. 作用

Prometheus中存储的数据为时间序列,是由Metric的名字和一系列的标签(键值对)唯一标识的, 不同的标签代表不同的时间序列,即 通过指定标签查询指定数据

指标+标签实现了查询条件的作用,可以指定不同的标签过滤不同的数据

2. Meta标签

被监控端纳入Prometheus时定义了一些元数据标签

在Prometheus所有的Target实例中都包含一些Metadata标签信息,可以通过targets页面查看实例的metadata标签的内容,例如:

  • address:当前Target实例的访问地址:
  • scheme:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
  • metrics_path:采集目标服务访问地址的访问路径
  • _param :采集任务目标服务的中包含的请求参数

除了这些默认的标签以外,还可以为Target添加自定义的标签。

元标签只是Prometheus使用,不会写入时序数据库中,在promql中无法查到

3. 自定义标签

自定义标签后,可以根据特定自定义标签实现多维度查询

- job_name: 'BJ Linux Server'basic_auth:username: prometheuspassword: 123456static_configs:- targets: ['192.168.179.99:9100']labels:idc: tongniuproject: www- job_name: 'Shanghai Linux Server'basic_auth:username: prometheuspassword: 123456static_configs:- targets: ['192.168.179.99:9100']labels:idc: sssproject: blog

![ ](https://img-blog.csdnimg.cn/22bcd2291cprometheus标签

4. 重新标记标签

prometheus标签

目的:为了更好的标识监控指标

重新标记的两个阶段:

  • relabel_configs : 在采集之前
  • metric_relabel_configs:在存储之前准备抓取指标数据时,可以使用relabel_configs添加一些标签、也可以只采集特定目标或过滤目标。 已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。
  • 用途:
    • 动态生成新标签 根据已有的标签生成新标签
    • 过滤采集的Target
    • 删除不需要或者敏感标签
    • 添加新标签
  • action:重新标记标签动作
    • replace:默认,通过regex匹配source_label的值,使用replacement来引用表达式匹配的分组,分组使用$1,$2…引用(正则匹配,提取字段重新创建新标签,注意这里是创建新的标签)
    • keep:删除regex与连接不匹配的目标 source_labels , keep drop就是让Prometheus采集和不采集哪些目标
    • drop:删除regex与连接匹配的目标 source_labels
    • labeldrop:删除regex匹配的标签
    • labelkeep:删除regex不匹配的标签
    • labelmap:匹配regex所有标签名称,并将捕获的内容分组,用第一个分组内容作为新的标签名(使用正则提取出多个字段,使用匹配到的作为新标签名,但是标签的内容不会改变,相对于对原有标签换了个名字)

使用示例:

  • 重命名标签

场景:动态生成添加标签(对已有的标签重新标记)

- job_name: 'Linux Server'basic_auth:username: prometheuspassword: 123456static_configs:- targets: ['192.168.179.99:9100']metric_relabel_configs:- action: replacesource_labels: ["instance"]regex: (.*):([0-9]+)  # 正则匹配标签值,( )分组replacement: $1       # 引用分组匹配的内容target_label: "ip"
  • 过滤Target

场景:选择采集的目标

- job_name: 'Linux Server'basic_auth:username: prometheuspassword: 123456static_configs:- targets: ['192.168.179.99:9100']relabel_configs:- action: dropregex: "192.168.179.99:9100"   # 正则匹配标签值source_labels: ["_address_"]

在target里面就没有192.168.179.99:9100这台机器

  • 删除标签

删除使用 labeldrop:在入库之前删除regex匹配的标签

- job_name: 'Linux Server'basic_auth:username: prometheuspassword: 123456static_configs:- targets: ['192.168.179.99:9100']relabel_configs:- action: labeldropregex: "job"   #正则匹配标签名称
  • keep

Keep只有匹配的才会去采集数据,不匹配的就不采集。即pod的注解中声明了prometheus_io_scrape: true这个字段,那么就会把你纳入监控,如果没有声明就不会纳入监控。

  • replace

    处理监控pod连接的ip地址,api接口,还有协议都需要重新标记默认的字段

# 重命名采集目标协议- action: replaceregex: (https?)source_labels:- __meta_kubernetes_service_annotation_prometheus_io_schemetarget_label: __scheme__# 重命名采集目标指标URL路径- action: replaceregex: (.+)source_labels:- __meta_kubernetes_service_annotation_prometheus_io_pathtarget_label: __metrics_path__# 重命名采集目标地址- action: replaceregex: ([^:]+)(?::\\d+)?;(\\d+)replacement: $1:$2source_labels:- __address__- __meta_kubernetes_service_annotation_prometheus_io_porttarget_label: __address__

就可以使用新的标签kubernetes_namespace在promql里面基于命名空间这个标签去查询了,因为 __meta_kubernetes_namespace这个标签是不会被存储的

生成命名空间标签  - action: replacesource_labels:- __meta_kubernetes_namespacetarget_label: kubernetes_namespace

实际访问指标接口 https://NodeIP:10250/metrics/cadvisor 这个接口只能APISERVER访问,故此重新标记标签使用APISERVER代理访问

这个就是直接指定标签的值,也就是将采集的地址换为我指定的地址

# 修改NodeIP:10250为APIServerIP:6443- action: replaceregex: (.*)source_labels: ["__address__"]  源标签配匹为addresstarget_label: __address__replacement: 192.168.31.61:6443
  • labelmap
relabel_configs:# 将标签(.*)作为新标签名,原有值不变(新的标签名字会被入库查询)- action: labelmapregex: __meta_kubernetes_node_label_(.*)

(.) ,以其开头所有值匹配到,用这个匹配的值作为新的标签名字,新的标签名字就可以入库,就会被查询,因为元标签以下划线开头的是不会入库的,后面是用不了的/这样做的目的就是将后面(.)匹配的值作为一个新标签,并且将原有值赋予新标签,后面可以基于这个新标签查询数据了