处理逻辑

prometheus配置了remote write的目标地址后,它会从WAL读取数据,然后把采样数据写入各分片的内存队列,最后发起向远程目标地址的请求。

数据流的逻辑大致如下:

      |-->  queue (shard_1)   --> remote endpoint
WAL --|-->  queue (shard_...) --> remote endpoint|-->  queue (shard_n)   --> remote endpoint

需要注意的是:WAL是每两小时压缩一次,如果远程写入的目标地址挂了超过两个小时,就会导致这段时间没被发送的数据丢失。如果远程写入的目标地址无响应时间较短(两小时以内),prometheus是会重试的,这种情况不会造成数据丢失。

当一个分片的队列被塞满时,promtheus将阻塞继续从WAL读取数据到任意分片。
在操作过程中,prometheus根据以下条件来持续计算要是用的最佳的分片数:

  • 摄入样本的速率(incoming sample rate)
  • 还未发送的样本数量(number of outstanding samples not sent)
  • 发送每个样本的时间(time taken to send each sample)

内存的使用

当开启remote write功能后,prometheus内存的消耗是会上涨的。大部分反馈会上涨约25%的内存消耗,但实际数据取决于数据的分片。

对于WAL中的每一个series,远程写功能会缓存一个series ID到标签值的映射,这会导致内存消耗的大量增加。

除此之外,每个分片和其队列也增加了内存的使用。分片内存与 number of shards * (capacity + max_samples_per_send)成正比。默认的capacitymax_samples_per_send将限制每个分片的内存使用小于100KB。

相关参数

remote write的相关参数在queue_config配置块

# Configures the queue used to write to remote storage.
queue_config:# Number of samples to buffer per shard before we block reading of more# samples from the WAL. It is recommended to have enough capacity in each# shard to buffer several requests to keep throughput up while processing# occasional slow remote requests.[ capacity: <int> | default = 500 ]# Maximum number of shards, i.e. amount of concurrency.[ max_shards: <int> | default = 1000 ]# Minimum number of shards, i.e. amount of concurrency.[ min_shards: <int> | default = 1 ]# Maximum number of samples per send.[ max_samples_per_send: <int> | default = 100]# Maximum time a sample will wait in buffer.[ batch_send_deadline: <duration> | default = 5s ]# Initial retry delay. Gets doubled for every retry.[ min_backoff: <duration> | default = 30ms ]# Maximum retry delay.[ max_backoff: <duration> | default = 100ms ]

capacity

用来指定每个分片队列可容纳的样本数上限。当队列达到上限后,将停止从WAL读数据。

通过设大capacity可以避免分片的阻塞,但是会导致过多的内存消耗,以及resharing时清空队列所需要的时间。
推荐是将capacity设为max_samples_per_send的3到10倍。

max_shards

用来指定最大的分片数。当队列落后远程写模块时,prometheus将增加分片数直到最大值,来增加吞吐量。

min_shards

用来指定最小的分片数。这个参数对于大多数使用者来说不需要调整,因为当远程写落后时,prometheus会自动增加分片数。

max_samples_per_send

用来指定每次批量发送给远程写目标地址的最大samples数。如果远程写地址的后端服务,处理能力有限,或对每次处理的samples数有上限,则可以考虑设小次参数。

batch_send_deadline

指定发送一个远程写请求的最大等待时间。简单的说,,batch_send_deadline和max_samples_per_send这两个参数,有一个先达到,都会发起一个远程写请求。

min_backoff

指定当请求失败时,发起重试的最小时间间隔。增加这个值,可以使重试间隔时间更分散。每次重试后,下次重试的间隔时间将翻倍,直到达到max_backoff。

max_backoff

指定重试间隔的最大时间。

官方文档:https://prometheus.io/docs/practices/remote_write/

prometheus的remote write功能相关推荐

  1. 华三ap设置无线服务器,H3C无线控制器实现Remote AP功能典型配置举例(V7)

    1.配置AC (1)配置AC的接口 #创建VLAN 100及其对应的VLAN接口,并为该接口配置IP地址192.1.0.1/16.AP将获取该IP地址与AC建立CAPWAP隧道. system-vie ...

  2. 使用vscode remote ssh功能远程连接服务器或树莓派时,报错Setting up SSH tunnel的终极解决办法,全网仅此一份

    当你想用vscode remote ssh 功能远程开发linux服务器.树莓派时,.vscode-server文件创建完成,但是一直显示卡在 Setting up SSH Host <你的用户 ...

  3. KubeSphere 内置的 Prometheus 通过 remote write 至 Thanos 存更长期数据

    KubeSphere 内置的 Prometheus 通过 remote write 至 Thanos 存长期数据 1.方案介绍 2.场景 3.架构设计 4.实践验证 4.1 环境准备 4.2 实验环境 ...

  4. [Reomting Debug] 巧用VS 的remote debug 功能远程调试程序 经验分享.

    前言:  有时候我们Dev(开发人员)需要debug tester(测试人员)或者customer(客户)的环境,可tester的机器上没有Code,是不是有点着急? 而且是多版本应用且tester ...

  5. Prometheus + Grafana 实现监控功能总结

    一个简洁的博客网站:http://lss-coding.top,欢迎大家来访 学习娱乐导航页:http://miss123.top/ 1. Prometheus 简介 Prometheus 是近几年比 ...

  6. Prometheus 有瓶颈?怎么打造企业级监控系统?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源 | https://cloud.tencent.com/developer/article/1690227 Thanos[1] ...

  7. 基于 Prometheus 的监控系统实践

    监控作为底层基础设施的一环,是保障生产环境服务稳定性不可或缺的一部分,线上问题从发现到定位再到解决,通过监控和告警手段可以有效地覆盖了「发现」和「定位」,甚至可以通过故障自愈等手段实现解决,服务开发和 ...

  8. 全面学习Prometheus

    Prometheus是继Kubernetes后第2个正式加入CNCF基金会的项目,容器和云原生领域事实的监控标准解决方案.在这次分享将从Prometheus的基础说起,学习和了解Prometheus强 ...

  9. 一文详解 Prometheus 的高可用方案:Thanos

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 背景 在高可用 prometheus:问题集锦文章中有简单提到 Prome ...

  10. 网易云基于Prometheus的微服务监控实践

    当监控遇上微服务 在过去数年里,微服务的落地一直都是业界重点关注的问题,其始终面临着部署.监控.配置和治理等方面的挑战.轻舟微服务平台是网易云为企业提供的一套微服务解决方案,其中微服务监控是其关注的重 ...

最新文章

  1. CentOS7下搭建Nginx+PHP7的安装配置
  2. 以下关于java中布局管理说法错误的是_对于 Java 中的布局管理器,以下说法中错误的是( )。_2019复习答案_学小易找答案...
  3. C 语言运算符优先级(记忆口诀)
  4. 记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
  5. docker 提交自定义镜像
  6. 定义一个Employee类并排序(完整版本)
  7. Acad::ErrorStatus
  8. 我的世界java版地牢种子_我的世界手机版地牢种子代码汇总
  9. [luogu3369]普通平衡树(替罪羊树模板)
  10. matlab 数值积分 截断误差,几种数值积分算法误差分析(10页)-原创力文档
  11. 【实用】Word如何转换成PDF格式,文件转换三步免费搞定
  12. 途家民宿VS木鸟民宿:民宿APP功能体验
  13. 【Linux】/bin/sh、/bin/bash、/bin/dash、init=/sysroot/bin/bash(sh) 、init=/bin/bash(sh) 的区别
  14. office服务器草稿位置,精确定位图片在Word文档中的位置的操作方法
  15. Datax-web版安装(含安装包)
  16. 2.2 法力池的创建和视觉特效———自制卡牌游戏之旅
  17. java smb删除指定文件,java 利用SMB向远道机器写文件
  18. Pandas二次学习- 回炉重造(进阶)
  19. c语言 原子 字符串,Atomic operations library(原子操作库)
  20. 如何阅读一个前向推理框架?以NCNN为例。

热门文章

  1. CSDN产品周报第31期|PC端开放账号注销功能
  2. ArcGIS中.shp矢量文件和.lyr图层文件的区别
  3. 上海南京路步行街向全球征集标识Logo及吉祥物设计
  4. 室内可见光定位matlab代码,visible-led-communication 这里给出了几个可见光通信的MATLAB程序...
  5. 神威太湖之光超级计算机搭载了40960,神威·太湖之光超级计算机上实现了千万核超大规模并行计算...
  6. autojs指纹验证
  7. VendorNPC.lua --随身商人
  8. Matlab动态PID仿真及PID知识梳理
  9. 剑指offer_3 -- 构建乘积数组
  10. 使用EndNote对Word论文的参考文献进行管理