系统与应用监控的思路和方法

0、前言

在实际的性能分析中,一个很常见的现象是,明明发生了性能瓶颈,但当你登录到服务器中想要排查的时候,却发现瓶颈已经消失了。或者说,性能问题总是时不时地发生,但却很难找出发生规律,也很难重现。

而要解决这个问题,就要搭建监控系统,把系统和应用程序的运行状况监控起来,并定义一系列的策略,在发生问题时第一时间告警通知。一个好的监控系统,不仅可以实时暴露系统的各种问题,更可以根据这些监控到的状态,自动分析和定位大致的瓶颈来源,从而更精确地把问题汇报给相关团队处理。要做好监控,最核心的就是全面的、可量化的指标,这包括系统和应用两个方面。

从系统来说,监控系统要涵盖系统的整体资源使用情况,比如 CPU、内存、磁盘和文件系统、网络等各种系统资源。

而从应用程序来说,监控系统要涵盖应用程序内部的运行状态,这既包括进程的 CPU、磁盘 I/O 等整体运行状况,更需要包括诸如接口调用耗时、执行过程中的错误、内部对象的内存使用等应用程序内部的运行状况。

一、系统监控

1.1 USE法

在开始监控系统之前,你肯定最想知道,怎么才能用简洁的方法,来描述系统资源的使用情况。你当然可以使用专栏中学到的各种性能工具,来分别收集各种资源的使用情况。不过不要忘记,每种资源的性能指标可都有很多,使用过多指标本身耗时耗力不说,也不容易为你建立起系统整体的运行状况。

在这里,我为你介绍一种专门用于性能监控的 USE(Utilization Saturation and Errors)法。

USE 法把系统资源的性能指标,简化成了三个类别,即使用率、饱和度以及错误数:

  • 使用率:表示资源用于服务的时间或容量百分比。100% 的使用率,表示容量已经用尽或者全部时间都用于服务。
  • 饱和度:表示资源的繁忙程度,通常与等待队列的长度相关。100% 的饱和度,表示资源无法接受更多的请求。
  • 错误数:表示发生错误的事件个数。错误数越多,表明系统的问题越严重。

这三个类别的指标,涵盖了系统资源的常见性能瓶颈,所以常被用来快速定位系统资源的性能瓶颈。这样,无论是对 CPU、内存、磁盘和文件系统、网络等硬件资源,还是对文件描述符数、连接数、连接跟踪数等软件资源,USE 方法都可以帮你快速定位出,是哪一种系统资源出现了性能瓶颈。

1.2 性能指标

以下是常见的性能指标:

注意USE 方法只关注能体现系统资源性能瓶颈的核心指标,但这并不是说其他指标不重要。诸如系统日志、进程资源使用量、缓存使用量等其他各类指标,也都需要我们监控起来。只不过,它们通常用作辅助性能分析,而 USE 方法的指标,则直接表明了系统的资源瓶颈。

1.3 监控系统

掌握 USE 方法以及需要监控的性能指标后,接下来要做的,就是建立监控系统,把这些指标保存下来;然后,根据这些监控到的状态,自动分析和定位大致的瓶颈来源;最后,再通过告警系统,把问题及时汇报给相关团队处理。一个完整的监控系统通常由数据采集、数据存储、数据查询和处理、告警以及可视化展示等多个模块组成。所以,要从头搭建一个监控系统,其实也是一个很大的系统工程。

搭建监控系统可参考方案:

Prometheus和Zabbix的对比

Prometheus+Grafana安装教程实战

1.4 小结

系统监控的核心是资源的使用情况,这既包括 CPU、内存、磁盘、文件系统、网络等硬件资源,也包括文件描述符数、连接数、连接跟踪数等软件资源。而要描述这些资源瓶颈,最简单有效的方法就是 USE 法。

USE 法把系统资源的性能指标,简化为了三个类别:使用率、饱和度以及错误数。当这三者之中任一类别的指标过高时,都代表相对应的系统资源可能存在性能瓶颈。

基于 USE 法建立性能指标后,我们还需要通过一套完整的监控系统,把这些指标从采集、存储、查询、处理,再到告警和可视化展示等贯穿起来。这样,不仅可以将系统资源的瓶颈快速暴露出来,还可以借助监控的历史数据,来追踪定位性能问题的根源。

二、应用监控

2.1 应用监控指标

跟系统监控一样,在构建应用程序的监控系统之前,首先也需要确定,到底需要监控哪些指标。特别是要清楚,有哪些指标可以用来快速确认应用程序的性能问题。 

2.1.1 核心指标

应用程序的核心指标,不再是资源的使用情况,而是请求数、错误率和响应时间。

这些指标不仅直接关系到用户的使用体验,还反映应用整体的可用性和可靠性。有了请求数、错误率和响应时间这三个黄金指标之后,我们就可以快速知道,应用是否发生了性能问题。

请求书、响应时间的详情,可参考:【参数】一文搞清楚QPS、TPS、并发用户数、吞吐量

2.1.2 性能评估指标

虽然通过核心指标可以知道应用发生问题,但是,只有这些指标显然还是不够的,因为发生性能问题后,我们还希望能够快速定位“性能瓶颈区”。所以,在我看来,下面几种指标,也是监控应用程序时必不可少的:

♦ 应用进程的资源使用情况:

  • 描述:比如进程占用的 CPU、内存、磁盘 I/O、网络等。使用过多的系统资源,导致应用程序响应缓慢或者错误数升高,是一个最常见的性能问题。
  • 作用:可以把系统资源的瓶颈跟应用程序关联起来,从而迅速定位因系统资源不足而导致的性能问题

♦ 应用程序之间调用情况:

  • 描述:比如调用频率、错误数、延时等。由于应用程序并不是孤立的,如果其依赖的其他应用出现了性能问题,应用自身性能也会受到影响。
  • 作用:可以迅速分析出一个请求处理的调用链中,到底哪个组件才是导致性能问题的罪魁祸首

♦ 应用程序内部核心逻辑的运行情况:

  • 描述:比如关键环节的耗时以及执行过程中的错误等。由于这是应用程序内部的状态,从外部通常无法直接获取到详细的性能数据。
  • 作用:可以更进一步,直接进入应用程序的内部,定位到底是哪个处理环节的函数导致了性能问题。

基于这些思路,我相信你就可以构建出,描述应用程序运行状态的性能指标。再将这些指标纳入到监控系统(比如 Prometheus + Grafana)中,就可以跟系统监控一样,一方面通过告警系统,把问题及时汇报给相关团队处理;另一方面,通过直观的图形界面,动态展示应用程序的整体性能。

2.2 全链路监控

业务系统通常会涉及到一连串的多个服务,形成一个复杂的分布式调用链。为了迅速定位这类跨应用的性能瓶颈,你还可以使用 skywalking、Zipkin、Jaeger、Pinpoint 等各类开源工具,来构建全链路跟踪系统。

全链路跟踪可以帮你迅速定位出,在一个请求处理过程中,哪个环节才是问题根源。

全链路跟踪除了可以帮你快速定位跨应用的性能问题外,还可以帮你生成线上系统的调用拓扑图。这些直观的拓扑图,在分析复杂系统(比如微服务)时尤其有效。

2.3 日志监控

性能指标的监控,可以让你迅速定位发生瓶颈的位置,不过只有指标的话往往还不够。比如,同样的一个接口,当请求传入的参数不同时,就可能会导致完全不同的性能问题。所以,除了指标外,我们还需要对这些指标的上下文信息进行监控,而日志正是这些上下文的最佳来源。

对比来看,指标是特定时间段的数值型测量数据,通常以时间序列的方式处理,适合于实时监控。

而日志则完全不同,日志都是某个时间点的字符串消息,通常需要对搜索引擎进行索引后,才能进行查询和汇总分析。

对日志监控来说,最经典的方法,就是使用 ELK 技术栈,即使用 Elasticsearch、Logstash 和 Kibana 这三个组件的组合。如下图所示,经典的 ELK 架构图:

  • Logstash :负责对从各个日志源采集日志,然后进行预处理,最后再把初步处理过的日志,发送给 Elasticsearch 进行索引。
  • Elasticsearch :负责对日志进行索引,并提供了一个完整的全文搜索引擎,这样就可以方便你从日志中检索需要的数据。
  • Kibana :负责对日志进行可视化分析,包括日志搜索、处理以及绚丽的仪表板展示等。

下面这张图,就是一个 Kibana 仪表板的示例,它直观展示了 Apache 的访问概况。

注意:ELK 技术栈中的 Logstash 资源消耗比较大。所以,在资源紧张的环境中,我们往往使用资源消耗更低的 Fluentd,来替代 Logstash(也就是所谓的 EFK 技术栈)。

2.4 小结

应用程序的监控,可以分为指标监控和日志监控两大部分:

  • 指标监控:主要是对一定时间段内性能指标进行测量,然后再通过时间序列的方式,进行处理、存储和告警。
  • 日志监控:可以提供更详细的上下文信息,通常通过 ELK 技术栈来进行收集、索引和图形化展示。

在跨多个不同应用的复杂业务场景中,你还可以构建全链路跟踪系统。这样可以动态跟踪调用链中各个组件的性能,生成整个流程的调用拓扑图,从而加快定位复杂应用的性能问题。

参考资料:

1.性能优化与测试:系统监控、应用监控的思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381903.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

应用程序服务器监控

什么是应用程序服务器监视 为了确保业务应用程序的最佳性能,必须使用应用程序服务器监视工具,以深入了解应用程序的运行状况和正常运行时间。应用程序服务器监视可帮助您识别性能不足的服务器组件以及性能问题的根本原因,修复它们并确保应用…

应用监控

简介 Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。 Endpoints 列举一些主要的endpoints : 敏感信息访问限制 根据上面表格,鉴权为false的,表示不敏…

应用监控以及告警实现

前言 一个Java应用 可以不优秀,但是一定不能没有监控方案。否则极大影响排查线上问题的效 以及系统故障的及时告警 。试想 核心应用挂了一个 但是没有配置告警 理想情况几个小时 被自己人发现了 但是万一自己人也没看到或者没关注 那难道让服务一直挂下去么 &#…

十四、应用监控(1)

本章概要 监控端点配置(开启端点,暴露端点,端点保护,端点响应缓存,路径映射,CORS支持,健康信息,应用信息) 当一个Spring Boot 项目运行时,开发者需要对 Spr…

一篇文章讲透线上应用监控

“线上服务停了,要重启一下”?久经职场做研发的程序员,视线会逐渐转移到线上应用的运行状态。设想一下,如果你在半夜两点正在酣眠美梦时,微信群里突然炸开锅:“服务停了,先重启。。。”&#xf…

如何设置时间倒计时

开发工具与关键技术:Visual Studio 2015、SQL Server 2014 作者:黄世豪 撰写时间:2019年01月31号相信很多小伙伴在做项目时会遇到过要用到时间倒计时的效果,下面我们来实现一下如何将自己设置的时间来让其进行时间倒计。 jsp调用…

js倒计时读秒

1.需求及分析 最近,接到一个接收手机验证码的功能,大体就是设置一个定时器,在每次执行的时候将秒数,逐个减去1,小于0的时候,清除定时器,然后完善一下功能,例如,加上一下状态的变化&…

C#实现倒计时的功能

软件界面: 软代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

android studio高考倒计时,高考倒计时app排行榜

编辑推荐 时间管理倒计时 v1.3.0 大小:13.7MB 更新时间:21-04-14 下载 时间管理倒计时,一款专为小伙伴打造的手机时间规划工具,为小伙伴提供更强大的规划服务,在这里小伙伴可以自由规划自己的时间,为小伙伴…

VS2015+C#实现倒计时小程序

最近疫情严重,在家呆着也是呆着,于是就想学一下上位机的编写,权衡利弊之后,选择了C#语言,原因是据说它写出来的上位机比较小,不占内存。开发环境就用VS吧,用的人挺多的。好了,进入正…

C#之一个倒计时小应用程序的实现

只能开始计时,不能停止计时 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…

易语言编写倒计时小程序

本人为编程爱好者,非专业人员。 最近工作中需要用到编写倒计时软件,故有此篇。 软件功能: 1.时间倒计时 2.倒计时会有一个透明放大的标签显示时间 3.各窗口可隐藏 以下为软件运行界面: 代码: .版本 2 .支持库 she…

DIY蓝牙小音响

PRE 我个人是比较喜欢手工做一些小东西,但是由于知识限制,我无法去制作一些复杂的东西,如果是一些简单的小玩具,如果我有能力做,我还是很乐意去做的。前段时间正好在看音响,我最后入手了一个便宜的EDIFIER…

树莓派系列二(语音识别)

树莓派的基本概念和安装系统在系列文章一中介绍了.这篇准备介绍一下语音识别. 一直想研究一下语音识别,用来做家庭物联网的控制入口,未来也许就是这样,讯飞的叮咚音响可以连接京东的物联平台,苹果的homekit平台,华为的平台暂时落后的有点多... 国内语音识别领域,我个人比较欣…

毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

文章目录 0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 PAJ7620U2模块4.2 HC-05蓝牙模块4.3 JQ8900语音模块 5 部分核心代码6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

两台电脑共享一个音响方法

两台电脑共享一个音响方法 由于某种原因,需要两个电脑使用同一个扬声器,现分享一种简单的方案 原理:通过主机的音频输入功能,将另一台电脑的音频接收过来并播放。 连线如下: PC2作为主设备,正常连接音响…

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

Spring框架——IOC、DI

本篇博客主要介绍Java中的IOC和DI,以及在String框架中的应用。首先,我们将对IOC和DI进行概念介绍,然后讲解它们的关系及在String框架中的应用,最后通过一个实例来展示它们的具体用法。 IOC和DI的概念介绍 IOC(Invers…

叮咚!你点的Spring套餐来了!

儒猿技术团队最新出品: 《Spring顶尖高手进阶:互联网教育系统项目实战》 长按扫描下方二维码了解: 课程背景 在技术日新月异的今天,Spring作为Java主流开发框架,出道十多年仍然稳坐C位,经久不衰&#xff0c…