2. 日志采集架构:集中式采集的设计与选型

日志采集是整个审计分析的地基。地基没打好,后面再牛的分析引擎也白搭。我见过太多团队,上来就搞复杂规则引擎,结果日志都收不全——那真是空中楼阁。

这一节,咱们把采集架构聊透。从顶层设计到具体协议,再到接入规范,一条线捋清楚。

2.1 集中式日志采集架构设计

先问个问题:为什么非要集中采集?

你想想看,服务器几十台、上百台,每台都本地翻日志,效率低不说,还容易漏。集中采集的核心思路就一句话:日志统一收,分析统一做。

我个人习惯把采集架构分成三层:

  • 采集层(Agent):部署在目标机器上,负责读日志、发日志。
  • 传输层(Broker/Queue):消息队列或缓冲层,扛流量洪峰。
  • 存储与分析层:Elasticsearch、ClickHouse 或 Splunk 这类。

下面这张图,是我常用的集中式采集架构,你看一眼就明白了。

集中式日志采集架构 采集层 (Agent) Filebeat / Fluentd / rsyslog 传输层 (Broker) Kafka / Redis / RabbitMQ 存储与分析层 ES / ClickHouse / Splunk TCP/UDP 批量写入 💡 核心思路: 日志统一收,分析统一做。Agent 只负责采集,不负责分析。 应用服务器 A 应用服务器 B ...更多节点
我的经验:传输层别省。直接 Agent 到存储,流量一上来就丢日志。Kafka 虽然重一点,但值得。

2.2 Agent vs Agentless:两种采集方式怎么选?

这是每次架构评审都会吵起来的话题。我两边都用过,说说真实感受。

对比维度 Agent 方式 Agentless 方式
部署方式 每台机器装客户端 远程读取(SSH/SMB/WMI)
资源占用 低(约 10-50MB 内存) 无(消耗被采集端资源)
采集效率 高,实时推送 中,轮询拉取
安全性 需管理凭证,但可控 需开放远程端口,风险高
适用场景 自有服务器、容器环境 老旧设备、网络设备、临时采集

我的建议:能装 Agent 就装 Agent。Agentless 看着省事,但坑不少。

避坑指南:我曾经在一个金融项目里,为了省事全用 Agentless 采集网络设备日志。结果某次安全事件,日志延迟了 15 分钟才拉回来——差点背锅。从那以后,核心系统我坚持用 Agent。

2.3 日志传输协议:TCP、UDP 还是 Reliable TCP?

协议选型,说白了就是选「快」还是选「稳」。

  • UDP:快,但不保证送达。适合心跳日志、监控指标,丢了也不心疼。
  • TCP:稳,有重传机制。适合大部分业务日志。
  • Reliable TCP(带确认的 TCP):在 TCP 基础上加应用层 ACK。适合审计日志、交易日志——丢一条都可能出合规问题。

我一般这么定:

日志类型 推荐协议 原因
系统监控指标 UDP 允许少量丢失,追求低延迟
应用访问日志 TCP 需要完整,但可接受短暂延迟
数据库审计日志 Reliable TCP 一条都不能丢,合规要求
安全事件日志 Reliable TCP 丢日志等于丢证据
核心原则:审计日志必须用 Reliable TCP。别问为什么,问就是合规审计会查你。

2.4 日志源接入规范

日志源五花八门,不统一规范,后面解析就是灾难。我整理了一份接入 checklist,每次新接入都按这个走。

  1. 日志格式标准化:统一 JSON 或 CEF 格式。别用自由文本。
  2. 时间戳规范:必须带时区,推荐 ISO 8601。我见过太多因为时区问题导致时间线错乱的案例。
  3. 字段最小集:每条日志至少包含:时间、源 IP、事件类型、日志级别、原始内容。
  4. 日志轮转策略:按大小或时间切分,避免单文件过大。
  5. 采集频率:实时采集,延迟不超过 30 秒。

下面是一个标准的 JSON 日志示例:

{
  "timestamp": "2025-03-21T14:32:10.123+08:00",
  "source_ip": "192.168.1.100",
  "event_type": "login_failed",
  "log_level": "WARN",
  "message": "User admin login failed from 10.0.0.5",
  "hostname": "web-server-01"
}
小技巧:接入前先做一次「日志源健康检查」。我曾经帮一个团队排查,发现 30% 的日志源时间戳格式不统一——改完以后,分析效率直接翻倍。

嗯,采集架构这块,核心就这些。记住一句话:采集稳了,分析才靠谱。