简而言之使用 OpenTelemetry Collector 在 ClickStack 中收集并可视化 EC2 系统日志,同时自动富集 EC2 元数据 (实例 ID、区域、AZ、实例类型) 。包含演示数据集和预置仪表板。
与现有 EC2 实例集成
在同一台 EC2 实例上运行 ClickStack?如果 ClickStack 与要监控日志的目标运行在同一台 EC2 实例上,可以采用类似于 通用主机日志指南 中的一体化方案。将
/var/log 挂载到 ClickStack 容器中,并在自定义配置中添加 resourcedetection 处理器,以自动采集 EC2 元数据。本指南重点介绍更常见、也更适合生产部署的分布式架构。前置条件
- ClickStack 实例已在运行 (可以是本地部署、云端或本机环境)
- EC2 实例已在运行 (Ubuntu、Amazon Linux 或其他 Linux 发行版)
- EC2 实例到 ClickStack 的 OTLP 端点具备网络连通性 (HTTP 使用 4318 端口,gRPC 使用 4317 端口)
- 可访问 EC2 实例元数据服务 (默认启用)
验证是否可访问 EC2 元数据
在 EC2 实例上,验证元数据服务是否可访问:- 实例元数据服务已启用
- IMDSv2 没有被安全组 (Security Group) 或网络 ACL 拦截
- 你是在 EC2 实例本机上运行这些命令
在实例内部可通过
http://169.254.169.254 访问 EC2 元数据。OpenTelemetry 的 resourcedetection 处理器会使用此端点,自动为日志补充云环境上下文信息。创建 collector 配置
在/etc/otelcol-contrib/config.yaml 处为 OpenTelemetry Collector 创建配置文件:- 现代 Linux(Ubuntu 24.04+)
- 旧版 Linux(Amazon Linux 2、RHEL 和较旧版本的 Ubuntu)
在配置中替换以下内容:
YOUR_CLICKSTACK_HOST:ClickStack 所在主机的主机名或 IP 地址- 如需进行本地测试,你可以使用 SSH 隧道 (请参阅故障排查部分)
- 从标准路径读取系统日志文件 (Ubuntu 为
/var/log/syslog,Amazon Linux/RHEL 为/var/log/messages) - 解析 syslog 格式,提取结构化字段 (时间戳、主机名、单元/服务、PID、消息)
- 使用
resourcedetection处理器自动识别并添加 EC2 元数据 - 如有,还可选择包含 EC2 标签 (Name、Environment、Team)
- 通过 OTLP HTTP 向 ClickStack 发送日志
EC2 元数据富集
resourcedetection 处理器会自动为每条日志添加以下属性:cloud.provider: “aws”cloud.platform: “aws_ec2”cloud.region: AWS 区域 (例如:“us-east-1”)cloud.availability_zone: 可用区 (例如:“us-east-1a”)cloud.account.id: AWS 账户 IDhost.id: EC2 实例 ID (例如:“i-1234567890abcdef0”)host.type: 实例类型 (例如:“t3.medium”)host.name: 实例的主机名
运行 Collector
启动 OpenTelemetry Collector:用于生产环境将 collector 配置为以 systemd 服务方式运行,以便在系统启动时自动启动,并在发生故障时自动重启。详情请参阅 OpenTelemetry Collector 文档。
在 HyperDX 中验证日志
采集器运行后,登录 HyperDX,确认日志已连同 EC2 元数据一起流入:- 进入搜索视图
- 将 source 设置为
Logs - 使用
source:ec2-host-logs进行过滤 - 点击一条日志记录将其展开
- 确认你能在资源属性中看到 EC2 元数据:
cloud.providercloud.regionhost.id(实例 ID)host.type(实例类型)cloud.availability_zone
演示数据集
下载示例数据集
下载示例日志文件:- 系统启动过程
- SSH 登录活动 (成功和失败的尝试)
- 安全事件 (暴力破解攻击及 fail2ban 的响应)
- 计划维护 (cron 作业、anacron)
- 服务重启 (rsyslog)
- 内核消息和防火墙活动
- 正常运行与重要事件交织出现
创建测试 collector 的配置
创建一个名为ec2-host-logs-demo.yaml 的文件,并添加以下配置:出于演示目的,我们通过
resource 处理器手动添加 EC2 元数据。在生产环境中,如果使用真实的 EC2 实例,请改用 resourcedetection 处理器,它会自动查询 EC2 元数据 API。在 HyperDX 中验证日志
collector 运行后:- 打开 HyperDX 并登录账户 (你可能需要先创建账户)
- 进入搜索视图,并将 source 设置为
Logs - 将时间范围设置为 2025-11-10 00:00:00 - 2025-11-13 00:00:00
- 按
source:ec2-demo过滤 - 展开一条日志,在资源属性中查看 EC2 元数据
时区显示HyperDX 会按你浏览器的本地时区显示时间戳。演示数据覆盖 2025-11-11 00:00:00 - 2025-11-12 00:00:00 (UTC)。较大的时间范围可确保无论你位于何处,都能看到演示日志。看到日志后,你可以将范围缩小到 24 小时,以获得更清晰的可视化效果。
- 实例 ID:
i-0abc123def456789 - 区域:
us-east-1 - 可用区:
us-east-1a - 实例类型:
t3.medium
仪表盘和可视化
仪表盘配置
导入预置仪表盘
- 打开 HyperDX,进入“仪表盘”部分
- 点击右上角省略号菜单下的 Import Dashboard
- 上传
host-logs-dashboard.json文件,然后点击 Finish Import
查看仪表盘
仪表盘创建后,其中的所有可视化都已预先配置好:你可以按 EC2 上下文筛选仪表盘中的可视化:cloud.region:us-east-1- 显示特定区域的日志host.type:t3.medium- 按实例类型过滤host.id:i-0abc123def456- 显示特定实例的日志
对于演示数据集,请将时间范围设置为 2025-11-11 00:00:00 - 2025-11-12 00:00:00 (UTC) (请根据你的本地时区进行调整) 。导入的仪表盘默认不会指定时间范围。
故障排查
日志中未显示 EC2 元数据
- 实例元数据服务已启用
- IMDSv2 未被安全组 (Security Group) 拦截
- 采集器运行在 EC2 实例本机上
HyperDX 中未出现日志
日志解析有误
Collector 无法作为 systemd 服务启动
- 环境变量中的 API 密钥设置不正确
- 配置文件存在语法错误
- 读取日志文件时存在权限问题
后续步骤
- 为关键系统事件 (服务故障、身份验证失败、磁盘告警) 设置告警
- 按 EC2 元数据属性 (区域、实例类型、实例 ID) 进行过滤,以监控特定资源
- 将 EC2 主机日志与应用日志关联起来,以便进行更全面的故障排查
- 为安全监控 (SSH 尝试、sudo 使用情况、防火墙拦截) 创建自定义仪表盘