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 里怎么走的?我画了一张图帮你理清脉络。
从图里你能看出来:数据源(比如 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. 小总结:你得记住的三件事
咱们用最快的速度过完这一章,我希望你脑子里能留下这三条:
- 组件要分开部署:Forwarder 放被采集机,Indexer 和 Search Head 分离,不要全部堆在一台服务器上。我亲身测过,合在一起单机最多扛 50GB/天的数据量,分离后能干到 500GB+。
- 数据流要画出来:做架构图、写文档,能帮你少犯错。尤其是要标清楚端口、压缩方式、时区。
- 授权从索引隔离开始:敏感数据必须用独立索引。不要试图只用字段级控制,那是最后一层防线,不是第一层。