大家好,我是 Snow Hide,作为《左耳听风》这个专栏的学员之一,这是我打卡的第 4 天,也是我第 4 次进行打卡这种操作。
今天我温习了该专栏里一篇叫《分布式系统关键技术:全栈监控》的文章。
关键词总结:全栈监控、多层监控、应用层监控、平台层监控、中间层监控、基础层监控、监控系统常见问题、监控系统的作用、监控系统适用场景、监控系统的实现。
所学总结:
全栈监控/多层监控
基础层
基础层能监控到的数据有:计算能力(CPU)、计算使用率(CPU Usage)、内存大小(Memory Total)、内存使用率(Alocated Memory)、磁盘容量(Disk Capacity)、磁盘使用率(Disk Usage)、入站流量(Inbound Traffic)、出站流量(Outbound Traffic)
平台层/中间层
平台层或中间层能监控到的数据有:中转服务器状态/配置(Nginx)、动态服务器状态/配置(Tomcat)、缓存服务器状态/配置(Redis/Memcached)、消息队列服务器状态/配置(Kafka/RocketMQ/RabbitMQ)、数据库状态/配置(MySQL/MariaDB)
应用层
应用层能监控到的数据有:请求量(Request Per Second)、应用本身的性能指标(Controller/Service/Repository)、应用所使用的代码库的性能指标(JDBC/JPA)、应用访问其他服务的性能指标。
监控系统的问题
数据不共享
监控系统里常见的一个问题是由于分布共明确而产生的系统中各层间的数据没有做到完全地共享,导致层级间没有办法互相访问对方的数据,导致监控指标不准确或不客观。
监控项过多
监控的项目过多反而会导致效率低下,半天找不出关键的数据,查找问题时容易找不到正确的方向。
监控系统的作用
整合分布式服务的关键指标
将分布在多个机器上的服务的行为/状态/配置数据整合到一起来从中找出异常的数据。
迅速定位故障发生点
通过非侵入的方式来实现用户请求的路径跟踪,我们可以获取请求在系统中的调用链信息,以最快速度找出链中出问题的节点以及原因。
资源伸缩自动化
一个健壮的监控系统可以在某一个节点资源不足时为其增加相应的资源,也可以在某一个节点资源过剩时释放多余的资源。
性能问题定位
可以通过查看整合的数据来查找并判断性能问题的产生是由哪个服务或哪段代码所导致的。
监控系统的实现
服务关系链跟踪
通过查看服务关系链,我们可以快速的看清整个分布式系统中各个服务之间的关联关系。可以通过 Java Agent 字节码技术来实现,或者借助 Java ASM 框架。
服务调用耗时追踪
通过查看服务调用耗时,我们可以迅速定位到耗时最多的几个服务。
请求相关的排行追踪
通过查看请求相关的排行,我们可以定位到请求的相关数据有:调用次数最多的请求、调用时最耗时的请求、某一时间段内调用次数最多次的请求。
数据库操作耗时追踪
通过查看数据库操作耗时,我们可以定位到执行起来最的那几个 SQL 操作。可以通过 Java Agent 字节码技术来实现,或者借助 Java ASM 框架。
资源利用率追踪
通过查看资源利用率,我们可以清楚的看到服务所处的机器的各项指标。这些指标包含但不限于:计算利用率、内存大小、容量大小、网络吞吐量以及相关的配置信息。
末了
重新总结了一下文中提到的内容:全栈/多层系统监控的重要性、监控系统需要关注的指标、监控系统的作用以及监控系统的实现方法参考。