随着云计算和无服务器架构的兴起,越来越多的企业开始使用 Serverless 技术来构建应用程序。Serverless 不仅可以节省开发人员的时间和精力,还可以提高应用程序的伸缩性和可用性。但是,随着应用程序规模的增长,如何有效地监控应用程序的性能成为了一个重要的问题,这也是本文所要解决的问题。
Serverless 应用的性能监控原理
Serverless 应用程序由一系列云服务以事件驱动的方式组成,这些服务在需要时动态分配和释放资源,因此无法通过传统的服务器监控工具来监控。在这种情况下,监控 Serverless 应用程序性能的方法需要有所不同。以下是一些可用的技术来监控 Serverless 应用程序性能:
日志
Serverless 应用程序的日志可以提供丰富的信息来监控其性能。开发人员可以在应用程序的各个部分发出日志消息,并将其发送到云日志存储库中。这些日志包含应用程序内部执行步骤、请求和响应详细信息以及错误信息等。开发人员可以在应用程序中设置日志水平以控制日志量。监控工具可以通过解析这些日志文件来提取详细的性能信息。
跟踪
Serverless 应用程序的跟踪可以提供调用的详细信息和资源使用率等。跟踪结果显示从开始到结束一次请求调用的所有步骤和资源使用率。例如,当应用程序从事件网格中接收事件时,开发人员可以为每个事件设置唯一的跟踪标识符。在应用程序的其他部分编写日志记录代码,该代码将此标识符添加到每个日志消息中。当监视程序检索日志消息并解析它们时,它将所有具有相同跟踪标识符的日志消息组合到一起,以显示完整的资源使用率以及事件流的响应时间。
应用程序分析
Serverless 应用程序分析可以提供准确的实时性能数据。分析器可以监视应用程序中的多个应用程序程序接口(API),确定 API 的服务质量、响应时间和错误率。通过实时监视和分析应用程序消息,分析器可以提供有关应用程序的实际使用和性能的深入分析。通过分析器收集和分析的信息可以指导开发人员进行性能调优以及容量规划。
Serverless 应用的性能监控实现
本节将介绍基于日志和跟踪进行监控的实现方法。在此方法中,我们将使用亚马逊 Web Services(AWS)作为我们 Serverless 应用程序的云提供商。
日志
AWS 云提供商提供了名为 CloudWatch 的服务,可以用来收集、存储和监控日志。每个 AWS Lambda 函数都可以将其日志发送到 CloudWatch 中。CloudWatch 还可以报告性能指标(包括函数的执行时间和错误率),并在出现问题时向你发送警报。
以下是实现日志监控的步骤:
- 创建 Lambda 函数并将其设为向 CloudWatch 发送日志。代码示例如下:
-- -------------------- ---- ------- ------ ------- ------ ---- ------ ----- ------ - ------------------- ----------------------------- --- --------------------- --------- --------------------- ------ - - ----------------- --- ------ - ------------- ---- ------- ----------------- ---- ---------- ------------------ ----- -
在 lambda_handler
函数的开头,我们定义了一个全局的 logger
对象,并且将其设定为记录 INFO
级别的日志。在函数的主体中,我们优先进行了日志记录的操作。
创建 CloudWatch 日志存储:
使用 AWS 管理控制台,你可以创建一个 CloudWatch 日志存储。你需要指定日志群组的名称以及用于标识不同日志流的前缀。每个 AWS Lambda 函数都会被配置为使用特定的 CloudWatch 日志群组。
将 Lambda 函数配置为将日志发送到 CloudWatch:
在你的服务和函数页面上,选择要监视的 AWS Lambda 函数并选择
Monitoring
标签,然后在设置中将Enable active tracing
和Enable enhanced monitoring
选项打开。
安装 CloudWatch 代理程序帮助了日志流的发送。
跟踪
AWS 云提供商提供了名为 X-Ray 的服务,可以用来分析分布式应用程序的性能并提供该方面的数据以及结论。
以下是实现跟踪监控的步骤:
创建 AWS Lambda 函数并添加 X-Ray SDK:
首先,我们需要在 AWS Lambda 函数代码中引入 X-Ray SDK:
import boto3 boto3.setup_default_session(profile_name='<AWS PROFILE NAME>') from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all patch_all()
在这段代码中,我们使用了
boto3
作为 AWS SDK 来演示您如何使用 AWS X-Ray SDK 来获取跟踪。boto3.setup_default_session
方法用于设置最终使用 boto3 的 AWS 账户。正如你所看到的,你可以使用一个命名的 AWS CLI 配置文件来设置 AWS ID 的身份验证配置:from aws_xray_sdk.core import xray_recorder
创建了一个 X-ray SDK 的xray_recorder
对象用来记录新的跟踪。patch_all()
方法将用于跟踪 AWS 相关产品的客户端库打补丁。在 Lambda 函数中添加跟踪:
使用 AWS X-Ray SDK 的
xray_recorder
对象来记录新的跟踪,示例代码如下:-- -------------------- ---- ------- --------------------------------------- --- --------------------- --------- --------------- ----- ------- ------- - ---------------- ------- - ---------------- -------- - - --- - ------ --------
在这个例子中,我们用
@xray_recorder.capture('LambdaHandler')
装饰器对lambda_handler
函数打上了跟踪标记。启用 X-Ray 跟踪:
若要启用 X-Ray 跟踪,只需在 AWS 控制台中设置对应 AWS Lambda 函数的
Active tracing
Toggle 状态为 "开"。使用 X-Ray 分析跟踪信息:
跟踪信息会传递到 AWS X-Ray 控制台上,你可以在控制台中查看所有的跟踪数据:
X-Ray 控制台还提供了分析和可视化分布式应用程序的能力。如下图所示的图表提供了应用程序的模块化视图,并帮助您确定瓶颈和性能问题。
结论
Serverless 应用程序的性能监控需要使用专门的技术和工具。日志、跟踪和应用程序分析可用于监视 Serverless 应用程序的性能。你可以使用 AWS 云提供商提供的 CloudWatch 和 X-Ray 服务来监控 Serverless 应用程序的性能。但是,需要注意的是,您需要经常监控应用程序的性能,在测试和生产环境之间进行比较,并进行相关的优化和调整来确保应用程序的高性能和可伸缩性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6729d01b2e7021665e25b995