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

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

元数据标签(metadata)

在被监控端纳入普罗米修斯里面定义了一些元数据标签

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

• __address__:当前 Target 实例的访问地址:
• __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
• __metrics_path__:采集目标服务访问地址的访问路径
上面这些标签将会告诉 Prometheus 如何从该Target实例中获取监控数据。

元数据标签在 prom 采集到指标的时候就已经被声明定义了,也只有 prom 自己本身会使用,这些标签也不会被存储到时序数据库中,所以查询也用不到。

自定义标签

对于某些场景来说,除了元数据标签,还有一些也是在采集到指标时,指标里面带的一些标签,比如 instance、job 这种,当架构比较大时,这些标签也不够使用,或者查询不够精准,会用到自定义标签来做到更精确维度的查询。

自定义标签在 prometheus.yml 中进行定义

  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['192.168.1.11:32222']
        labels:    # 自定义label
          env: test     # 键值

然后重启生效

prom_add_label

因为我是加在了 kube-state-metrics 的指标里的,所以只有查询相关指标才会有这个标签的存在。

prom_add_label_select

标签重写

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

在两个阶段可以重新标记:

• relabel_configs : 在采集之前(比如在采集之前重新定义元标签),target界面是否展示。
• metric_relabel_configs:在存储之前。promql查询是否展示。

准备抓取指标数据时可以使用 relabel_configs 添加一些标签、也可以只采集特定目标或过滤目标。 已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。

label_rewrite_png

重新标记标签一般用途:

• 动态生成新标签 根据已有的标签生成新标签

• 过滤采集的 Target

• 删除不需要或者敏感标签

• 添加新标签

重写动作

  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['192.168.1.11:32222']
        labels:
          env: test

# 重写标签
    metric_relabel_configs|relabel_configs:
    - action: replace|keep|drop|labeldrop|labelkeep|labelmap
# replace:默认,通过 regex 匹配source_label的值,使用 replacement 来引用表达式匹配的分组,分组使用 $1,$2...引用(正则匹配,提取字段重新创建新标签,注意这里是创建新的标签)

# keep:删除 regex 与连接不匹配的目标 source_labels , keep drop 就是让普罗米修斯采集和不采集哪些目标。
# drop:删除 regex 与连接匹配的目标 source_labels
# labeldrop:删除 regex 匹配的标签
# labelkeep:删除 regex 不匹配的标签
# labelmap:匹配 regex 所有标签名称,并将捕获的内容分组,用第一个分组内容作为新的标签名(使用正则提取出多个字段,使用匹配到的作为新标签名,但是标签的内容不会改变,相对于对原有标签换了个名字)

标签重写

重写 instance 为 ip,并且将其中的端口去掉,用来生成一个新的标签,引用旧标签中的值

  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['192.168.1.11:32222']
        labels:
          env: test

# 重写标签
    metric_relabel_configs:
    - action: replace
      source_labels: ["instance"]
      regex: (.*):([0-9]+)
      replacement: $1
      target_label: ip

# source_labels: 指定原标签
# regex: 匹配标签值,(.*):([0-9+])表示ip:port,括号表示匹配分组
# replacement: 和regex配合使用,第一个括号分组表示$1,第二个括号分组表示$2,$1=(.*),$2=([0-9+]),在这个例子里面$1为ip,$2为端口号
# target_label: 指定重写后的标签名

保存后重启服务加载,可以看到查询对应指标已经有了 ip 标签

prom_relabel_ip

过滤采集端

通过匹配特定的标签值,将不需要的指标或者采集端删除,也就是最后不会存储到数据库。

  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['192.168.1.11:32222']
        labels:
          env: test

# 过滤采集端,将标签为instance="192.168.1.11:32222"的节点指标全部过滤
    relabel_configs:
    - action: drop
      source_labels: ["__address__"]
      regex: 192.168.1.11:32222

保存后重启服务加载,可以看到已经没有采集端了,因为这个分组里面只放了这一台机器,所以整个分组都没了。

prom_drop_node

这里要注意,通过过滤 ip 来过滤采集端的标签,不能使用 instance ,因为 instance 是存储到数据库才会打上的标签。

删除标签

labeldrop 和 drop 同理,但不需要匹配值,仅匹配标签即可

上面将 instance 重新标记了一个新标签 ip,然后把 instance 删掉即可

  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['192.168.1.11:32222']
        labels:
          env: test

# 删除job标签
    metric_relabel_configs:
    - action: labeldrop
      regex: "job"

重新加载生效,生效时间并没有那么快,需要等个几分钟,给一个处理数据的时间

prom_drop_label

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0