Prometheus 拉取模式的扩展性

news/2024/5/18 22:51:37 标签: kebernetes, prometheus, pull, 拉取, 扩展性

首先,官方文档的 FAQ 是这么解释为何使用拉取pull)而不是推送(push)模式:

  • 可以在笔记本上监控开发时产生的变更
  • 如果监控目标宕了可以更容易发现
  • 可以通过web浏览器手工访问监控目标并检查其健康状况

总之我们认为拉取比推送好一点点,但是这并不一个监控系统需要考虑的重点。

下文是一篇 Prometheus 官方博客的阅读笔记。

有些人认为拉取模式是无法扩展的,然而这和我们的实践经验相反,以下进一步讨论这一误解。

Prometheus 不是 Nagios

Nagios 有扩展性不好的名声,这部分源于在Nagios主机上要创建用于检查的子进程,这些子进程执行随机操作来探测节点和服务的健康状况,这造成Nagios中心节点的压力迅速升高。于是人们通常为间隔几分钟执行一次这种检查。

而 Prometheus 采取了完全不同的方式,它不执行检查脚本,而仅仅通过网络收集被控目标的时序数据。对每个被控目标,Prometheus服务器简单地通过HTTP(高并发,使用goroutines)收取所有指标的当前状态,没有任何其他的运行负荷。这引出下一点

谁发起连接无关紧要

对于扩展性而言,服务器和被控端哪一端发起TCP连接无关紧要,创建连接的开销比传输的指标负载要小。

推送模式可以使用UDP来避免创建连接,诚然,但是TCP/HTTP开销与Prometheus服务器的注入数据(尤其是持久化时序数据到硬盘)的工作比起来是微不足道的。一些数据:一个单节点Prometheus服务器可以轻松存储数百万时序数据,每秒80万样本数据。设刮取周期为10秒,每个被控端700个时序指标,这允许你用一台Prometheus服务器监控超过1万台主机。扩展的瓶颈绝对不是拉取模式,而通常是Prometheus服务器注入数据到内存然后持久化到硬盘的速度。

而且鉴于网络的可靠性,使用基于TCP的拉取模式使指标数据的到达非常可靠,如果由于网络原因导致指标传输失败时,监控系统也可以立刻发现。

Prometheus 不是基于事件的系统

有些监控系统是基于事件的,每一个事件(HTTP请求、异常)发生时他们立即向监控服务器报告。监控服务器可以汇聚事件为指标或保存事件用于后续处理(ELK)。对于这种系统,拉取确实是有问题的,计量服务必须在拉取的间隔中间缓存事件,拉取的频率也要非常高才能接近推送模式的效果。

Prometheus不是基于事件的监控系统,它仅仅关心标准化地采集给定指标的当前状态,而不是导致这些指标的底层事件。例如,计量服务不会发送关于每个HTTP请求的消息给Prometheus服务器,而是在内存中简单地累加这些请求。每秒可能会发生成百上千次这种累加而不会产生任何监控流量。Prometheus然后每隔15或30秒简单地问一下这个服务实例当前状态的累积值而已。监控结果的传输量很小,拉取模式也不会产生问题。

但是现在监控需要知道我的服务实例!

基于拉取模式的监控系统需要知道存在哪些服务实例和如何连接到它们。有些人担心这会导致很大的配置量从而限制扩展性

对于严格的监控系统,无论如何都无法逃避这些配置工作,推送模式会要求更多的配置,因为服务器要知道被控端,被控端还要知道服务器。拉取模式不但需要的配置量更少,而且配置更灵活。当被控端点移动以后,不需要重新配置被控端。你也可以简单地copy一个生产环境的监控到你的笔记本上。你还可以通过其他手段或者手工检查被控端。

Prometheus有方便地配置界面,内置支持广泛的云服务厂商的服务发现机制。

监控中偶尔遭遇DDoS

无论那种模式,发送给时序数据库的数据量超过它的处理能力就会导致它宕机。推送模式更容易导致这种情况发生,相比而言拉取模式地风险更低一些

真实世界的证明

Google就用它,你还能比Google的服务器规模大么?

拉取模式还是存在问题的

一个突出的问题是server和被控端的网络不可达,此时Prome也有变通的推送网关模式。这主要是TCP网络操作的困难性导致的。


http://www.niftyadmin.cn/n/1531840.html

相关文章

管理虚拟存储(二)

管理虚拟存储(二) 五.管理虚拟存储 5.1 虚拟磁盘概述 5.1.1 虚拟化项目中存储的注意事项 存储的性能几乎总是虚拟化的瓶颈通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案考虑部署集中化的SAN/NFS来实现高可用性和实时迁移5.1.2 KVM存储模式 基于文件系…

Kubernetes API 的访问控制

翻译自官方文档 用户使用 kubectl 或 REST 请求访问 API、客户端库。人类用户和service account 二者可以授权访问 API。当请求到达API,它经过若干步骤。 传输安全 典型的 Kubernetes 集群中,API Server 位于6443端口。API Server 出示证书。此证书通…

关于D7“System.pas not found”错误的解决方法

有时候安装一些组件以后会出现: [Fatal Error] Project1.dpr(1): Unit not found: System.pas or binary equivalents (DCU,DPU) 的错误,不知道什么原因,刚开始只有重装Delphi才解决问题,后来察看Borland官方网站得知,…

Kubernetes Pod 关闭流程

翻译自官方文档 用户发送delete pod命令,grace period 参数即宽限期(假设为30秒)API Server 更新 pod 的宽限期字段执行pod get 命令显示pod状态变为Terminating与3同时,kubelet看到pod被标识了deleteTimestamp也就是标识为Termi…

qemu cow镜像分析

最近研究了以下qemu最简单的read on direct 镜像格式cow,在稀疏文件的模式下,这种方式还是比较简单,而且有优势的。其优势主要体现在云计算环境中,不需要用到qcow2的那些诸如内部快照,加密,压缩的功能。同时…

Kubernetes 污点和容忍

Node affinity: pod 亲和节点Taints: 节点驱逐pod 一个node可以设置多个污点,不容忍污点的pod不能调度到这个节点,容忍度设置给pod,这样的pod允许但不是必须调度到有这些污点的node。 概念 添加污点 kubectl taint…

Asp.net 通过 Label (span) 和 TextBox(input) 进行记录信息 提供给后台

请看如下链接: http://stackoverflow.com/questions/2493209/how-to-fill-a-label-text-property-via-jquery 转载于:https://www.cnblogs.com/mingmingruyuedlut/archive/2013/05/23/2993424.html

kubernetes 部署 https 服务器

创建ca证书签名请求文件 ca-cst.json {"CN": "www.abc.com","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "BeiJing","L": &…