4. 日志采集架构概述:Agent-based vs Agentless

聊到日志采集,大家第一个面临的选择就是:到底装不装 Agent?

这个决策直接影响后续的运维成本、采集质量和故障排查效率。我见过不少团队,一开始图省事选了轻量方案,结果半年后发现日志丢了一批又一批,回头又补上 Agent。也有团队一上来就铺 Agent,结果被安全部门怼了一顿——"你在我的生产服务器上装第三方进程?"

所以这一章,咱们把两种架构掰开揉碎讲清楚。你不光要知道它们怎么工作,还得知道什么场景该选哪个。

4.1 Agent-based 架构

所谓 Agent-based,就是在每台目标机器上安装一个独立的采集进程。这个进程负责读日志文件、解析格式、做简单过滤,然后发给中央采集服务。

说白了,就是派一个"哨兵"守在每个机器上。我个人的习惯是,只要条件允许,优先选 Agent-based。为什么?因为它可控。

  • 采集能力强——本地直接读文件,不依赖网络协议转换,什么格式都能解析。
  • 离线缓存——网络断了或服务挂了,Agent 先把日志存在本地,恢复后继续传。
  • 资源隔离好——采集进程独立运行,不影响业务进程。
  • 安全边界清晰——Agent 只需要往外发数据,不需要外部主动连进来。

我在一家金融公司干过,他们的核心交易系统要求每笔日志必须 100% 采集。当时用了 Filebeat + Kafka 的 Agent 方案。上线后确实稳,机器重启、网络抖动都没丢过一条日志。但代价是每台服务器得多占 200MB 内存和一个 CPU 核。这个账你得算清楚。

我曾经踩过这个坑:Agent 版本和业务环境冲突。有一回某个 Java 应用升级了 JDK,结果 Agent 依赖的 native 库不兼容,直接崩溃。从那以后,我每次选 Agent 都会先看它依赖的底层库,尤其是 glibc 版本和 systemd 接口。

4.2 Agentless 架构

Agentless 正好反过来——不在目标机器上装任何东西。采集端通过网络协议去拉取日志。常见的方式有 SSH 拉取、Syslog 接收、HTTP API 轮询,或者直接读共享存储上的日志文件。

你想想看,如果你要采集 200 台容器的日志,每台都装 Agent,镜像体积暴增,运维复杂度也上去了。Agentless 在这时候就有优势了。

  • 零部署——不需要在业务机器上装软件,审批流程短。
  • 适合临时场景——排查问题时临时拉一下日志,用完就撤。
  • 对业务零侵入——业务团队完全感知不到采集的存在。
  • 集中管控——所有采集策略都在中央服务器配,不用挨个登录目标机。

但 Agentless 不是没有代价。我记得有一次用 SSH 拉取方式采集 500 台机器的应用日志,结果采集服务器成了瓶颈——SSH 连接数太多,CPU 打满,日志延迟越来越严重。后来被迫改成批量拉取+压缩传输,才勉强顶住。

我的建议:Agentless 更适合低频、小量的采集场景,比如每天拉一次审计日志,或者临时排查故障。高频大批量场景,别犹豫,上 Agent。
日志采集架构对比:Agent-based vs Agentless 日志采集架构对比 VS Agent-based 架构 业务服务器 Agent 采集器 消息队列 / 缓存 存储 & 分析平台 Agentless 架构 目标系统 SSH / Syslog / API 采集网关 存储 & 分析平台 Agent-based 强采集 · 离线缓存 · 高可控 | Agentless 零部署 · 轻侵入 · 快速接入

4.3 核心对比

光说概念不够,咱们直接上表。我列出了几个关键维度,你在做技术选型时可以拿这张表当 checklist 来用。

对比维度 Agent-based Agentless
部署方式 每台目标机器安装独立进程 中心化采集,目标机无需装软件
资源消耗 占用目标机 CPU / 内存 / 磁盘 消耗集中在采集服务器
采集能力 支持任意格式,可做预处理 依赖协议能力,格式受限
数据可靠性 本地缓存,断网不丢数据 网络中断可能导致数据丢失
安全管控 Agent 只向外发,攻击面小 需要开放端口 / 凭证,风险较高
运维复杂度 需要管理 Agent 版本和配置 只需维护采集中心
适用场景 生产核心系统、高频采集、合规审计 容器环境、临时排查、低频采集

这张表你看完应该心里有数了。两种方式不是谁替代谁,而是互补的。我在同一家公司里经常两套都上——核心业务用 Agent,边缘服务和容器用 Agentless,各取所长。

4.4 选型指南

那到底怎么选?我给你几个可操作的判断标准:

  • 看数据量——日均日志量超过 10GB/台,上 Agent。低于这个量,Agentless 也能扛。
  • 看可靠性要求——审计日志一条不能丢?必须 Agent,带本地缓存那种。
  • 看运维人力——团队只有两个人管 1000 台机器?Agentless 能省掉大量版本管理工作。
  • 看安全合规——金融、医疗等强监管行业,Agent 方案更容易通过审计,因为数据不出域、链路可控。
  • 看环境类型——物理机 / 虚拟机用 Agent,K8s 容器优先考虑 Agentless 或 DaemonSet 方式。

我的一个经验法则:如果你不确定选哪个,先上 Agentless 做快速验证。等确认日志量大了、格式复杂了,再逐步迁移到 Agent。不要一上来就铺 Agent,后面改架构的成本很高。

我曾经吃过一个亏:在一家电商公司,技术负责人拍脑袋决定全量上 Agentless,用 Syslog 采集所有业务日志。上线第一天就把 Syslog 服务器打崩了——因为订单系统的日志量是预估的 5 倍,UDP 丢包严重,最终丢了 30% 的日志。后来紧急切换到 Agent + Kafka 方案,花了整整一周。所以,选型之前一定要做流量压测。

最后说一句大实话:没有完美的架构,只有适合你的架构。你公司的基础设施水平、团队运维能力、业务对日志的依赖程度,这三个变量决定了最终答案。别照搬别人的方案,回到你自己的环境里做验证。