TL;DR本指南介绍如何使用 Rotel Lambda Extension 收集并将函数日志、扩展日志以及 OpenTelemetry 数据直接转发到 ClickHouse,从而通过 ClickStack 监控 AWS Lambda 函数。你将了解如何:
- 将 Rotel Lambda Extension layer 部署到 Lambda 函数
- 配置该扩展,将日志和链路追踪导出到 ClickStack
- 可选择禁用 CloudWatch 日志以降低成本
与现有 Lambda 函数集成
前置条件
- 正在运行的 ClickStack 实例
- 需要监控的 AWS Lambda 函数
- 已配置 AWS CLI,并具有相应权限
- 具有添加 layer 权限的 Lambda 执行角色
1
选择合适的 Rotel Lambda Extension layer
选择与 Lambda runtime 架构匹配的 Lambda layer。
{version} 字段
取决于你要部署到的 AWS 区域。请查看 releases
页面,获取与你所在区域对应的最新版本号。可用区域:
- us-east-, us-west-
- eu-central-1, eu-north-1, eu-west-
- ca-central-1
- ap-southeast-, ap-northeast-
- ap-south-1
- sa-east-1
2
将 Rotel layer 添加到 Lambda 函数
在这些示例中,请将
{arch}、{region} 和 {version} 替换为上方对应的值。选项 1:AWS Console
- 打开 AWS Lambda 控制台
- 导航到你的 Lambda 函数
- 滚动到 Layers 部分,然后点击 Add a layer
- 选择 Specify an ARN
- 输入 Rotel layer 的 ARN:
- 点击 Add
选项 2:AWS CLI
选项 3:AWS SAM
3
配置该扩展以导出到 ClickStack
Rotel Lambda Extension 通过环境变量进行配置。你需要配置 OTLP 导出器的端点,使其指向你的 ClickStack 实例。以下示例假设你的 AWS Lambda 函数能够访问该 ClickStack 实例。然后将环境变量设为指向该文件:AWS Parameter Store 示例:所需的 IAM 权限:将以下权限添加到您的 Lambda 执行角色中:对于 Secrets Manager:若使用 Parameter Store:
基本配置 (环境变量)
将这些环境变量添加到你的 Lambda 函数中:高级配置 (使用 .env 文件)
对于更复杂的配置,请在 Lambda 函数部署包中创建一个rotel.env 文件:rotel.env:使用 AWS Secrets Manager 或 Parameter Store
对于生产环境部署,建议将 API 密钥等敏感信息存储在 AWS Secrets Manager 或 Parameter Store 中:AWS Secrets Manager 示例:用于获取机密信息的 AWS API 调用会使冷启动延迟增加 100–150 毫秒。机密信息只会在初始化时分批 (每批最多 10 个) 获取,因此后续调用不会受到影响。
4
测试集成
调用你的 Lambda 函数,验证日志是否已发送到 ClickStack:检查 Lambda 日志中是否有报错:
5
在 HyperDX 中验证日志
配置完成后,登录 HyperDX (ClickStack 的 UI) ,确认日志已正常流入:在日志中查看以下关键属性:
service.name:你的 Lambda 函数名称faas.name:AWS Lambda 函数名称faas.invocation_id:唯一调用 IDcloud.provider:“aws”cloud.platform:“aws_lambda”
禁用 CloudWatch 日志 (成本优化)
1
从执行角色中移除 CloudWatch 权限
- 打开 AWS 控制台并导航到 AWS Lambda
- 导航到您的 Lambda 函数
- 选择 Configuration → Permissions
- 点击执行角色名称以打开 IAM 控制台
- 编辑该角色并移除所有
logs:*操作:- 如果使用自定义策略,请编辑并移除
logs:CreateLogGroup、logs:CreateLogStream和logs:PutLogEvents - 如果使用 AWS 托管策略
AWSLambdaBasicExecutionRole,请将其从该角色中移除
- 如果使用自定义策略,请编辑并移除
- 保存该角色
2
验证 CloudWatch 日志记录已禁用
再次调用您的函数,并确认:
- 不会创建新的 CloudWatch 日志流
- 日志仍会继续出现在 ClickStack/HyperDX 中
添加 OpenTelemetry 自动插桩
1
选择对应语言的插桩 layer
2
将两个 layer 都添加到函数中
同时添加 Rotel extension layer 和插桩 layer:
3
配置自动插桩
设置 对于 Python:对于 Java:
AWS_LAMBDA_EXEC_WRAPPER 环境变量以启用自动插桩:对于 Node.js:4
在 HyperDX 中验证链路追踪
调用函数后:
- 前往 HyperDX 中的 Traces 视图
- 你应能看到包含 Lambda 函数 spans 的链路追踪
- 链路追踪会通过
trace_id和span_id属性与日志关联起来
示例应用
- Python + ClickHouse:采用手动 OpenTelemetry 埋点的 Python 应用,直接将链路追踪和日志发送到 ClickHouse
加入 Rotel 社区
其他资源
- Rotel Lambda Extension:源代码及详细文档
- Rotel Core:为该扩展提供支持的轻量级 OTel 数据平面