应用程序性能监控是持续观察、测量和分析软件应用程序实时运行状况的实践。
应用程序是任何 IT 环境不可或缺的组成部分。它们充当架构的功能层,处理数据并弥合基础设施与用户之间的鸿沟。因此,它们直接影响企业的运营成本、收入和客户留存率。
应用程序性能监控涵盖了维护应用程序生态所需的所有实践。因此,它对企业的 IT 环境和整体业务目标来说,与应用程序本身同等重要。
应用程序性能监控高度依赖自动化工作流和监控工具,这些工具评估关键绩效指标 (KPI)——如延迟、错误率和吞吐量——以洞察应用程序健康状况并识别性能问题。这些工具能够:
借助应用程序性能监控平台,DevOps 团队可以实现主动问题检测,提高应用程序正常运行时间,并减少工程师花在紧急救火任务上的时间。这些功能帮助企业确保 Web 应用程序尽可能平稳运行,而领导者也能就软件投资做出数据驱动的决策。
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
通常,开发团队通过向应用程序代码中植入监控(将监控逻辑注入代码以收集代码运行时行为的数据)并在应用程序栈旁部署轻量级智能体,来实现应用程序性能监控。
智能体运行在应用程序服务器上,从应用程序进程、基础设施和托管环境、下游依赖项以及用户界面中摄取数据,所有这些都不会显著影响应用程序性能。然后,智能体和植入的监控代码将监控数据发送到中央监控平台,该平台聚合数据并创建仪表盘和其他可视化图表。
监控平台应用 IT 团队要求的任何规则和阈值,并在规则被打破或 KPI 超过可接受限度时发送警报,使团队能够在问题发生时迅速响应。
假设 XYZ 公司将应用程序 ABC 用于人力资源和薪资处理。DevOps 团队决定,工时表提交延迟应低于 1.5 秒,5 分钟内错误率应保持在 0.5% 以下,5 分钟内登录失败率应保持在 2% 以下。
正常情况下,该应用程序的响应时间不到 700 毫秒,错误率接近 0%,登录失败率很低。但在节假日前的繁忙发薪日星期五,配置错误的数据库索引导致了运行缓慢。延迟、错误率和登录失败率开始超过其分配的阈值。监控工具将自动向所有必要的团队成员发送警报,以便他们能迅速找到并修复有问题的索引。
在高级平台中,异常检测和机器学习 (ML) 驱动的功能还可以识别异常数据模式,预测性能问题,甚至通过根据严重性和时间敏感性对警报进行分类来减少警报噪音。
这些流程有助于创建从前端界面、后端服务、数据库到第三方依赖项的端到端可见性,使团队能够理解每个单独的组件对整体应用程序性能的影响。
缩写“APM”经常既指应用程序性能监控,也指应用程序性能管理。事实上,这两个术语经常互换使用。但是,应用程序性能监控工具专注于监控,仅代表应用程序性能管理 (APM) 的一个方面。除监控外,APM 平台还提供数据分析流程、故障排除协议和优化工具。
监控解决方案依赖于部署在整个应用程序环境及支持基础设施中的智能体,定期(高频率可达每分钟一次)对性能指标(或遥测数据)进行采样。更现代的解决方案采用无智能体监控,通过使用网络流量分析来收集应用程序性能数据,实现非侵入式的数据采集。
从很多方面来看,应用程序性能管理是监控之后应用程序维护生命周期中顺理成章的下一步。APM 解决方案从应用程序性能数据和监控流程中收集洞察,帮助开发人员优化企业应用程序的性能和可用性。
应用程序性能监控工具通过整合几种不同类型的监控,实现全栈可见性。
基础设施监控侧重于应用程序所运行的底层系统(如服务器、虚拟机 (VM)、容器、网络、存储和云服务)的健康和性能。
这种监控以资源为中心,关注资源是否可用并在安全限制内运行。它依赖一组低层级指标(关于系统健康的数值时间序列数据)和信号,这些指标和信号描述组件的工作负荷有多高,以及它是否接近故障或降级。
对于服务器或虚拟机,监控指标通常包括 CPU 使用率、内存消耗、磁盘 I/O、磁盘空间和网络吞吐量。对于容器和 Kubernetes 节点,监控包含类似的指标,但范围限定在 Pod、节点和命名空间。
服务器端(或后端)监控评估后端应用程序代码和服务(包括应用程序服务器、微服务、API、中间件以及它们使用的框架和运行时)如何处理数据请求。
基础设施监控回答与资源相关的问题,例如“该节点是否过载?”或“该磁盘是否即将满载?”服务器端监控则提出以应用程序为中心的问题,例如“为什么这个 API 端点对用户来说响应缓慢?”
监控工具观察请求流经代码、框架和依赖项时的执行过程,以了解进程的运行效率,以及每个请求的时间和资源消耗去向。智能体嵌入到运行时中;测量特定功能和进程的耗时;将请求分解为多个段以精准定位问题;并追踪对数据库、缓存、队列和第三方 API 的调用。
后端监控通常跟踪的 KPI 包括:响应时间(每个 API 端点或服务)、吞吐量(每秒请求数、每分钟处理的任务数)、错误率及类型,以及资源利用率。
从应用程序的角度来看,网络监控衡量数据包在构成应用程序工作的各组件(路由器、交换机、负载均衡器、API 网关)之间如何移动,以及网络路径本身是否正在拖慢数据传输或引发故障。
数据包在网络中经过的每一跳都会增加潜在的延迟或故障点。如果链路饱和、交换机丢包或路由不理想,即使代码和服务器都正常,应用程序的 API 也可能变得不可靠。因此,网络监控侧重于延迟、丢包、抖动和带宽使用等 KPI。
通常,网络监控工具监控应用程序流量在两个端点之间(例如,Web 服务器与应用服务器之间,以及应用程序服务器与数据库之间)的移动情况。
当网络流量数据与更高层级的应用程序性能监控数据关联时,其作用最为显著。如果事务跟踪(跟踪请求跨服务的完整路径)显示某个服务间的调用很慢,网络指标可以同时揭示主机之间的链路上是否存在丢包或延迟突增。
这使 IT 团队能够看到,例如,从服务 A 到服务 B 的调用现在耗时 300 毫秒,而非 20 毫秒,因为其节点之间的路径发生了变化。
数据库监控衡量数据库的性能表现、可用性,以及它们是否接近可能损害应用程序性能的资源或配置限制。这种监控有助于区分代码级问题与模式设计或数据访问模式问题。
许多用户可见的性能问题都源于数据库,因此专门的数据库监控对于应用程序管理至关重要。
监控工具识别出最“昂贵”的查询——即总体消耗最多时间或资源的查询——并根据调用总执行时间、延迟百分位数和每次查询的输入/输出时间等指标对它们进行排名。这一过程帮助 IT 团队找到缺失的数据库索引或编写不当的查询,这类问题可能会拖慢最终用户面对的整个应用程序。
日志监控与分析负责收集应用程序发出的日志(系统事件的不可变记录),搜索并关联日志数据以发现存在问题的系统事件。
日志监控工具通常不会让不同应用程序的日志散落在不同机器上,而是将它们集中到一个平台。智能体收集日志条目,并将其全部发送到监控平台,在那里进行解析、打上时间戳和索引。这个聚合过程将原本分散的文本文件转变为一个可搜索的实时数据源,用于运行应用程序环境。
日志监控平台在日志到达时即对其进行处理,并应用规则或基于 ML 的检测器来发现问题,当出现有问题的模式时自动触发告警。这些告警通常附带链接或查询,可直接将开发人员带到相关的日志子集,使他们能立即开始故障排查。
当日志数据与指标和追踪数据关联起来时,日志监控会变得更加有力。当某个端点触发由指标驱动的性能告警时,DevOps 团队可以从慢请求的追踪直接跳转到处理该请求的服务的日志,以了解问题的根本原因。
容器监控提供对运行应用程序的容器(如 Docker)和编排器(如 Kubernetes)的可见性,弥合了应用程序性能与底层基础设施之间的差距。监控工具自动发现容器和 Pod,将容器映射到它们所运行的服务,跟踪它们的整个生命周期,并将资源使用情况与追踪和用户请求关联起来。
容器监控在多个层面收集指标。
在容器和 Pod 层面,它测量 CPU 使用率、内存消耗、网络输入/输出和磁盘输入/输出。它还捕获生命周期事件,例如 Pod 的启动和重启、终止以及探针失败(当容器不健康或未准备好接受流量时发生)。在集群和节点层面,监控工具判断集群是否有足够的内存,新 Pod 是否能够轻松调度(放置),以及不同命名空间中的 Pod 是否在争用相同的资源。
来自容器监控的数据随后会通过应用程序上下文进行丰富。例如,如果某个服务的延迟突增,团队可以查看哪个 Pod 内存不足,并筛选来自该特定 Pod 的追踪数据以确认影响。
这些功能对于管理容器化应用程序至关重要,在这类环境中,Pod 会动态扩缩,容器可在数秒内启动或销毁。监控容器有助于确保工程师在故障部署和配置不足的集群影响用户体验之前就发现它们。
RUM 是最终用户体验监控 (EUEM) 和数字体验监控 (DEM) 的一个子集,是一种通过观察真实用户在生产环境中使用应用程序来测量性能和用户体验的技术。它捕获用户浏览器和移动应用程序中实际发生的情况,包括真实网络环境、设备和位置。
RUM 通常通过向应用程序注入小脚本或软件开发工具包 (SDK) 来工作,并自动从每个用户会话中收集耗时和错误数据。它们还会捕获上下文信息,如浏览器类型、设备、操作系统、网络类型、地理区域,有时还包括用户标识符或会话 ID。
然后,脚本将监控数据发送到后端,在后端进行聚合和可视化处理,以便 IT 团队可以深入探究性能在不同流量细分中的差异。例如,开发人员可以比较移动端和桌面端用户的页面加载时间,或者比较使用高速光纤连接的用户与使用慢速蜂窝网络用户的情况。他们还可以看到哪些页面或用户旅程最慢,以及每个流程中发生错误的频率。
由于 RUM 反映的是真实情况(缓慢的家庭 Wi-Fi、移动网络、老旧设备),它是理解客户体验并将系统性能与用户结果直接关联起来的有用诊断工具。它对于发现仅在特定条件下或特定平台上发生的问题尤其有价值。
合成监控是另一种 EUEM,它使用从全球不同地点运行的自动化脚本,按固定的时间表模拟用户对应用程序的交互操作(登录、搜索、将商品加入购物车、完成结账)。
工程师创建定义精确操作序列的脚本,例如导航到某个 URL、填写表单、点击按钮或发起 API 调用,这些脚本通过环境中真实的云托管浏览器或智能体重复运行(每 5 分钟、每小时或按自定义计划)。每次运行都会产生指标(总事务时间、逐步耗时、应用程序可用性)和过程记录(故障的屏幕截图或视频)。
随着时间的推移,持续运行相同的脚本可为应用程序性能建立可靠的基线。如果通常耗时 3 秒的结账脚本突然耗时 12 秒或在支付步骤失败,即使还没有真实用户投诉,IT 团队也会立即收到告警。
因此,合成监控有助于在真实用户发现问题之前就将其捕获,也可用于在正常工作时间之外或用户基数较小的地区监控系统性能。
与许多 IT 管理实践一样,应用程序性能监控正在整合更新的技术,以帮助扩展其优势和用例。
例如,许多领先的监控工具部署了依赖人工智能 (AI) 和 ML 技术的尖端手段,以实时关联和分析数据。AI 驱动的工具能够筛选海量遥测数据——或者更进一步,基于这些数据预测系统中可能发生的情况。
通过使用预测性分析,DevOps 团队可以在潜在问题影响应用程序性能之前进行预测。预测性分析利用基于历史遥测数据训练的 ML 模型,来检测表明性能降级的细微模式(例如,延迟逐渐飙升或错误率上升)。
预测性分析工具还可以通过对应用程序施加假设的压力源(如突发流量激增或依赖项中断)进行建模,来模拟“假设”场景。这些模拟借鉴历史数据模式和实时输入来推演结果,生成概率性预测(例如,“如果 CPU 利用率明天达到 90%,延迟有 80% 的可能性超过 500 毫秒”)。
AI 驱动的应用程序性能监控的演进表明,其正从被动、“仅异常检测”的方法,转向能够预测和预防中断的完全主动式系统。
云环境和边缘计算也在改变应用程序性能监控。这些技术要求工具能够处理云原生应用程序架构(例如软件即服务 (SaaS) 应用程序),以及远超传统本地数据中心的动态 IT 环境。
如今,先进的监控系统优先考虑对容器化工作负载、无服务器函数和微服务的可扩展性和实时可见性。
它们能够跨服务网格和自动扩缩集群进行端到端请求追踪,捕获每一跳的应用程序性能问题,而无需消耗额外资源。它们融合了分布式追踪和高级上下文传播,以跨服务保留请求元数据,有助于在复杂的 IT 生态系统中进行准确的性能瓶颈检测。
许多先进的监控系统还为云原生技术栈中常见的语言提供自动注入监控功能。此功能有助于 IT 团队减少设置时间,并将性能检查无缝融入持续集成/持续交付 (CI/CD) 管道。
现代应用程序性能监控工具为企业提供了诸多好处。
应用程序性能监控工具将性能洞察直接集成到开发工具中,因此开发人员可以在代码生命周期的早期发现问题,并更快地调试应用程序。
监控工具通常可以主动预防缺陷,帮助企业避免代价高昂的停机,并保持应用程序的可靠性和可用性。
监控平台跟踪 CPU、内存和网络使用情况以识别低效环节,使团队能够智能地扩展基础设施并降低成本,而不会牺牲速度或可靠性。
性能监控平台观察页面加载时间、错误和用户交互,以帮助企业满足服务级别协议 (SLA),并为最终用户交付流畅、响应迅速的应用程序。
当今的监控工具通常支持全栈可观测性,为 IT 团队提供对应用程序服务器、数据库、API 和第三方服务的清晰视图,并支持明智的优化和扩展策略。
利用 AI 和自动化的强大功能,主动解决整个应用程序堆栈中的问题。
借助人工智能驱动的可观测性,最大限度提高运营弹性,并确保云原生应用正常运行。
使用生成式 AI 增强 IT 自动化和运营,将 IT 基础设施的每个方面与业务优先事项保持一致。