监控 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监控

监控是收集不同指标(例如 CPU 和内存)并将其存储在时间序列数据库(例如适用于 Prometheus 的 Amazon 托管服务)中的过程。监控系统可以是基于推送的,也可以是基于拉动的。在基于推送的系统中,源会定期将指标推送到时间序列数据库。在基于拉取的系统中,抓取器从各种来源抓取指标并将其存储在时间序列数据库中。开发人员可以分析指标,筛选指标,并随时间推移绘制这些指标,以实现性能可视化。成功实施监控可以分为两大领域:应用程序和基础架构。

对于应用程序开发人员来说,以下指标至关重要:

  • 延迟-收到响应所花费的时间

  • 请求吞吐量-每秒处理的请求总数

  • 请求错误率-错误总数

捕获业务交易中涉及的每种资源(例如应用程序容器、数据库)的资源利用率、饱和度和错误计数。例如,在监控 CPU 使用率时,您可以跟踪性能测试运行期间的平均 CPU 利用率、平均负载和峰值负载。当资源在 stress testing 期间达到饱和,但在性能运行期间可能在较短的时间内未达到饱和状态时。

指标

应用程序可以使用不同的执行器(例如弹簧启动执行器)来监控其应用程序。这些生产级库通常会公开 REST 端点,用于监控有关正在运行的应用程序的信息。这些库可以监控底层基础架构、应用程序平台和其他资源。如果任何默认指标不符合要求,则开发者必须实现自定义指标。自定义指标可以帮助跟踪无法通过默认实现的数据进行跟踪的业务关键绩效指标 (KPI)。例如,您可能想要跟踪业务操作,例如第三方 API 集成延迟或已完成的交易总数。

基数

基数是指指标的唯一时间序列的数量。标记指标是为了提供更多信息。例如,跟踪特定 API 请求计数的基于 REST 的应用程序表示基数为 1。如果您添加用户标签来标识每个用户的请求数,则基数会随着用户数量的增加而成比例增加。通过添加创建基数的标签,您可以按不同的组对指标进行切片和切块。为正确的用例使用正确的标签很重要,因为基数会增加后端监控时间序列数据库中指标序列的数量。

解决方案

在典型的监控设置中,监控应用程序被配置为定期从应用程序中获取指标。抓取的周期性定义了监控数据的粒度。由于可用的数据点更多,因此以较短的时间间隔收集的指标往往可以更准确地了解性能。但是,存储的条目越多,时间序列数据库的负载就会增加。通常,60 秒的粒度是标准分辨率,1 秒是高分辨率。

DevOps 球队

应用程序开发人员经常要求 DevOps 工程师设置监控环境,以可视化基础架构和应用程序的指标。 DevOps 工程师必须设置一个可扩展的环境,并支持应用程序开发人员使用的数据可视化工具。这包括从不同来源抓取监控数据,然后将数据发送到中央时间序列数据库,例如适用于 Prometheus 的 Amazon 托管服务

监控后端

监控后端服务支持指标数据的收集、存储、查询和可视化。它通常是一个时间序列数据库,例如适用于 Prometheus 的亚马逊托管服务或 InfluxDB。 InfluxData 使用服务发现机制,监控收集器可以从不同的来源收集指标并将其存储。在进行性能测试时,存储指标数据很重要,以便日后可以对其进行搜索。我们建议至少保存 15 天的指标数据。但是,将指标存储更长的时间并不会带来显著的好处,并且会导致不必要的存储成本。由于性能测试可以生成大量指标,因此在提供快速查询性能的同时扩展指标基础架构非常重要。监控后端服务提供了一种查询语言,可用于查看指标数据。

可视化

提供可视化工具,这些工具可以显示应用程序数据,从而提供有意义的见解。 DevOps 工程师和应用程序开发人员应学习监控后端的查询语言,并密切合作生成可重复使用的仪表板模板。在仪表板上,包括延迟和错误,同时还显示基础架构和应用程序资源的资源利用率和饱和度。

实现监控基础架构的自动化

与日志记录类似,自动安装和运行监控基础架构非常重要,这样您才能适应不同应用程序的不同要求。使用 IaC 工具配置监控基础设施的后端。然后,您可以将监控基础设施配置为共享服务,也可以作为特定应用程序的独立定制部署。

使用 CD 管道自动执行以下操作:

  • 按需部署监控基础架构,并在不需要时将其拆除。

  • 更新监控配置以筛选或聚合指标。

  • 部署应用程序仪表板。

监控工具

适用于 Prometheus 的 Amazon 托管服务是一项与 Prometheus 兼容的监控服务,用于监控容器基础设施和容器的应用程序指标,您可以使用它来安全地大规模监控容器环境。有关更多信息,请参阅博客文章 Prometheus 亚马逊托管服务入门

Amazon 在上 CloudWatch 提供全栈监控。 AWS CloudWatch 支持 AWS 原生和开源解决方案,因此您可以随时了解技术堆栈中正在发生的事情。

原生 AWS 工具包括以下内容:

Amazon CloudWatch 提供专门构建的功能,可解决特定用例,例如通过 Container Insights 进行容 CloudWatch 器监控。这些功能是内置的, CloudWatch 因此您可以设置日志、指标收集和监控。

对于您的容器化应用程序和微服务,请使用 Container Insights 收集、汇总和汇总指标和日志。Container Insights 适用于亚马逊弹性容器服务 (Amazon ECS)、亚马逊弹性 Kubernetes Service (Amazon EKS) 和亚马逊弹性计算云 (Amazon EC2) 上的 Kubernetes 平台。Container Insights 以嵌入式指标格式将数据作为性能日志事件收集。这些性能日志事件条目使用结构化的 JSON 架构,该架构支持大规模的高基数数据摄取和存储。

有关使用 Amazon EKS 实现容器见解的信息,请参阅博客文章使用 AWS Distro 为亚马逊 EKS Fargate 介绍亚马逊 CloudWatch 容器见解。 OpenTelemetry