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 执行角色
选择合适的 Rotel Lambda Extension layer
选择与 Lambda runtime 架构匹配的 Lambda layer。{version} 字段
取决于你要部署到的 AWS 区域。请查看 releases
页面,获取与你所在区域对应的最新版本号。| 架构 | ARN |
|---|---|
| x86-64/amd64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version} |
| arm64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64:{version} |
- 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
将 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
配置该扩展以导出到 ClickStack
Rotel Lambda Extension 通过环境变量进行配置。你需要配置 OTLP 导出器的端点,使其指向你的 ClickStack 实例。以下示例假设你的 AWS Lambda 函数能够访问该 ClickStack 实例。基本配置 (环境变量)
将这些环境变量添加到你的 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 个) 获取,因此后续调用不会受到影响。
在 HyperDX 中验证日志
配置完成后,登录 HyperDX (ClickStack 的 UI) ,确认日志已正常流入:在日志中查看以下关键属性:service.name:你的 Lambda 函数名称faas.name:AWS Lambda 函数名称faas.invocation_id:唯一调用 IDcloud.provider:“aws”cloud.platform:“aws_lambda”
禁用 CloudWatch 日志 (成本优化)
从执行角色中移除 CloudWatch 权限
- 打开 AWS 控制台并进入 AWS Lambda
- 进入您的 Lambda 函数
- 选择 Configuration → Permissions
- 点击执行角色名称以打开 IAM 控制台
- 编辑该角色并移除所有
logs:*操作:- 如果使用自定义策略,请编辑并移除
logs:CreateLogGroup、logs:CreateLogStream和logs:PutLogEvents - 如果使用 AWS 托管策略
AWSLambdaBasicExecutionRole,请将其从该角色中移除
- 如果使用自定义策略,请编辑并移除
- 保存该角色
添加 OpenTelemetry 自动插桩
选择对应语言的插桩 layer
AWS 为多种语言提供了 OpenTelemetry 自动插桩 layer:| Language | Layer ARN Pattern |
|---|---|
| Node.js | arn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-{version} |
| Python | arn:aws:lambda:{region}:901920570463:layer:aws-otel-python-{arch}-ver-{version} |
| Java | arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-{arch}-ver-{version} |
在 HyperDX 中验证链路追踪
调用函数后:- 前往 HyperDX 中的 Traces 视图
- 你应能看到包含 Lambda 函数 spans 的链路追踪
- 链路追踪会通过
trace_id和span_id属性与日志关联起来
示例应用
- Python + ClickHouse:采用手动 OpenTelemetry 埋点的 Python 应用,直接将链路追踪和日志发送到 ClickHouse
加入 Rotel 社区
其他资源
- Rotel Lambda Extension:源代码及详细文档
- Rotel Core:为该扩展提供支持的轻量级 OTel 数据平面