能否通过remote_write向Prometheus实例推送指标,再由中心实例抓取?
实现方案:从接收remote_write的Prometheus实例抓取推送指标
Prometheus默认的/metrics端点仅暴露自身运行指标,不会展示通过remote_write推送进来的时间序列数据——这些数据存储在它的TSDB中,不属于自身监控指标集合。以下两种方法可以实现你的需求:
方法一:使用Prometheus联邦(Federation)功能
接收remote_write的Prometheus实例默认提供/federate端点,该端点可返回实例存储中的所有时间序列数据。只需在中心Prometheus中配置抓取这个端点即可:
- 修改中心Prometheus的配置:
global: scrape_interval: 10s evaluation_interval: 10s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] # 新增抓取接收remote_write实例的联邦配置 - job_name: 'federate_remote_write_nodes' scrape_interval: 10s honor_labels: true # 保留原始指标的标签,避免被中心实例的默认标签覆盖 metrics_path: '/federate' params: 'match[]': - '{job=~".+"}' # 匹配所有job的指标,可根据需求调整过滤规则,比如仅抓取特定namespace的指标 static_configs: - targets: ['remote-write-node-1:9090', 'remote-write-node-2:9090'] # 替换为你的接收实例地址列表
- 接收remote_write的Prometheus实例无需额外配置,只要确保中心实例能访问到该实例的
/federate端点即可。
方法二:使用remote_read直接读取接收实例的存储
如果不需要通过抓取流程,而是让中心Prometheus直接从接收实例的TSDB中读取数据,可以配置remote_read:
修改中心Prometheus的配置:
global: scrape_interval: 10s evaluation_interval: 10s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] # 新增remote_read配置,读取接收实例的存储 remote_read: - url: 'http://remote-write-node-1:9090/api/v1/read' read_recent: true # 读取最近产生的数据,适合实时查询场景 - url: 'http://remote-write-node-2:9090/api/v1/read' read_recent: true
注意事项
- 确保中心Prometheus能访问到接收实例的
/federate或/api/v1/read端点,无网络或权限限制 - 联邦方式适合需要对接收实例的指标进行二次处理(如重新打标签、过滤)的场景;remote_read适合直接聚合所有数据、统一查询的场景
- 若接收实例数量较多,可考虑使用服务发现替代static_configs来自动发现目标实例
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

