简而言之使用 OpenTelemetry Collector 的 CloudWatch 接收器 将 AWS CloudWatch 日志转发到 ClickStack。支持指定名称的日志组和自动发现。包含演示数据集和预置仪表板。
概述
- 在统一平台中结合指标和链路追踪分析日志
- 通过 ClickHouse 的 SQL 接口查询日志
- 通过归档日志或缩短 CloudWatch 保留期来降低成本
与现有 CloudWatch 日志组集成
前置条件
- 正在运行的 ClickStack 实例
- 拥有 CloudWatch 日志组的 AWS 账户
- 具有相应 IAM 权限的 AWS 凭据
与基于文件的日志集成 (nginx、Redis) 不同,CloudWatch 需要运行一个独立的 OpenTelemetry 采集器 来轮询 CloudWatch API。由于该 采集器 需要 AWS 凭据和 API 访问权限,因此无法在 ClickStack 的一体化 image 中运行。
1
获取 ClickStack API key
OpenTelemetry Collector 会将数据发送到 ClickStack 的 OTLP 端点,而该端点需要进行身份验证。- 在你的 ClickStack URL 中打开 HyperDX (例如
http://localhost:8080) - 如有需要,请创建账户或登录
- 前往 Team Settings → API Keys
- 复制你的 摄取 API key
2
配置 AWS 凭证
将 AWS 凭证导出为环境变量。具体方法取决于所使用的身份验证类型:对于 AWS SSO 用户 (建议大多数组织使用) :YOUR_PROFILE_NAME 替换为你的 AWS SSO profile 名称 (例如:AccountAdministrators-123456789) 。对于使用长期凭证的 IAM 用户:YOUR_ACCOUNT_ID 替换为你的 AWS 账户 ID。3
配置 CloudWatch receiver
创建一个otel-collector-config.yaml 文件,并添加 CloudWatch receiver 配置。查看账户中可用的日志组
查看账户中可用的日志组
在编辑配置之前,先列出你所在区域中已有的日志组,这样你就可以选择实际存在的名称 (并确认区域是否正确) :示例输出:直接在下面示例 1 的 或者,如果你要使用的组共享同一个前缀 (这里是
groups.named 块中使用此列表中的名称。对于上述账户,named-groups 部分将变为:/aws-glue/) ,请使用示例 2,并设置 prefix: /aws-glue/,而不是逐个列出。/aws/lambda 为前缀的日志组:region:日志组所在的 AWS 区域poll_interval:检查新日志的频率 (例如1m、5m)max_events_per_request:每次请求拉取的最大日志事件数groups.autodiscover.limit:可发现的最大日志组数量groups.autodiscover.prefix:按前缀过滤日志组groups.named:显式列出要采集的日志组名称
${CLICKSTACK_API_KEY}→ 使用您之前设置的环境变量http://localhost:4318→ 您的 ClickStack 端点 (如果是远程运行,请改用您的 ClickStack 主机)us-east-1→ 您的 AWS 区域- Log group names/prefixes → 您实际使用的 CloudWatch 日志组
CloudWatch receiver 只会从最近的时间窗口中拉取日志 (具体取决于
poll_interval) 。首次启动时,它会从当前时间开始。默认情况下不会拉取历史日志。4
5
在 HyperDX 中验证日志
collector 运行后:- 打开 http://localhost:8080 中的 HyperDX (或你的 ClickStack URL)
- 导航到 日志 视图
- 等待 1–2 分钟,日志会显示出来 (具体取决于你的轮询间隔)
- 搜索来自你的 CloudWatch 日志组的日志
ResourceAttributes['aws.region']:你的 AWS 区域 (例如 “us-east-1”)ResourceAttributes['cloudwatch.log.group.name']:CloudWatch 日志组名称ResourceAttributes['cloudwatch.log.stream']:日志 stream 名称Body:实际的日志消息内容
演示数据集
1
下载示例数据集
- Lambda functions:支付处理、订单管理、身份验证
- ECS services:带有速率限制和超时控制的 API gateway
- Background jobs:带有重试模式的批次处理
2
3
4
验证演示数据
导入完成后:- 在 http://localhost:8080 打开 HyperDX 并登录 (如有需要请创建账户)
- 进入 Logs 视图
- 将时间范围设置为 2025-12-07 00:00:00 - 2025-12-08 00:00:00 (UTC)
- 搜索
cloudwatch-demo,或按LogAttributes['source'] = 'cloudwatch-demo'进行过滤
时区显示HyperDX 会按浏览器的本地时区显示时间戳。演示数据覆盖 2025-12-07 00:00:00 - 2025-12-08 00:00:00 (UTC)。请将时间范围设置为 2025-12-06 00:00:00 - 2025-12-09 00:00:00,以确保无论你身处何地都能看到演示日志。看到日志后,你可以将范围缩小到 24 小时,以获得更清晰的可视化效果。
仪表盘与可视化
1
仪表盘配置
2
导入仪表盘
- 打开 HyperDX,进入 Dashboards 部分
- 点击右上角省略号菜单中的 Import Dashboard
- 上传
cloudwatch-logs-dashboard.json文件,然后点击 Finish Import
3
查看仪表盘
仪表盘创建后,所有可视化内容都将预先配置好:对于演示数据集,请将时间范围设置为 2025-12-07 00:00:00 - 2025-12-08 00:00:00 (UTC) (请根据你的本地时区调整) 。导入后的仪表盘默认不会指定时间范围。
故障排查
HyperDX 中没有显示日志
logs:DescribeLogGroups 和 logs:FilterLogEvents 权限。
检查采集器日志中是否有错误:
The security token included in the request is invalid:凭证无效或已过期。对于临时凭证 (SSO) ,请确保已设置AWS_SESSION_TOKEN。operation error CloudWatch Logs: FilterLogEvents, AccessDeniedException:IAM 权限不足failed to refresh cached credentials, no EC2 IMDS role found:未设置 AWS 凭证环境变量connection refused:无法连接到 ClickStack 端点
只能看到旧日志,或看不到最近的日志
无效的安全令牌 / 凭证已过期
延迟过高或最近的日志缺失
poll_interval 为 1 分钟。如需近实时日志,请将其调小:
Collector 占用内存过多
后续步骤
- 为关键事件 (连接失败、错误激增) 设置告警
- 既然日志现已接入 ClickStack,可通过调整保留期限或归档到 S3 来降低 CloudWatch 成本
- 从采集器配置中移除噪声较多的日志组,以减少摄取量