开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
很多同学都知道系统性能分析的原理、思路以有关工具。但是在实际系统性能分析中,常见现象是突然发生了性能瓶颈,但当我们登到服务器中排查的时候,却发现瓶颈消失了。换句话说,系统性能问题是常态,时不时发生,但很难找出规律,也难重现。我们总不能等到系统崩溃以后,或者用户主动抱怨响应慢了,再去排查故障,这样严重影响用户体验,在金融领域,往往升级为重大事件。
解决这个矛盾,需要搭建系统监控系统,时刻监控系统和应用程序的性能,发生问题第一时间告警,好的监控系统可以实时暴露系统的各种问题,自动分析、自动定位大致的问题来源,从而精确地将问题推送给运维团队处理。
系统层面,监控系统要涵盖系统整体资源使用情况,比如CPU、内存、磁盘空间、网络等各种系统资源;应用层面,监控系统必须覆盖应用程序运行状态,包括进程的CPU、磁盘I/O等运行状况,还需要包括接口调用耗时,执行错误,内部对象占用内存等运行状况。
使用率,表示资源用于服务的时间或容量百分比。 饱和度,表示资源的繁忙程度,通常与等待队列的长度相关。 错误数,表示发生错误的事件个数。 上述三个类别指标,涵盖了系统资源的常见性能瓶颈,对于每种系统资源,采用经典的USE方法,能够直接表名系统资源瓶颈,常见系统性能指标如下:
建立监控系统,把上述指标保存下来,自动分析和定位瓶颈来源,最后通过告警系统,将问题及时发给运维团队处理。很多开源监控软件,Zabbix,Prometheus可以拿来即用。下图是Promethues的基本架构图:
Prometheus targets 是数据采集的对象,Retrieval负责采集这些数据。Prometheus 同时支持 Push 和 Pull 两种数据采集模式。Pull 模式是由服务器端的采集模块来触发采集。被采集目标需要提供HTTP接口,这也是最常用的采集模式。Push 模式,是由各个被采集目标主动向Push Gateway推送指标,再由服务器端从Gateway中拉取,在实际过程中,被监控对象是动态变化的,Prometheus提供了服务发现机制,可以根据预先设置的配置规则,发现需要监控的对象,在容器平台中非常有用。
为了保持监控数据持久化,TSDB模块负责将采集的数据持久化到SSD磁盘设备中,TSDB是时序数据库,特定是以时间为索引,能够接受大数据量并且以追加的方式写入。
Prometheus提供了数据查询、数据处理基本功能,通过使用PromQ语言,可以快速查询、过滤相关数据,是告警和可视化展示的基础。
AlertManager提供告警功能,使用PromQL语言设置触发条件,告警规则配置及发送,这里需要注意,过多、过于频繁的告警是不可取的,AlertManager还提供通过分组、静默等方式聚合告警,减少告警数量。
Prometheus自身提供可视化UI界面,用于展示PromQL语句查询结果,一般会配合使用Grafana构建强大的图形展示界面。