searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

prometheus federate特性(数据维度抽取)

2024-11-15 09:18:03
6
0
一、背景描述:
prometheus存有大量的监控明细数据,但是报表或者大屏监控需要的是更高维度的数据统计。如果直接从明细数据统计,很可能会因为数据量
过大而导致查询缓慢,甚至prometheus发生OOM。
 
二、解决思路:
借助prometheus提供的federate特性和recording rule特性实现。
 
1.在底层prometheus,通过recording rule预计算需要统计的明细metrics,形成新的指标。metrics命名最好遵循prometheus的规范
 
2.创建提供大屏查询的prometheus(暂且叫统计用prometheus),通过federate功能,从步骤1中的底层prometheus获取统计用metrics。
 
三、优势:
1.通过上述操作,即可将底层数据和统计数据分割。由于统计用prometheus只保存高维度数据,所以数据量会比底层prometheus少很多。可以设置更长的数据存留时间(比如一年),即可满足报表对历史数据统计的要求;
 
2.传统方式做法:利用定时器,将统计数据存到mysql。相比之下,prometheus federate方案对统计报表的时间精度可以细化到秒级。而且太久远的统计数据会自动清除(当然也可以存留5年、10年)。
 
四、实施步骤:
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  external_labels:
    EXT_LABEL_LEVEL: 'base_prometheus'  # 设置外部label:EXT_LABEL_LEVEL=base_prometheus
scrape_configs:
- job_name: 'node-exporter'  # 采集node-exporter
  static_configs:
    - targets: ['node-exporter:9100']
 
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  external_labels:
    EXT_LABEL_FEDERATE: 'true' # 有此label的数据,证明出自此prometheus
scrape_configs:
- job_name: 'federate'
  honor_labels: true # 避免原始数据中,因为label重复被覆盖
  metrics_path: '/prometheus/federate' # 因为我的prometheus配置文件中添加了前缀“/prometheus”

  params:
    'match[]':
      - '{__name__=~"^node_.*"}' # 抽取底层prometheus中,所有node开头的metrics

  static_configs:
    - targets: # 设置底层prometheus地址
        - 'prometheus:9090'  # 本实施例,底层prometheus安装在k8s中,所以这里写的是servcie名称
 
效果
 
五、其他可选项
类似可选项还包括thanos、victoriaVM。但这些都不是prometheus原生的组件,且更适用于大型的数据监控。如果数据量不大(比如边缘集群),使用federate特性已经可以满足大部分场景。
 
 
0条评论
0 / 1000
邓****烨
5文章数
0粉丝数
邓****烨
5 文章 | 0 粉丝
原创

prometheus federate特性(数据维度抽取)

2024-11-15 09:18:03
6
0
一、背景描述:
prometheus存有大量的监控明细数据,但是报表或者大屏监控需要的是更高维度的数据统计。如果直接从明细数据统计,很可能会因为数据量
过大而导致查询缓慢,甚至prometheus发生OOM。
 
二、解决思路:
借助prometheus提供的federate特性和recording rule特性实现。
 
1.在底层prometheus,通过recording rule预计算需要统计的明细metrics,形成新的指标。metrics命名最好遵循prometheus的规范
 
2.创建提供大屏查询的prometheus(暂且叫统计用prometheus),通过federate功能,从步骤1中的底层prometheus获取统计用metrics。
 
三、优势:
1.通过上述操作,即可将底层数据和统计数据分割。由于统计用prometheus只保存高维度数据,所以数据量会比底层prometheus少很多。可以设置更长的数据存留时间(比如一年),即可满足报表对历史数据统计的要求;
 
2.传统方式做法:利用定时器,将统计数据存到mysql。相比之下,prometheus federate方案对统计报表的时间精度可以细化到秒级。而且太久远的统计数据会自动清除(当然也可以存留5年、10年)。
 
四、实施步骤:
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  external_labels:
    EXT_LABEL_LEVEL: 'base_prometheus'  # 设置外部label:EXT_LABEL_LEVEL=base_prometheus
scrape_configs:
- job_name: 'node-exporter'  # 采集node-exporter
  static_configs:
    - targets: ['node-exporter:9100']
 
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  external_labels:
    EXT_LABEL_FEDERATE: 'true' # 有此label的数据,证明出自此prometheus
scrape_configs:
- job_name: 'federate'
  honor_labels: true # 避免原始数据中,因为label重复被覆盖
  metrics_path: '/prometheus/federate' # 因为我的prometheus配置文件中添加了前缀“/prometheus”

  params:
    'match[]':
      - '{__name__=~"^node_.*"}' # 抽取底层prometheus中,所有node开头的metrics

  static_configs:
    - targets: # 设置底层prometheus地址
        - 'prometheus:9090'  # 本实施例,底层prometheus安装在k8s中,所以这里写的是servcie名称
 
效果
 
五、其他可选项
类似可选项还包括thanos、victoriaVM。但这些都不是prometheus原生的组件,且更适用于大型的数据监控。如果数据量不大(比如边缘集群),使用federate特性已经可以满足大部分场景。
 
 
文章来自个人专栏
alogic
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1