Splunk 基础与架构:三大组件、数据流和授权机制

这一章说实在的,是入门 Splunk 最绕不开的一块。如果你连 Forwarder、Indexer、Search Head 都分不清楚,后面采集审计日志就容易晕头转向。我当年第一次搭 Splunk 环境的时候,把 Forwarder 装在了 Indexer 上,结果数据直接进了搜索头……嗯,那场面挺尴尬的。

咱们今天就把这些东西彻底聊透。你掌握了我这几年的经验,后面操作会顺手很多。

1. 核心组件:Forwarder、Indexer、Search Head

Splunk 采用的是「分布式」架构,说白了就是把数据采集、存储、搜索三个环节分开。你可能在文档里看到过很多种角色,但真正打底的就这三个。

组件 职责 典型部署位置 我的常见踩坑点
Forwarder 采集数据并转发 被监控的服务器上 容易忘记配 outputs.conf
Indexer 接收、解析、索引、存储数据 独立服务器或集群 磁盘写满导致丢数据
Search Head 提供搜索 UI 和分布式查询 管理节点或共享服务 查询超时没调优

关键概念:Forwarder 只做发送,不做处理;Indexer 负责落地;Search Head 只做查询。这三者通过 TCP/9997 端口通信。

你要是记不住,就记住一句话:Forwarder 是采集员,Indexer 是仓库管理员,Search Head 是查询窗口。

2. 数据流:从采集到可搜索

数据在 Splunk 里怎么走的?我画了一张图帮你理清脉络。

Splunk 数据流逻辑架构 数据源 Secrets日志/系统日志 Forwarder 采集+压缩+转发 Indexer 解析+索引+存储 Search Head 通信端口:TCP 9997 默认启用gzip压缩 输入阶段 解析阶段 索引阶段 搜索阶段

从图里你能看出来:数据源(比如 Secrets 审计日志)先被 Forwarder 采集,经压缩后送到 Indexer,Indexer 完成解析和索引,最终提供给 Search Head 做查询。

小技巧:我在生产环境里遇到过 Forwarder 和 Indexer 时间不同步导致数据标错时间戳的问题。建议所有机器都配置 NTP 同步。

实际数据流里还有一个细节——输入阶段。Forwarder 内部有 inputs.conf,它定义了什么文件、什么端口、什么协议需要被监控。我个人习惯把 Secreta 日志路径写在一个单独的 config 文件里,方便管理。

到了 Indexer 之后,数据会经历解析(提取 timestamp、source type、host 等信息)、索引(写入倒排索引和原始数据块),最后才能被搜索到。这个过程消耗的是 CPU 和磁盘 I/O,我见过有人 Indexer 配的磁盘是 HDD,结果一到晚上批量日志涌进来就卡死。如果条件允许,请用 SSD。

3. 授权机制:从认证到数据级权限

Splunk 的授权不是你想的那样「简单给个密码就行」。它分为三层:

  • 认证层:验证你是谁(本地用户、LDAP、SAML 等)。
  • 角色层:你能做什么(搜索、创建 report、管理用户等)。
  • 数据层:你能看到哪些数据(通过 search-time field mask 或 index-level 限制)。

说实话,很多人在第一次部署时只配了角色,忘了限制索引范围。我有个朋友,把审计日志和生产日志放一个 index 里,结果一个普通用户搜到了 CEO 的密码变更记录……这个问题后来花了一整周才修复数据泄露影响。

层级 配置方式 作用范围
认证 authentication.conf / 外部 LDAP 全实例
角色 authorize.conf / 通过 UI 管理 按能力分配
数据授权 index-level 白名单 / search-time 字段掩码 按索引或 sourcetype

重要:对于 Secrets 审计日志这种敏感数据,必须使用独立索引并配置数据层权限。我曾经见过有人把所有日志混在一个 index 里,然后试图通过字段掩码来隐藏,结果因为 search-time 掩码有漏洞导致数据泄漏。正确做法是索引级别隔离。

具体到操作上,你需要在 Splunk Web 的「设置 -> 角色」里新建一个角色,把它的索引白名单只放 "secreta_sec_idx",其他人就搜不到这个索引里的任何数据。而且,你还可以配合 audit 日志记录谁进行了什么搜索,做到可追溯。这也是后面章节会重点讲的内容。

4. 小总结:你得记住的三件事

咱们用最快的速度过完这一章,我希望你脑子里能留下这三条:

  1. 组件要分开部署:Forwarder 放被采集机,Indexer 和 Search Head 分离,不要全部堆在一台服务器上。我亲身测过,合在一起单机最多扛 50GB/天的数据量,分离后能干到 500GB+。
  2. 数据流要画出来:做架构图、写文档,能帮你少犯错。尤其是要标清楚端口、压缩方式、时区。
  3. 授权从索引隔离开始:敏感数据必须用独立索引。不要试图只用字段级控制,那是最后一层防线,不是第一层。