首页 > 其他分享 >分布式架构-可观测性-聚合度量

分布式架构-可观测性-聚合度量

时间:2023-03-16 14:34:41浏览次数:43  
标签:存储 架构 系统 指标 Prometheus 譬如 分布式 度量

系列目录

分布式架构-可观测性(一)-原理概览

分布式架构-可观测性(二)-事件日志

分布式架构-可观测性(三)-链路追踪

分布式架构-可观测性(四)-聚合度量

引子

  分布式架构的可观测性,度量(Metrics)的目的是揭示系统的总体运行状态。度量总体上可分为客户端的指标收集、服务端的存储查询以及终端的监控预警三部分能力,每个过程在系统中一般也会设置对应的组件来实现。Prometheus在度量领域的统治力虽然还暂时不如日志领域中 Elastic Stack(ELK+Beats) 的统治地位那么稳固,但在云原生时代里,已经是事实标准了。本文就以 Prometheus 为例,介绍这三部分组件的原理。

一、指标收集

  指标收集部分要解决两个问题:“如何定义指标”(通用指标类型)以及“如何将这些指标告诉服务端”(数据采集方案)。

1.1 指标类型(Metrics Types)

无论何种系统,都是具备一些共性特征。指标的数据类型是有限的。这里列举5个常见指标数据类型。

计数度量器(Counter):这是最好理解也是最常用的指标形式,计数器就是对有相同量纲、可加减数值的合计量,譬如业务指标像销售额、货物库存量、职工人数等等;技术指标像服务调用次数、网站访问人数等都属于计数器指标。

瞬态度量器(Gauge):瞬态度量器比计数器更简单,它就表示某个指标在某个时点的数值。譬如当前 Java 虚拟机堆内存的使用量,这就是一个瞬态度量器;又譬如,网站访问人数是计数器,而网站在线人数则是瞬态度量器。

吞吐率度量器(Meter):吞吐率度量器顾名思义是用于统计单位时间的吞吐量,即单位时间内某个事件的发生次数。譬如交易系统中常以 TPS 衡量事务吞吐率,即每秒发生了多少笔事务交易。

直方图度量器(Histogram):直方图是常见的二维统计图,它的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图的形式表示具体数值。

采样点分位图度量器(Quantile Summary):分位图是统计学中通过比较各分位数的分布情况的工具,用于验证实际值与理论值的差距,评估理论值与实际值之间的拟合度。譬如,我们说“高考成绩一般符合正态分布”,这句话的意思是:高考成绩高低分的人数都较少,中等成绩的较多,将人数按不同分数段统计,得出的统计结果一般能够与正态分布的曲线较好地拟合。

1.2 数据采集

  数据采集通常有两种:拉取式采集(Pull-Based Metrics Collection)和推送式采集(Push-Based Metrics Collection)。

  • Pull 是指度量系统主动从目标系统中拉取指标。
  • Push 就是由目标系统主动向度量系统推送指标。

  这两种方式并没有绝对的好坏优劣,以前很多老牌的度量系统,如GangliaGraphiteStatsD等是基于 Push 的,而以 Prometheus、DatadogCollectd为代表的另一派度量系统则青睐 Pull 式采集(按需拉取)。

  如上图所示,Prometheus 基于 Pull 架构的同时还能够有限度地兼容 Push 式采集(支持Push Gateway再pull)。Prometheus 设计 Push Gateway 的本意是为了解决 Pull 的一些固有缺陷,譬如目标系统位于内网,通过 NAT 访问外网,外网的 Prometheus 是无法主动连接目标系统的,这就只能由目标系统主动推送数据;又譬如某些小型短生命周期服务,可能还等不及 Prometheus 来拉取,服务就已经结束运行了,因此也只能由服务自己 Push 来保证度量的及时和准确。

  由于度量面向的是广义上的信息系统,横跨存储、通讯、中间件,直到系统本身的业务指标,一直没有统一的标准。有一些度量系统,譬如老牌的 Zabbix 就选择同时支持了 SNMP、JMX、IPMI 等多种不同的度量协议,另一些度量系统,以 Prometheus 为代表就相对强硬,选择任何一种协议都不去支持,只允许通过 HTTP 访问度量端点这一种访问方式。如果目标提供了 HTTP 的度量端点(如 Kubernetes、Etcd 等本身就带有 Prometheus 的 Client Library)就直接访问,否则就需要一个专门的 Exporter 来充当媒介。

二、存储查询

  指标从目标系统采集过来之后,应存储在度量系统中,以便被后续的分析界面、监控预警所使用。早期的度量系统 Zabbix 用的就是传统关系数据库来存储指标。但由于度量指标数据量巨大,时序特性,Prometheus的度量指标数据存储在“时序数据库”(Time Series Database)中。写操作,时序数据通常只是追加,很少删改或者根本不允许删改。针对数据热点只集中在近期数据、多写少读、几乎不删改、数据只顺序追加这些特点,时序数据库被允许做出很激进的存储访问保留策略(Retention Policies):

  • 以日志结构的合并树(Log Structured Merge Tree,LSM-Tree)代替传统关系型数据库中的B+Tree。LSM 适合的应用场景就是写多读少,且几乎不删改的数据。
  • 设置激进的数据保留策略,譬如根据过期时间(TTL)自动删除相关数据以节省存储空间,同时提高查询性能。
  • 对数据进行再采样(Resampling)以节省空间。
  • 极端情况下,使用轮替型数据库(Round Robin Database,RRD),以环形缓冲的思路实现,只能存储固定数量的最新数据,超期或超过容量的数据就会被轮替覆盖。

  近几年随着云原生的快速发展,Prometheus+k8s的监控方案日渐成熟。Prometheus时序数据库,在DB-Engines的排名目前已经跃居时序数据库第三。Prometheus时序数据库提供了名为 PromQL (Prometheus 的文档手册)的数据查询语言,能对时序数据进行丰富的查询、聚合以及逻辑运算。

三、监控预警

  指标度量是手段,最终目的是做分析和预警

3.1 监控

与追踪系统的情况类似:

  • 广义上的度量系统由面向目标系统进行指标采集的客户端(Client,与目标系统进程在一起的 Agent,或者代表目标系统的 Exporter 等都可归为客户端),负责调度、存储和提供查询能力的服务端(Server,Prometheus 的服务端是带存储的,但也有很多度量服务端需要配合独立的存储来使用的),以及面向最终用户的终端(Backend,UI 界面、监控预警功能等都归为终端)组成。
  • 狭义上的度量系统就只包括客户端和服务端,不包含终端。

  Prometheus 应算是处于狭义和广义的度量系统之间,尽管它确实内置了一个界面解决方案“Console Template”,以模版和 JavaScript 接口的形式提供了一系列预设的组件(菜单、图表等),让用户编写一段简单的脚本就可以实现可用的监控功能。不过这种可用程度,往往不足以支撑正规的生产部署,只能说是为把度量功能嵌入到系统的某个子系统中提供了一定便利。在生产环境下,大多是 Prometheus 配合 Grafana 来进行展示的,这是 Prometheus 官方推荐的组合方案,但该组合也并非唯一选择,如果要搭配 Kibana 甚至 SkyWalking来使用也都是完全可行的。

3.2 预警 

  除了为分析、决策、故障定位等提供支持的用户界面外,度量信息的另一种主要的消费途径是用来做预警。譬如你希望当磁盘消耗超过 90%时给你发送一封邮件或者是一条微信消息,通知管理员过来处理,这就是一种预警。Prometheus 提供了专门用于预警的 Alert Manager,将 Alert Manager 与 Prometheus 关联后,可以设置某个指标在多长时间内达到何种条件就会触发预警状态,触发预警后,根据路由中配置的接收器,譬如邮件接收器、Slack 接收器、微信接收器、或者更通用的WebHook接收器(例如集成钉钉机器人)等来自动通知用户。

 

标签:存储,架构,系统,指标,Prometheus,譬如,分布式,度量
From: https://www.cnblogs.com/dennyzhangdd/p/17222437.html

相关文章

  • 重磅:RHCA架构师新班要开课啦:《利用红帽 Ceph 存储的云存储(CL260)》
    培训安排线下+线上可同时学习2023年3月25日开始—4月15日结束注:●以上为课程时间计划课程介绍利用红帽Ceph存储的云存储(CL260)课程适合存储管理员以及在生产数据中心环境下......
  • cpu分布式训练论文阅读
    LargeScaleDistributedDeepNetworksDownpourSGD:模型的副本采用异步方式从参数服务器(ParameterServer)中获取参数w和上传Δw到参数服务器模型副本之间运行独立......
  • Redis中是如何实现分布式锁的?
    分布式锁常见的三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。Redis要实现分布式锁,以下条件应该得到满足:互斥性:在任意时刻,只有一个客户端......
  • Minio架构简介
    简介Minio是一个go编写基于ApacheLicensev2.0开源协议的对象存储系统,是为海量数据存储、人工智能、大数据分析而设计,它完全兼容AmazonS3接口,十分符合存储大容量的非结......
  • Minio分布式文件系统
    Minio分布式文件系统注意:192.168.118.35是我的虚拟机ip,使用的时候记得改成自己的拉取minio镜像dockerpullminio/minio系统环境基本配置cat>>/etc/sysctl.conf......
  • 期终架构项目指导
    目录#期终架构可以写的项目 -1考试系统 -学生端: 签到签退功能:人脸识别签到,迟到,忘记签到 -补签:老师审批 -日历 考......
  • 第91讲:Akka第一个案例动手实战架构设计
    第91讲:Akka第一个案例动手实战架构设计以wordcount为案例actor架构1masteractor主控 2mapactor map计算3reduceactor reduce汇总4aggregateaggregate合......
  • 微服务架构的新挑战
    《人月神话》中提到,软件世界没有“银弹”,这句话当然适用于架构领域从网络、性能、运维成本、组织架构与集成测试五个方面分别进行阐述。第一点,跨进程通信带来的新问题。......
  • 跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager
    MyBatis核心配置文件详解transactionManager配合视频教程观看,更易学习理解,课程讲解从Mybatis的一些核心要点与实战中的运用,一直过渡到MyBaits源码,由表及里的代入架构思维。......
  • 图数据库中的“分布式”和“数据切分”(切图)
    今天,我试着简要综述几类不同的图数据库的分布式与切图的设计,希望可以帮助大家了解不同项目、产品的设计差异。如果有理解不对的地方,欢迎留言讨论。什么是分布式系统一般......