【博客620】prometheus如何优化远程读写的性能

250 篇文章 7 订阅
订阅专栏
148 篇文章 17 订阅
订阅专栏
29 篇文章 2 订阅
订阅专栏
文章介绍了Prometheus在使用远程存储时的性能优化方法,包括remote_write的内存使用、重试机制和队列参数(如capacity、max_shards、max_samples_per_send等)的调整,以及remote_read的配置优化,如read_recent参数的设置,以平衡本地和远程存储的查询效率。
摘要由CSDN通过智能技术生成

prometheus如何优化远程读写的性能

场景

为了解决prometheus本地存储带来的单点问题,我们一般在高可用监控架构中会使用远程存储,并通过配置prometheus的remote_write和remote_read来对接

远程写优化:remote_write

远程写的原理:

每个远程写入目标都会启动一个内存写队列(shards),这个队列从WAL中缓存数据。,通过队列去将指标数据写到有远程存储服务中,数据流如下所示:

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

重试机制:

当一个分片备份并填满队列时,Prometheus将阻止从WAL中读取数据到任何分片。(关于这点就涉及到对以上参数优化,后面参数capacity部分讲解)
远程端点写入失败会进行重试操作,并且保证数据不会丢失,除非远程端点保持关闭状态超过2小时,因为2小时后,WAL将被压缩,尚未发送的数据将丢失。重试时间见下面参数:min_backoff和max_backoff。

内存使用:

使用远程写入会增加Prometheus的内存占用量。大多数用户报告的内存使用量增加了约25%,但这取决于数据的形状。对于WAL中的每个系列,远程写代码都会缓存系列ID到标签值的映射,从而显着增加内存使用率。除了series缓存之外,每个分片及其队列还会增加内存使用量。当进行优化调整时,请考虑减少max_shards增加的数量,同时提高capacity和max_samples_per_send参数的大小从而避免无意间耗尽内存。默认capacity和 max_samples_per_send的取值将使得每每个shard使用内存小于100kb。

在这里插入图片描述

remote write queue的可调参数:

# 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 = 2500 ]
  # Maximum number of shards, i.e. amount of concurrency.
  [ max_shards: <int> | default = 200 ]
  # 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 = 500]
  # 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 = 5s ]
  # Retry upon receiving a 429 status code from the remote-write storage.
  # This is experimental and might change in the future.
  [ retry_on_http_429: <boolean> | default = false ]

max_shards和max_samples_per_send决定了Prometheus写入远程存储的最大TPS

参数解析:

  • 1、capacity

    定义:每个内存队列(shard:分片)的容量。

    一旦WAL被阻塞,就无法将样本附加到任何分片,并且所有吞吐量都将停止。所以在大多数情况下,单个队列容量应足够打以避免阻塞其他分片,但是太大的容量可能会导致过多的内存消耗,并导致重新分片期间清除队列的时间更长。

  • 2、max_shards

    顾名思义,最大的分片数(即队列数),也可以理解为远程写的并行度。peometheus远程写的时候会使用所有的分片,只有在写队列落后于远程写的速度,使用的队列数会达到max_shards,目的在于提高远程写的吞吐量。

    PS:在操作过程中,Prometheus将根据传入的采样率,未发送的未处理样本数以及发送每个样本所花费的时间,连续计算要使用的最佳分片数。(实际的分片数是动态调整的)

  • 3、min_shards
    最小分片配置Prometheus使用的最小分片数量,并且是远程写入开始时使用的分片数量。如果远程写入落后,Prometheus将自动扩大分片的数量,因此大多数用户不必调整此参数。但是,增加最小分片数将使Prometheus在计算所需分片数时避免在一开始就落后。

  • 4、max_samples_per_send

    定义:每次远程写发送的最大指标数量,即批处理;

    这个值依赖于远程存储系统,对于一些系统而言,在没有显著增加延迟的情况下发送更多指标数据而运行良好,然而,对于另外一些系统而言,每次请求中发送大量指标数据可能导致其出现故障,使用的默认值是适用于绝大多数系统的。

  • 5、batch_send_deadline

    定义:单一分片批量发送指标数据的最大等待时间;

    即使排队的分片尚未达到max_samples_per_send,也会发送请求。 对于对延迟不敏感的小批量系统,可以增加批量发送的截止时间,以提高请求效率。

  • 6、min_backoff

    定义:远程写失败的最小等待时间;

    min_backoff是第一次的重试等待时间,第二次等待时间是其2倍,以此类推,直到max_backoff的值;

  • 7、max_backoff

    定义:远程写失败的最大等待时间;

推荐做法:

  • 当进行优化调整时,请考虑减少max_shards的数量,同时提高capacity和max_samples_per_send参数的大小从而避免无意间耗尽内存

  • max_shards和max_samples_per_send决定了Prometheus写入远程存储的最大TPS,
    max_shards * max_samples_per_send决定了TPS的值,所以要考虑这两个的合理搭配

给出阿里云prometheus对接TSDB调优参考表:

在这里插入图片描述

远程读优化:remote_read

默认情况下,prometheus除了使用remote_write将数据发送到远程时序数据库,同时还会按照以下参数来保留数据到本地自己的时序数据库,两者取最先达到限制的:

--storage.tsdb.retention.time=30d
--storage.tsdb.retention.size=512MB

也就说默认情况下,prometheus保存了两份数据,一份到远程时序数据库,一份在本地

那么读取的时候是读取远程的还是读取本地是由read_recent参数决定

# Whether reads should be made for queries for time ranges that
# the local storage should have complete data for.
[ read_recent: <boolean> | default = false ]

read_recent作用:

  • 当设置为 true 时,所有查询都将从远程和本地存储中得到答复。
  • 当为 false(默认值)时,任何可以从本地存储完全回答的查询都不会发送到远程端点

推荐做法:

  • 通过storage.tsdb.retention.time与storage.tsdb.retention.size控制缓存短期数据在本地
  • 配置read_recent为false,使得本地能查询到的数据都优先在本地进行查询

在这里插入图片描述

【微服务】springboot对接Prometheus指标监控使用详解
congge
07-07 9184
springboot对接Prometheus指标监控使用详解
Prometheus如何优化远程读写性能
每天都要开心呀(#^.^#)
05-21 2412
Prometheus的本地存储设计可以减少其自身运维和管理的复杂度,同时能够满足大部分用户监控规模的需求。但是本地存储也意味着Prometheus无法持久化数据,无法存储大量历史数据,同时也无法灵活扩展和迁移。 为了保持Prometheus的简单性,Prometheus并没有尝试在自身中解决以上问题,而是通过定义两个标准接口(remote_write/remote_read),让用户可以基于这两个接口对接将数据保存到任意第三方的存储服务中,这种方式在Promthues中称为Remote Storage。
prometheus的remotewrite解析
wulitaotao96的博客
01-16 5357
WAL是每两小时压缩一次,如果远程写入的目标地址挂了超过两个小时,就会导致这段时间没被发送的数据丢失。prometheus配置了remote write的目标地址后,它会从WAL读取数据,然后把采样数据写入各分片的内存队列,最后发起向远程目标地址的请求。prometheus没有提供远程存储,但提供了远程存储的接口,远程存储只要实现这一接口,即可存储和读取prometheus的数据;实现:与prometheus做的事情相反,先进行sappy的解压缩,然后再protobuf反序列化,得到真实的数据。
Prometheus operator 系统参数和监控数据抓取调优
最新发布
不忘初心,方得始终
08-12 876
抓取配置频率: 每 30 秒抓取一次。路径: 请求路径。端口: 使用端口9203tcp。协议: 使用 HTTP 协议。超时: 请求超时时长为 10 秒。标签重写使用labeldrop操作和正则表达式删除不需要的标签namespacecontainerendpointjobuser以减少标签的基数。样本限制配置限制每次抓取请求的样本数,以防止因单一抓取请求导致的过高开销。这份。
Prometheus的remotewrite for java
大伟的博客
11-26 866
Prometheus的remotewrite for java
prometheus的remote write功能
B.I.T
08-30 1万+
处理逻辑 prometheus配置了remote write的目标地址后,它会从WAL读取数据,然后把采样数据写入各分片的内存队列,最后发起向远程目标地址的请求。 数据流的逻辑大致如下: |--> queue (shard_1) --> remote endpoint WAL --|--> queue (shard_...) --> remote endpoint |--> queue (shard_n) --> remote end
《打造高可用监控系统》之——Prometheus使用TIKV进行远程读(remote_read)和远程写(remote_write)
SuperWei的博客
04-26 5261
Prometheus的整体设计模型是基于单实例的。如果要打造高可用的Prometheus服务,一般通过2种方式进行:1、简单的多节点,数据仍就存在本地;2、使用remote_read和remote_write功能。网上有很多使用InfluxDB完成上述第二种方案的组件。而笔者公司内部没有InfluxDB服务。所以转而尝试通过TiKV实现。
KubeSphere 内置的 Prometheus 通过 remote write 至 Thanos 存更长期数据
随笔记录-分享&记忆
04-12 2101
背景说明 KubeSphere 内置经过优化、资源占比较小的、高可用的,两副本的 Prometheus 。 它可以备份到集群外,通过 remote-write到其他存储,但是由于资源占用太多,不建议发送到 es。
Prometheus存储优化性能调优:处理大规模监控数据
通过对Prometheus存储进行优化,可以显著提高性能和效率,减少资源消耗,提升系统稳定性。 ## 1.2 Prometheus存储架构概述 Prometheus存储架构包括时间序列数据库、Wal日志、索引文件和块文件等组件。了解存储架构...
Prometheus监控系统性能优化方法探究
## 1.1 介绍Prometheus监控系统的基本概念和作用 Prometheus是一种开源的系统监控和警报工具包,最初由SoundCloud开发,现为CNCF的一个独立项目。它具有多维数据模型和灵活的查询语言PromQL,能够实时监控大型...
Prometheus性能优化和调优技巧
# 1. 引言 ## 1.1 什么是Prometheus Prometheus是一款开源的监控系统和时间序列数据库,...## 1.2 为什么需要性能优化和调优 在大规模分布式系统中,性能问题是一种常见的挑战。随着系统规模的增长,数据量的增加
Prometheus 学习之——远端存储
u012140251的博客
09-08 1979
Prometheus 学习之——远端存储 文章目录Prometheus 学习之——远端存储前言一、总体架构二、远端接口规范三、相关参数四、存储汇聚 前言 Prometheus 是 CNCF 收录的第二个项目,已经成为了云原生时代监控的标准。 一、总体架构     面对更多历史数据的持久化,Prometheus 单纯依靠本地存储远不足以应对,为此引入了远端存储。为了适应不同的远端存储,Prometheus 并没有选择对接各种存储,而是定义了一套读写存储接口,并引入了 Adapter 适配器,将 Prom
Prometheus remote_write InfluxDB,unable to parse authentication credentials,authorization failed
L
07-06 913
这里Prometheus是通过如下方式启动的:systemctl start prometheus.service执行如下命令,查看Prometheus日志:journalctl -u prometheus -f 错误:unable to parse authentication credentials,authorization failed查看Prometheus配置文件prometheus.yml,如下: 如果不仔细研究,无法看出问题,后来发现,是因为密码中包含了url的特殊字符,例如这里#和&
python 通过prometheus remote write 写入指标数据
阿泽St
04-29 581
python向时序存储写入数据。
Prometheus配置远程写入数据到victoriametrics
一个行走江湖的人
12-06 947
【代码】Prometheus配置远程写入数据到victoriametrics。
go语言实现remote-write到prometheus
wulitaotao96的博客
02-05 632
【代码】go语言实现remote-write到prometheus
prometheus-operator metrics remote write elasticsearch
Yu的博客
08-06 1105
prometheus-operator部署起来的prometheus metrics远程存储到es。 prometheus官方推荐通过metricbeat写入Elasticsearch 官网地址 https://github.com/elastic/beats 但是prometheus并没有实现remotewrite到elasticsearch的功能。见 https://github.com/prometheus/prometheus/issues/5528 通过promet...
如何远程写入prometheus存储
Linuxprobe18的博客
08-27 5908
导读 prometheus一般都是采用pull方式获取数据,但是有一些情况下,不方便配置exporter,就希望能通过push的方式上传指标数据。 简介 prometheus一般都是采用pull方式获取数据,但是有一些情况下,不方便配置exporter,就希望能通过push的方式上传指标数据。 1、可以采用pushgateway的方式,推送到pushgateway,然后prometheus通过pushgateway拉取数据。 2、在新版本中增加了一个参数:--enable-feature=r
Prometheus 集群方案之 Remote Read 实战
热门推荐
Go中国
01-29 1万+
一直以来 Prometheus 被吐槽最多的就是 HA 和集群方案。想想以前,我们用上顶配机器,但还会遇到磁盘,网络 IO,查询超时等问题,主要因为收集的数据量太大,超过单机承受的范围。在过去一段时间,我们已经根据业务,部门,能拆分的都拆分到不同的 Prometheus 中去了,但即便如此,仍然存在一些问题:有些业务无法拆分,数据量还是特别大。数据收集和查询做的事情是完全独立的,但两者时常相互竞争
写文章

热门文章

  • 【博客55】C++ string的clear()函数的真面目! 27148
  • 【博客368】HTTP常见状态码 26295
  • 【博客425】0.0.0.0 与 255.255.255.255 15258
  • 【博客90】路由表中的0.0.0.0 14855
  • 【博客350】Go中 “空值“ 的几种判断方法 13804

分类专栏

  • k8s 148篇
  • go 29篇
  • c++ 73篇
  • linux 250篇
  • 计算机网络 130篇
  • c 56篇

最新评论

  • 【博客609】docker volume挂载本机文件出现不同步的问题解决

    y_1: 请教一下,为什么修改文件权限后就可以同步到容器内呢?

  • 【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

    bokerr: 我有一个做法,就是在分母可能为零的指标里,默认给分母加上:十亿分之1,0.000000001; 监控的场景本身就是非可靠数,cpu时间、写过的字节数多了这十亿分之1,也不过是泥牛入海。 这种做法仅适用于计量场景,如果数值具有bool是非逻辑,就不适用这种做法。

  • 【博客515】k8s中为什么需要br_netfilter与net.bridge.bridge-nf-call-iptables=1

    鱼长天: 这么高质量的文章,重在原理的介绍,就算有纰漏,也不至于上升到“误人子弟”的程度。我觉得这篇文章非常精彩,不仅把原理说得很清楚,而且思考的过程也通过一个又一个小问题体现出来。同时,还配了好多示例和图示,良心大大的好!

  • 【博客55】C++ string的clear()函数的真面目!

    ——奈芙莲——: 醉详细的解释,腻害,一起顶你 %dalao %Orz

  • 【博客447】使用open vswitch构建虚拟网络

    weixin_37915425: 一个虚拟机两个网卡挂载了 物理主机。不是说物理主机的ip没了吗? 那挂载了两个没有ip的主机 有什么意思

最新文章

  • 【博客721】时序数据库基石:LSM Tree的辅助优化
  • 【博客720】时序数据库基石:LSM Tree的增删查改
  • 【博客719】时序数据库基石:LSM Tree的Compact策略
2024年14篇
2023年138篇
2022年154篇
2021年8篇
2020年267篇
2019年155篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王三明营销型网站优化平台造纸网站优化的效果门窗网站优化公司同安网站优化有哪些优化网站架构sem优化网站成都优化网站排名摄影网站优化公司天河网站优化价格吉利区网站优化排名滨州网站优化找哪家邯郸网站优化方案烟台做网站优化哪家好辽宁价格低的网站品牌优化网站优化方法和技巧seo网站优化做什么重庆市厉害的网站优化上海搜索引擎优化网站康平口碑好的网站建设优化价格西秀区分类网站优化盐城大丰网站优化怎么快速优化网站排名莱山网站优化源码长宁哪里有做网站优化网站优化方案及渠道网站同时做竞价和优化可以浙江企业网站排名优化公司优化公司网站细致云速捷高名荆门工厂网站优化价格什么是优化型网站香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化