✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑
文章目录
Prometheus快速⼊⻔
1、监控基本概念
1.1 什么是监控
监控就是持续不间断地对系统或服务进⾏监视,以确保我们的系统或服务⼀直处于正常运⾏的状态。
当然要想保证系统时刻处于健康的状态,我们需要配置对应的监控策略,便于我们及时检测到系统中可能出现的各种问题,如 CPU 使⽤率激增、内存耗尽或磁盘空间不⾜等。
当这些问题被发现时,监控系统可以警告通知我们,这样我们就可以迅速介⼊,⽽后对出现的问题进⾏诊断和解决,从⽽保证系统的稳定性和可靠性。
同时,监控在整个运维过程、以及整个产品⽣命周期中都⾮常重要,它具有以下⼏个特性:
1、事前预警:监控能够在故障发⽣前发出警报,帮助我们提前发现问题,规避
问题。
例如,我们设定了当内存使⽤率超过80%时,就触发告警。⼀旦达到阈值,监控系统会通过邮件、微信、钉钉、⻜书、如流、短信等媒介,发送告警通知。
这样,相关⼈员可以及时介⼊,进⾏故障处理,避免因内存耗尽导致系统崩溃,从⽽有效地降低故障率。
2、事后追溯:利⽤监控获取到的数据,来快速分析故障所产⽣的原因。
例如,当⽹站服务出现反应迟钝时,我们可以对⼀些关键指标数据进⾏分析,如数据库查询的延迟、CPU负载、磁盘IO、等等。这些异常变动可能就是引发问题的关键线索。有了这样的线索后,我们能更迅速地追查和定位问题。
3、趋势分析:根据监控指标返回的数据,我们可以了解到系统性能以及资源使⽤的变化趋势。基于这些数据,我们可以预测未来可能出现的问题。
例如,我们有⼀个1TB的硬盘。通过监控,发现每天的数据增量约为30GB。那么在这种情况下,我们就可以利⽤趋势分析来预测硬盘会在何时满载。通过简单的计算就能得出,硬盘⼤约在33天后被填满(剩余的天数 = 总的硬盘容量/ 每天的数据增量)。
这样分析的信息极其有⽤,因为我们可以提前采取⾏动,例如,提前清理⽆⽤的数据,或者增加更多的存储空间,以防⽌硬盘被填满。
4、对⽐分析:通过对⽐不同时间段下的监控数据,分析系统在不同的情况下的表现。
例如,⽹站在正常⼯作⽇,每分钟处理100次交易。但在周末或⼤促期间,交易量可能飙升⾄每分钟1000次。这种激增可能导致系统响应缓慢,数据库查询效率下降,甚⾄⻚⾯加载延迟。
在这种情况下,我们可以对⽐这两个时间段的数据,详细观察系统在⾼交易量时的负载表现,分析问题可能出在哪⾥,是数据库延迟,服务器资源不⾜,还是代码执⾏效率低下。
有了这些具体信息,我们就能针对性地采取优化措施,例如,提升数据库查询效率,增加服务器资
源,或优化代码等,以提升系统性能,并保证其稳定运⾏。
5、数据可视化:将数据以图形的⽅式展示,使我们能够更容易地了解系统的当前状态和性能。
例如:我们可以通过可视化⼯具⽣成的动态图表,来实时展示集群的负载、内存的使⽤、磁盘I/O等关键指标。这些直观的图形使我们能够洞察到系统状态的变化和趋势。
同时数据可视化以图形的⽅式提供了⽐数字更清晰、更易理解的信息,极⼤地提⾼了我们分析性能指标的效率,从⽽加强了故障排查和性能优化的能⼒。
PS:总之,监控是⽤来确保系统稳定、⾼效运⾏的关键⼿段,它帮助我们提
前发现问题、定位问题,以及解决问题。
1.2 监控的⽬标
在复杂的IT环境中,我们需要监控的⽬标⾮常之多,如:硬件、⽹络设施、操作系统、应⽤程序及相关的业务等。
为了帮助我们更有效地进⾏监控,我们将这些监控的⽬标划分为如下⼏个主要的类别:
1.3 监控的⽅式
在了解了需要监控的各类⽬标后,我们需要选择合适的监控⽅式才能有效地跟踪和管理这些⽬标。监控系统主要包含两种监控⽅式:⽩盒监控和⿊盒监控。
⽩盒监控:这种监控⽅式主要关注"问题的根本原因",它通过分析系统内部暴露的各种指标,来发现可能产⽣的问题。
例如,在使⽤Redis时,我们可以利⽤info命令获取众多的内部指标数据,从⽽了解Redis的当前运⾏状态。
假如Redis所关联的从节点发⽣了宕机的情况,那么相应的指标就会显示 redis slave down ,这样,我们就能够迅速地定位并解决问题。
因此,⽩盒监控主要是通过分析内部指标,并通过这些指标反馈的信息来找出问题的根源。
⿊盒监控:这种监控⽅式主要关注"问题的表⾯现象",通常,它会通过TCP、HTTP等探针的⽅式模拟⽤户的请求,来获取服务的指标数据(例如,响应时间、站点可⽤性等)。
例如,Redis所关联的从节点发⽣宕机时,⿊盒监控可能会返回像 Connection refused 或 Connection timeout 这样的提示等信息,⽽不会像⽩盒监控那样提示 redis slave down 。
因此,⿊盒监控的主要⽬标是站在⽤户的⻆度,关注他们在实际使⽤过程中可能遇到的问题,⽽不会去探究问题的根源。
PS:因此,⽩盒监控和⿊盒监控是两种相辅相成的⽅法,它们让我们能够从
不同⻆度深⼊理解系统的运⾏状况。
当我们将这两种监控⽅式结合使⽤时,
可以更全⾯地了解系统的当前运⾏状况,提前发现并解决问题,从⽽更好地
维护和优化系统,同时也能保障业务的稳定运⾏。
2、著名的监控⽅法论
2.1 ⽅法论的重要性
我们前⾯讨论了要监控的⽬标和监控的⽅式。思考⼀下,如果我们有100台主机,每台主机运⾏200个应⽤,每个应⽤⼜有上百个指标需要追踪。这就意味着我们需要处理⼆⼗万个监控的指标。那么在这种情况下,若对所有指标都设置告警,我们很快就会被告警信息淹没。
所以,我们需要明确应⽤的哪些指标是最关键的,应优先关注,并在出现异常情况下触发告警。
解决这个问题的⽅法是引⼊⼀些成熟的监控⽅法论。这些⽅法论帮助我们识别出最重要的指标,让我们可以将注意⼒集中在这些指标上,并在这些指标出现异常时触发告警。
⽬前,业界⼴泛采⽤的监控⽅法论包括Google的四个⻩⾦指标、以及RED⽅法和USE⽅法。
2.2 四个⻩⾦指标
Google 的四个⻩⾦指标着眼点在“服务监控”,这四个指标分别是“延迟、流量、错误、饱和度”。
1、延迟(Latency):指⼀个服务完成请求所需的时间。
例如,你在⼀个购物⽹站点击了“查看商品列表”的按钮,从你点击按钮到商品列表完全显示在你的屏幕上,假设所需的时间是1秒,那么我们就说这个服务的延迟是1秒。
然⽽,这个延迟计算需要考虑的是成功的请求还是失败的请求,因为⼀个失败的请求可能很快就返回了,但这并不意味着服务实际响应快。因此,我们需要分别统计成功请求的延迟和失败请求的延迟,以准确反映服务的性能。
2、流量(Traffic):有时也称为吞吐量,是指服务在单位时间内能处理的请求数量或MySQL能处理的事务数量。
例如,⽹站在5秒内处理了1000个请求,那么我们就说这个服务的流量或吞吐量每5s能达到1000个请求。这个指标可以帮助我们了解服务的处理能⼒,并为资源分配、性能优化等提供决策依据。
3、错误(Errors):指⼀个服务请求错误的"次数"或"错误的占⽐率"。
例如,在10000个请求中,有100个请求因为某些原因(如服务器内部错误、返回内容不符合预期、请求超时等)处理失败,那么我们就可以说这个服务的错误数是100,或者失败错误率是1%(100/10000)。
监控错误数或错误率可以帮助我们及时发现和定位服务的问题,提⾼服务的可靠性和⽤户的满意度。
4、饱和度(Saturation):⽤于衡量资源的使⽤程度,通常是指⼀个服务有多“满”。
例如,⼀台Web服务每秒能处理1000个请求。如果当前Web服务每秒只处理100个请求,那么它的饱和度为10%(100/1000)。
这意味着Web服务⽬前不够饱和,还有⼤量的处理能⼒未被使⽤。但如果Web服务每秒处理了700个请求,那么其饱和度就达到了70%(700/1000)。
这意味着这个Web服务真正的发挥了作⽤。同时我们也需要关注对应的指标,如果请求量持续增⻓,则会达到Web服务的最⼤处理能⼒,可能会导致Web服务⽆法快速地响应新的请求。
2.3 USE⽅法
USE⽅法是由Netflix的内核和性能⼯程师提出的系统性能分析⽅法。它主要着眼于“系统资源”的使⽤情况,这三个指标分别是“使⽤率、饱和度、错误”。
1、使⽤率(Utilization):⽤于衡量系统资源使⽤情况。
例如,CPU在过去的60秒内有30秒被⽤来执⾏指令,那么我们可以说这个CPU的使⽤率是50%。
这⾥的资源主要包括但不限于:CPU,内存,⽹络,磁盘等。⼀旦使⽤率达到了100%,通常表明系统已经发⽣了瓶颈。
2、饱和度(Saturation):⽤于衡量系统资源的队列⻓度(不同于4⼤⻩⾦信号)
CPU的饱和度:在Linux系统中,可以通过查看系统的平均负载来观察CPU的饱和度。
平均负载是指在⼀定时间间隔内,运⾏队列中的进程数(包括正在运⾏的和等待运⾏的)。
如果平均负载的值持续⾼于CPU的核⼼数,那么可以认为CPU的饱和度较⾼,可能需要增加CPU资源或优化系统的处理能⼒。
磁盘的饱和度:在Linux系统中,可以使⽤ iostat -x 命令查看aqu-sz(Average Queue Size,平均队列⼤⼩)字段来观察磁盘的饱和度。aqu-sz 表示在给定的时间段内采样设备请求队列的平均⻓度。
如果aqu-sz的值持续较⾼,可能意味着磁盘已经饱和,磁盘I/O操作的需求超过了其处理能⼒,可能需要更换更⾼IO的磁盘。
3、错误(Errors):⽤于衡量资源事件错误计数。
例如:⼀个程序尝试使⽤malloc()函数分配内存,但系统没有⾜够的内存可供分配,那么malloc()将返回⼀个错误,那么我们就可以追踪malloc()失败的次数。
其次,在⽹络接⼝的数据包传输过程中,由于接收缓冲区满了,⽆法容纳新到来的数据包,导致了86个数据包被丢弃(drop)。这种丢包事件也被视为错误(Errors)
2.4 RED⽅法
RED ⽅法是由 Weave Cloud 提出的⼀种专为云原⽣应⽤和微服务架构设计的性能监控⽅法。
它基于 Google 的四个⻩⾦指标(即延迟,流量,错误,饱和)的原则,结合了 Prometheus 和 Kubernetes 容器实践,进⼀步细化并总结出了三个关键的指标:请求率、错误数、请求处理时间。
因此,RED ⽅法能够有效地帮助⽤户衡量云原⽣以及微服务应⽤下的⽤户体验问题。
1、(Request)Rate:系统每秒钟接收的请求数。 而 google指标中的流量是
指系统单位时间内处理的请求数,或是请求的总量。
2、(Request)Errors:每秒失败的请求数。
3、(Request)Duration:处理每个请求所花费的时⻓。而 google指标中的延
迟是指系统从接收请求到响应请求所花费的时间。
在某些情况下,Duration
可能更关注单个请求的处理时间,⽽ 延迟 可能更关注系统的整体响应时间。
我们对各种资源进行监控时,会告诉大家使用的是设呢么方法论
比如:
CPU:USE方法论:
使用率;
饱和度;
错误;
总结:监控任何服务,我们需要根据对应的方法论,按照方法论所描述的维度,查找出关键指标;
3、Prometheus介绍
3.1 Prometheus是什么
Prometheus 是由 SoundCloud 使⽤ Go 语⾔开发的时序数据库(简称TSDB)但它的功能并⾮局限于TSDB,因为它还⽀持对⽬标(如服务器、应⽤程序等)进⾏监控;
因此,我们也可以理解Prometheus是⼀款开源的“监控系统”,但仅仅依托 Prometheus 不⾜以⽀撑整个监控系统,它需要结合⽣态内其他的组件来构建⼀个完整的IT监控系统。
例如: AleartManager、Grafana、PushGateway 等等。
Prometheus对目标进行指标的采集、存储(TSDB时序数据库)通过时间序列的方式进行存储。
指标名称:
标签:
数据:
每一个指标都代表一个时间序列;
cpu_usage{type="web01"}
cpu_usage{type="web02"}
cpu_usage{type="web03"}
cpu_usage{type="web01",cpu="0"}
cpu_usage{type="web01",cpu="1"}
cpu_usage{type="web02",cpu="0"}
特性“”
多维数据模型:根据不同的维度来区分每个序列
PromQL:zabbix需要源头去处理数据,怕Prometheus可以直接(计算、查询、过滤)
AlertManager:告警。
Grafana: 读取Prometheus中的数据,然后进行展示;
PushGateway:
3.2 什么是时序数据
所谓时序数据,指的是,按照固定时间周期对“某个或某些指标”进⾏“反复测量”从而得到测量的“数据集合”。这些数据随着时间的推移,会形成⼀个连续的序列,因此被称为时序数据。
如果我们将这些数据绘制在图形上,通常会有⼀个 数据轴(Y轴) 表示数据值,⼀个 时间轴(X轴) 表示测量的时间点。
3.3 Prometheus时序数据
在Prometheus中,时序数据主要包括三个部分:指标名称、标签集、时序数
据(时间戳、数据)。
1、指标名称
例如,监控服务器的CPU使⽤率,对应的指标名称可以是 cpu_usage、memory_MemTotal 等
指标名称是被监控端提供的。
2、标签集
标签集⽤于区分不同的数据源或实例。
假设我们有两台服务器,⼀台是Web服务器,另⼀台是db数据库服务器。为了区分这两台服务器的CPU使⽤率数据,我们可以为它们添加不同的标签,
例如: cpu_usage{type=“web”} 和 cpu_usage{type=“db”} 。
3、时序数据
指按照按固定时间间隔,采集对应指标名称,从⽽获取到对应指标的数据。
例如,每分钟采集⼀次CPU使⽤率( cpu_usage )。每个数据点包括采集CPU使⽤率的时间戳( 2023.03.30 10:00:01 ),以及该时间点采集到的样本值( 50% )
PS:每⼀个“指标名称和标签组合”都会形成⼀条独⽴的时间序列。这就表
示,即使我们只探测了⼀个指标 cpu_usage ,但是它具有不同的标签
值,就会产⽣两条分别代表不同实例的时间序列。
在这些时间序列中,每⼀
个特定的数据点被称为⼀个’样本’。每个样本都包含指标名称、标签、时间
戳以及对应的指标值。
4、总结
Prometheus作为一款强大的监控和警报工具,在云原生和微服务架构中发挥着重要作用。通过合理配置和使用Prometheus,可以实现对系统性能的全面监控和及时报警,为系统的稳定运行提供有力保障。在实际使用中,应根据业务需求和系统特点,制定合适的监控策略和报警规则,并不断优化监控系统的性能和安全性。
由于篇幅限制,本文先讲到这里,后续我们继续结合实际案例讲述prometheus的特点,详细用法,监控告警等等。持续更新中…