Log Watch 是一个定时运行的智能体技能,用于帮助没有 SIEM(安全信息和事件管理)系统或专职安全人员的小型 SaaS 团队审查生产日志并发送告警。其核心思路是:将团队已有的日志源接入一个定时任务,通过“确定性规则 + 小模型分类 + 强模型研判”的两阶段流水线降低噪音,最终将可疑事件以包含“为何触发”摘要和原始事件链接的形式通知人工处理。
主要能力
- 支持接入多种常见日志源,包括 Vercel 运行时/请求日志、Heroku 日志、Render 日志、Sentry 事件、Supabase/Neon/Postgres 认证表、Stripe 事件、Cloudflare 安全事件、AWS CloudTrail 以及 GitHub 审计日志等,并给出各源的只读读取方式。
- 内置 10 类起始检测规则(D1 至 D10),涵盖凭证填充/暴力破解、管理员权限授予、API 密钥创建/轮换、敏感路径探测、Webhook 签名失败、异常导出量、不可能旅行、Stripe 退款/争议激增、AWS IAM 变更/根登录、向收集器域名的出站请求等。每条规则附带信号描述、起始阈值和严重级别。
- 采用两阶段流水线:阶段 0 用确定性规则(计数、阈值、精确匹配)产生告警;阶段 1 用小模型(如 Claude Haiku)对规则无法判定的行进行分类;阶段 2 用强模型(如 Claude Sonnet)对已标记事件进行分组、去重和解释,但代码会强制执行阶段 0 设定的严重级别下限,模型无法压制确定性告警。
- 提供状态管理机制,包括检查点、开放告警、抑制列表等,支持去重键、重发页规则、抑制过期(最长 90 天)和心跳检测(D0),确保告警不会重复轰炸,也能发现监控自身静默的问题。
- 告警分级发送:严重事件通过 PagerDuty 或 Pushover 唤醒人员,高严重事件通过 PagerDuty/Slack 在一小时内响应,中等级别在工作时间发 Slack,低级别汇总为每日摘要。
使用方式
- 确认用户拥有或运营待读取日志的系统,且读取行为在职责范围内;日志可能包含客户 PII,需明确日志摘录的去向(模型提供商、Slack)并获得用户同意。
- 清点团队已有的日志源、保留时长和只读读取方式,映射各源支持的检测项,并记录日志缺口。
- 以影子模式运行所有检测规则 7–14 天(记录可能告警但不发送),之后根据实际触发情况调整阈值。
- 配置调度运行器(如 GitHub Actions 定时任务、Vercel Cron、小型虚拟机 Cron 或托管云智能体),认证/IAM 源建议每 5 分钟运行一次,Stripe 和导出类每小时一次。
- 设置状态存储(检查点、开放告警、抑制列表),配置去重键、重发页规则和抑制过期策略。
- 配置告警渠道(PagerDuty、Pushover、Slack 或邮件摘要),确保每个告警包含由代码生成的“为何触发”块和原始事件链接。
适用场景 适合 1–30 名工程师、使用 PaaS 托管(Vercel、Heroku、Render、Fly、Supabase、Neon)、没有 SIEM、没有待命安全人员、但已保留部分日志的小型 SaaS 团队。
限制
- 仅做检测:观察器只读取日志并发送消息,从不阻断 IP、禁用用户、轮换密钥或更改配置;响应由人工在事件分类流程中决定。
- 不适用于受监管环境(如 HIPAA、PCI DSS、需要监控控制的 SOC 2、FedRAMP),这些环境需要保留防篡改日志和文档化分类,cron 任务无法满足;也不适用于已有 SIEM 的团队(应使用 siem-detection 规则)或终端威胁(需要 EDR)。
- 日志被视为不可信输入,需防范提示注入;观察器持有的所有凭证必须为只读且限定于日志/事件读取。
- 部分日志源存在保留期短、需要日志排流、API 权限限制等约束,且许多 PaaS 团队可能没有出站日志(D10 检测不可用)。
- 成本估算基于假设的每阶段令牌消耗和 Claude API 定价,实际费用需根据真实事件量和当前定价重新计算。
交叉引用 该技能与 siem-detection(团队成长后采用真实 SIEM)、incident-triage(告警确认后的处理)、soc-operations(受监管环境)、prompt-injection(LLM 读取攻击者控制文本的风险)、secrets-audit、cloud-audit、iam-audit、threat-hunting 等技能存在关联。