菜单
开源

AWS Lambda 性能分析扩展

Pyroscope AWS Lambda 扩展是一个强大的工具,用于对 AWS Lambda 函数进行性能分析,同时确保对延迟的影响最小化。这种性能分析对于优化您的函数至关重要。

为何要对 AWS Lambda 函数进行性能分析?

AWS Lambda 函数虽然功能强大且灵活,但如果管理不当,可能会导致高昂的成本。像 AWS Lambda 这样的无服务器架构可能会掩盖性能问题。由于 Lambda 函数按照执行时间和分配的内存计费,代码效率低下可能导致更高的成本。通常,这些成本会在不知不觉中累积,原因如下:

  • 细粒度计费:Lambda 函数按毫秒计费,这可能使得微小的效率低下最初看起来微不足道。然而,当扩展到数千或数百万次调用时,这些效率低下可能会导致巨大的成本。

  • 复杂的性能特征:Lambda 函数可能与各种服务和资源交互,这使得精确定位性能瓶颈变得具有挑战性。

  • 可变负载:AWS Lambda 的无服务器特性意味着函数在不同时间可能处理不同的负载,这使得针对每种场景进行优化变得困难。

对 Lambda 函数进行性能分析有助于识别这些隐藏的性能瓶颈,使开发人员能够优化代码以兼顾性能和成本。有效的性能分析可以揭示低效的代码路径、不必要的内存使用以及可以缩短执行时间的区域。通过解决这些问题,组织可以显著降低 AWS 账单,提高应用程序响应能力,并确保更有效地利用资源。

架构

此扩展在与 Lambda 函数相同的网络命名空间中运行一个中继服务器,确保新增延迟最小化。

Lambda Extension Architecture

更多详情,请参阅“Building Extensions for AWS Lambda”博客文章

设置 Pyroscope Lambda 扩展

要设置 Pyroscope Lambda 扩展,您需要:

  1. 配置您的 Lambda 函数
  2. 设置您的环境变量
  3. 集成 Pyroscope SDK

配置您的 Lambda 函数

配置您的 Lambda 函数使用此扩展。在我们的发布页面查找最新版本。

设置环境变量

使用以下环境变量配置扩展

环境变量默认值描述
PYROSCOPE_REMOTE_ADDRESShttps://profiles-prod-001.grafana.net中继 Pyroscope 数据的目标地址
PYROSCOPE_BASIC_AUTH_USER""HTTP Basic authentication 用户
PYROSCOPE_BASIC_AUTH_PASSWORD""HTTP Basic authentication 密码
PYROSCOPE_SELF_PROFILINGfalse是否对扩展本身进行性能分析
PYROSCOPE_LOG_LEVELinfo日志级别(error, info, debug, trace
PYROSCOPE_TIMEOUT10sHTTP 客户端超时(Go duration 格式)
PYROSCOPE_NUM_WORKERS5中继 Worker 数量
PYROSCOPE_TENANT_ID""Pyroscope 租户 ID(用于多租户)

集成 Pyroscope SDK

Pyroscope AWS Lambda 扩展兼容所有现有的 Pyroscope SDK。以下是一些关键注意事项:

  • 在设置 AWS Lambda handler 之前初始化 SDK。
  • 确保 Pyroscope 服务器地址配置为 https://:4040。

请注意,SDK 包不会自动包含在扩展层中。对于 Java、Python、Node.js 和 Ruby,您必须将 SDK 包包含在函数部署包中或将其添加为 Lambda 层。有关进一步说明,请参阅 AWS Lambda 文档中针对特定运行时的详细指南

对于 Golang Lambda 函数,请按如下方式集成 Pyroscope SDK

Go
func HandleRequest(ctx context.Context) (string, error) {
    return "Hello world!", nil
}

func main() {
    pyroscope.Start(pyroscope.Config{
        ApplicationName: "simple.golang.lambda",
        ServerAddress:   "https://:4040",
    })
    lambda.Start(HandleRequest)
}

simple.golang.lambda 替换为您的应用程序名称。

用例

设置完成后,您可以使用 Pyroscope UI 分析 Lambda 函数的数据,以便进行性能优化。更多详情,请访问我们的Pyroscope AWS Lambda Extension 博客文章

将数据发送到 Pyroscope

要配置扩展进行数据传输

bash
PYROSCOPE_REMOTE_ADDRESS="<URL>"
PYROSCOPE_BASIC_AUTH_USER="<User>"
PYROSCOPE_BASIC_AUTH_PASSWORD="<Password>"
# PYROSCOPE_TENANT_ID="<TenantID>" # For multi-tenant mode

请相应地替换占位符。要将数据发送到 Grafana,请使用您的 Grafana Stack 用户和 API 密钥进行身份验证。