AWS Lambda 性能分析扩展
Pyroscope AWS Lambda 扩展是一个强大的工具,用于对 AWS Lambda 函数进行性能分析,同时确保对延迟的影响最小化。这种性能分析对于优化您的函数至关重要。
为何要对 AWS Lambda 函数进行性能分析?
AWS Lambda 函数虽然功能强大且灵活,但如果管理不当,可能会导致高昂的成本。像 AWS Lambda 这样的无服务器架构可能会掩盖性能问题。由于 Lambda 函数按照执行时间和分配的内存计费,代码效率低下可能导致更高的成本。通常,这些成本会在不知不觉中累积,原因如下:
细粒度计费:Lambda 函数按毫秒计费,这可能使得微小的效率低下最初看起来微不足道。然而,当扩展到数千或数百万次调用时,这些效率低下可能会导致巨大的成本。
复杂的性能特征:Lambda 函数可能与各种服务和资源交互,这使得精确定位性能瓶颈变得具有挑战性。
可变负载:AWS Lambda 的无服务器特性意味着函数在不同时间可能处理不同的负载,这使得针对每种场景进行优化变得困难。
对 Lambda 函数进行性能分析有助于识别这些隐藏的性能瓶颈,使开发人员能够优化代码以兼顾性能和成本。有效的性能分析可以揭示低效的代码路径、不必要的内存使用以及可以缩短执行时间的区域。通过解决这些问题,组织可以显著降低 AWS 账单,提高应用程序响应能力,并确保更有效地利用资源。
架构
此扩展在与 Lambda 函数相同的网络命名空间中运行一个中继服务器,确保新增延迟最小化。
更多详情,请参阅“Building Extensions for AWS Lambda”博客文章。
设置 Pyroscope Lambda 扩展
要设置 Pyroscope Lambda 扩展,您需要:
- 配置您的 Lambda 函数
- 设置您的环境变量
- 集成 Pyroscope SDK
配置您的 Lambda 函数
配置您的 Lambda 函数使用此扩展。在我们的发布页面查找最新版本。
设置环境变量
使用以下环境变量配置扩展
环境变量 | 默认值 | 描述 |
---|---|---|
PYROSCOPE_REMOTE_ADDRESS | https://profiles-prod-001.grafana.net | 中继 Pyroscope 数据的目标地址 |
PYROSCOPE_BASIC_AUTH_USER | "" | HTTP Basic authentication 用户 |
PYROSCOPE_BASIC_AUTH_PASSWORD | "" | HTTP Basic authentication 密码 |
PYROSCOPE_SELF_PROFILING | false | 是否对扩展本身进行性能分析 |
PYROSCOPE_LOG_LEVEL | info | 日志级别(error , info , debug , trace ) |
PYROSCOPE_TIMEOUT | 10s | HTTP 客户端超时(Go duration 格式) |
PYROSCOPE_NUM_WORKERS | 5 | 中继 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
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
要配置扩展进行数据传输
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 密钥进行身份验证。