Splunk 部署手册

本文使用 Ubuntu 搭建

1. Splunk 简介

Splunk 是一款企业级的统一安全与可观测性平台,主要用于实时收集、索引、搜索、监控和分析海量机器生成的大数据,核心做三件事:

  1. 采集 ------ 从日志文件、网络、数据库等来源收集数据;
  2. 索引 ------ 把原始数据解析、分字段、建立可搜索的索引;
  3. 搜索与可视化 ------ 用 SPL 查询语言分析,生成报表、告警、仪表盘。

几个核心概念:

概念 说明
事件(Event) 一条日志记录,是 Splunk 处理的基本单位
索引(Index) 存放事件的分区,类似"目录/文件夹"
SPL Splunk 查询语言(Search Processing Language)
数据管道 数据经过 Input(输入)→ Parsing(解析)→ Indexing(索引)→ Search(搜索)四个阶段

2. 配置要求

2.1 操作系统

  • Ubuntu 16.04 LTS 及以上,推荐 22.04 / 24.04 LTS;
  • Linux 内核 3.x 以上;
  • ⚠️ 仅支持 x86_64(amd64)架构,不支持 ARM(含 Apple Silicon)。

2.2 硬件要求(三档)

档位 CPU 内存 磁盘 适用场景
官方参考 12 物理核 / 24 vCPU(2GHz+) 12 GB ≥250 GB 生产 / 20GB 天级日志量
虚拟机推荐 ✅ 4 vCPU 8 GB 60~100 GB 测试、学习,运行流畅
最低能跑 2 vCPU 4 GB ≥60 GB 只够装起来体验,较卡
  • 内存是最大瓶颈:Splunk 是 Java + C 混合进程,8 GB 才比较舒服。
  • 磁盘别省 :安装本体约 3 GB,索引数据会持续增长;任何实例须始终保留 ≥5 GB 空闲空间。
  • 文件系统用默认 ext4 即可。

2.3 端口

端口 用途
8000 Splunk Web 管理界面
8089 管理 API / 数据接收
9997 分布式下 Forwarder 转发数据到 Indexer(单机用不到)

2.4 License

  • 注册 Splunk 账号下载安装包,自带 60 天企业试用 License;
  • 到期后可切换 Free 版(每天 500 MB 数据量),但是会少一些功能。

3. Splunk 架构

3.1 数据流

text 复制代码
日志源(文件/网络/数据库)
        │
        ▼
   Forwarder  ← 采集与转发数据
        │
        ▼
    Indexer   ← 解析、分字段、建立索引
        │
        ▼
  Search Head ← 搜索、分析、可视化

3.2 核心组件

组件 职责
Universal Forwarder 轻量采集器,部署在数据源上,采集并转发日志
Indexer 索引器,解析数据、建立索引、存储数据
Search Head 搜索头,执行 SPL 搜索、生成仪表盘与报表

3.3 单机 vs 分布式

维度 单机(Standalone) 分布式(Distributed)
角色 采集、索引、搜索都在一台机器 Forwarder / Indexer / Search Head 分离
扩展性 只能换更强服务器(纵向) 加机器即可(横向)
高可用 单点,宕机即中断 可做集群冗余
复杂度 低 高
典型日志量 < 几十 GB/天 几百 GB ~ TB 级/天

本手册聚焦单机部署。单机里的角色以后可无缝拆到独立机器上,升级到分布式。

4. 单机部署(Ubuntu)

4.1 下载

当前版本 :最新为 Splunk Enterprise 10.6 (10.6.0.5,2026-09-30 发布,版本号已改为四段式);官网下载页也提供 10.4.2。学习环境两者皆可,下面示例用 9.4.0(直链已实测可用)。

方式一:命令行直链下载(无需登录,推荐)

bash 复制代码
wget -O splunk.tgz "https://download.splunk.com/products/splunk/releases/9.4.0/linux/splunk-9.4.0-6b4ebe426ca6-linux-amd64.tgz"

直链由「版本号 + build hash」组成,例如 9.4.0 + 6b4ebe426ca6。要下载其他版本,替换对应的版本号和 hash 即可(可从官网下载页文件名看到),.tgz 也可换成 .deb。

方式二:官网页面下载

到 https://www.splunk.com/en_us/download/splunk-enterprise.html 注册/登录后,选择 Linux 平台的 .deb(或 .tgz)安装包下载。

4.2 安装

方式 A:deb 包(推荐)

bash 复制代码
sudo dpkg -i splunk-9.x.x-xxxxxxxxxxxx-linux-2.6-amd64.deb
# 默认安装目录:/opt/splunk

方式 B:tgz 绿色包

bash 复制代码
sudo tar xvzf splunk-9.x.x-xxxxxxxxxxxx-linux-2.6-amd64.tgz -C /opt

4.3 首次启动

bash 复制代码
sudo /opt/splunk/bin/splunk start --accept-license

首次启动时,系统会提示设置管理员账号与密码(密码需至少 8 位 ASCII 字符),按提示完成输入即可。

4.4 设置开机自启(可选)

bash 复制代码
sudo /opt/splunk/bin/splunk enable boot-start -systemd-managed 1 --accept-license

4.5 访问与登录

浏览器打开:

text 复制代码
http://<虚拟机IP>:8000

用刚才设置的管理员账号登录,进入首页即表示部署成功。


5. 数据接入

推荐使用命令行方式

5.1 三种方式对比

Splunk 官方(Getting Data In)把接入分三类,对应「添加数据」页的三个按钮:

方式 数据在哪 特点
上传 你自己电脑上的文件 一次性导入,练手用
监视 Splunk 所在机器的文件/目录、TCP/UDP 端口、脚本 持续采集,安全告警靠它
转发 其他机器(装 Universal Forwarder) 生产环境的标准做法

5.2 上传文件(入门练手)

  1. 设置 → 添加数据 → 上传 → 选文件;
  2. 「设置来源类型」页保持自动检测,可预览事件格式;
  3. 「输入设置」页选择目标索引(可点「新建索引」,见 5.4);
  4. 检查 → 提交 → 开始搜索。

提示:可以先在电脑上新建一个 test.log,随便粘十几行带时间戳、INFO/ERROR 字样的日志,上传到索引 test,方便后面练搜索和告警。

5.3 监视文件(持续采集,安全告警的数据基础)

以监控 /var/log/auth.log(SSH/登录日志)为例:

  1. 设置 → 添加数据 → 监视 → 选「文件和目录」;
  2. 路径填 /var/log/auth.log;
  3. 监视方式选「持续监视」(Continuously Monitor);
  4. 来源类型填 linux_secure(官方对认证日志的推荐值,会自动提取 action、src_ip、user 等字段);
  5. 「输入设置」页新建索引 os;
  6. 提交。

完成后,SSH 登录虚拟机时故意输错几次密码,再搜 index=os "Failed password" 就能看到事件------告警练习就有了真实数据。

等价命令行方式 (编辑 /opt/splunk/etc/system/local/inputs.conf):

ini 复制代码
[monitor:///var/log/auth.log]
index = os
sourcetype = linux_secure

保存后重启:sudo /opt/splunk/bin/splunk restart --run-as-root。

5.4 索引详解

索引是什么 :Splunk 存数据的"分柜子",数据按指定索引落盘,搜索时用 index=xxx 限定范围。

系统自带的几个:main(默认,不指定就进这)、history(搜索历史)、summary(汇总索引),以及 _internal、_audit(Splunk 自身日志)。

为什么不建议全塞 main:

  1. 保留策略没法分开管(安全日志留 1 年、练习数据留 7 天,混一起只能一刀切);
  2. 权限没法分(索引可按角色控权);
  3. 搜索性能(index=os error 只扫一个柜子,比扫全库快);
  4. 清理互不干扰(删一个索引不碰别的数据)。

新建索引各字段:

  • 索引名称 :小写字母数字,搜索时 index=名称;
  • 索引数据类型 :事件 (普通日志,选这个)或 指标(纯数值监控数据)。日志全是「事件」;
  • 起始路径 / 冷路径 / 解冻路径 :热温/冷/归档数据的落盘位置,学习环境留空用默认即可;
  • 数据完整性检查:对数据切片算哈希防篡改,学习环境可 Disable;
  • 整个索引最大大小:默认 500 GB,建议改成 10 GB 防止撑爆磁盘;
  • 热/温/冷数据桶最大大小:auto,不用动。

事件 vs 指标怎么选 :能用一句话描述"发生了什么"的是事件(如 10:00 用户 allen 登录成功);只是"读数/计数器/仪表值"的是指标(如 10:00 CPU=35%)。日志全部选事件,指标是给 collectd/statsd 这类监控数据用的。


6. 搜索入门

这里我们手动上传一个 test.log 文件测试,内容如下

复制代码
2026-10-07 09:00:01 INFO app1 server started
2026-10-07 09:00:05 INFO app1 connected to db
2026-10-07 09:01:23 ERROR app2 connection timeout
2026-10-07 09:02:10 WARN app1 slow query detected
2026-10-07 09:03:45 ERROR app2 failed to send email
2026-10-07 09:05:11 INFO app1 user login ok
2026-10-07 09:06:40 ERROR app1 disk space low
2026-10-07 09:08:02 WARN app2 retry attempt 3
2026-10-07 09:10:55 ERROR app2 connection timeout
2026-10-07 09:12:30 INFO app1 backup finished

进「搜索和报表」页,时间范围选「所有时间」,依次试(把 index=test 换成你自己的索引):

sql 复制代码
index=test
index=test error
index=test | top host
index=test | stats count by sourcetype  # 查询 test 索引,按不同日志来源类型,分别统计各自的事件条数
index=test | timechart count

前两条是过滤,top 看谁最多,stats count by 分类统计,timechart 出时间趋势图。这五条摸熟,日常搜索就够用了。

7. 告警

7.1 创建流程

告警三要素:搜索 + 触发条件 + 触发动作。

  1. 搜索页写好 SPL → 另存为(Save As)→ 告警;
  2. 告警类型:计划(Scheduled,定时跑,省资源,推荐)或实时(Real-time);
  3. 触发条件:结果数 > N / 每条结果触发 / 自定义条件;
  4. 触发动作:加入已触发告警(入门)、发邮件(需先配 SMTP)、webhook;
  5. 节流(Throttle):设置 N 分钟内不重复触发,防止告警轰炸。

验证:设置 → 搜索、报表和告警,找到告警点「立即运行」;触发后在「活动 → 已触发告警」查看记录。

7.2 安全告警常见示例

以下示例基于 index=os(auth.log,sourcetype linux_secure)和 index=test(练习日志)。

1. SSH 暴力破解(10 分钟内同一 IP 失败 ≥5 次):

sql 复制代码
index=os sourcetype=linux_secure "Failed password"
| stats count by src_ip
| where count >= 5

或,当 src_ip 字段没提取出来时使用:

sql 复制代码
index=os "Failed password"
| rex "from (?<src_ip>\d+\.\d+\.\d+\.\d+)"
| stats count by src_ip
| where count >= 5

配置:Scheduled,每 5 分钟跑(cron */5 * * * *),时间范围 -10m,结果数 > 0 触发。

2. 爆破成功登录(先失败多次、随后登录成功):

sql 复制代码
index=os sourcetype=linux_secure ("Failed password" OR "Accepted password")
| rex "from (?<src_ip>\d+\.\d+\.\d+\.\d+)"
| rex "(?<act>Failed|Accepted) password"
| stats count(eval(act="Failed")) as fails, count(eval(act="Accepted")) as ok by src_ip
| where fails >= 3 AND ok >= 1

监测配置:每 15 分钟(*/15 * * * *),时间范围 -30m,结果数 > 0 触发(失败→成功有过程跨度,窗口要够大)。

3. 非工作时间登录(早 7 点前、晚 10 点后):

sql 复制代码
index=os sourcetype=linux_secure "Accepted password"
| eval hour=strftime(_time, "%H")
| where hour < 7 OR hour >= 22

监测配置:每 30 分钟(*/30 * * * *),时间范围 -60m,结果数 > 0 触发。想只在夜里跑可用 cron */30 0-6,22-23 * * *。

4. root 直接登录(很多环境禁止):

sql 复制代码
index=os sourcetype=linux_secure "Accepted password for root"

监测配置:每 5 分钟(*/5 * * * *),时间范围 -10m,结果数 > 0 触发(root 登录高危,要快发现)。

5. ERROR 告警(用练习日志验证告警功能):

sql 复制代码
index=test ERROR | stats count

监测配置:每 10 分钟(*/10 * * * *),时间范围 -15m,结果数 > 0 触发。

6. 以后接 Windows 日志时的三个经典 (SPL 换成 index=wineventlog EventCode=xxx):

  • 1102 审计日志被清除(可疑)
  • 4740 账户被锁定(爆破迹象)
  • 4732 用户被加入管理员组(权限提升)

监测时间怎么定(通用原则):

  1. 越紧急跑得越勤:高危(root 登录、爆破)5 分钟级;一般 10~30 分钟;低频不紧急(非工作时间)30 分钟~1 小时;
  2. 时间范围 ≥ 2 倍运行间隔(5 分钟跑查 -10m,15 分钟跑查 -30m),避免漏掉两次运行交界的数据;
  3. 有"前后关联"的检测(如失败→成功)窗口要放大,覆盖整个过程。

8. 仪表盘

仪表盘就是把搜索结果变成图表、拼到一个页面。两条路径:

8.1 最快路径:从搜索直接生成面板

  1. 搜索页写一个 SPL(如 index=os "Failed password" | timechart count);
  2. 点搜索框下方的「可视化」标签,选图表类型(柱状图/折线图/饼图);
  3. 点右上角「另存为 → 仪表盘面板」;
  4. 选「新建仪表盘 」起名保存;之后再加面板时选「已有仪表盘」。

8.2 正规做法:Dashboard Studio

  1. 顶部导航「搜索和报表」→ 左侧「仪表盘 」→「新建仪表盘」;
  2. 选 Dashboard Studio(新版,推荐)或 Classic;
  3. 「添加面板」→ 每个面板填 SPL、选图表类型;
  4. 拖拽布局、加标题,保存。

8.3 现成示例:SSH 登录监控仪表盘

三个面板(都基于 index=os):

面板 1 · 失败登录趋势(折线图):

sql 复制代码
index=os "Failed password" | timechart count

面板 2 · 失败登录来源 IP(条形图):

sql 复制代码
index=os "Failed password"
| rex "from (?<src_ip>\d+\.\d+\.\d+\.\d+)"
| top src_ip

面板 3 · 失败 vs 成功登录(饼图):

sql 复制代码
index=os ("Failed password" OR "Accepted password")
| rex "(?<act>Failed|Accepted) password"
| stats count by act

8.4 图表类型怎么选

  • timechart 结尾 → 折线图/柱状图(时间趋势);
  • top / stats count by 结尾 → 条形图/饼图(占比、排行);
  • stats count 单一数值 → 单值(大数字卡片)。

附:常用命令速查

bash 复制代码
sudo /opt/splunk/bin/splunk start --run-as-root          # 启动
sudo /opt/splunk/bin/splunk stop --run-as-root           # 停止
sudo /opt/splunk/bin/splunk restart --run-as-root        # 重启
sudo /opt/splunk/bin/splunk status --run-as-root         # 查看状态
相关推荐
深念Y2 个月前
订阅管理及节点过滤实践(技术笔记)
linux·网络·arm·优化·日志·工具·soc
思尔芯S2C2 个月前
白皮书|从RTL适配到硅前验证:如何构建有价值的FPGA原型平台
fpga开发·soc·芯片·验证·asic·prototyping·原型验证
Whoami!3 个月前
⸢ 拾陆-Ⅰ⸥⤳ 安全数智化建设:安全运营中心(SOC)
网络安全·信息安全·soc·安全运营中心
Godspeed Zhao4 个月前
现代智能汽车系统——智驾SoC之框架版图
人工智能·机器学习·自动驾驶·汽车·soc
Kang.lee4 个月前
2026.6.4【MIPI C-PHY】C-PHY v2.1协议阅读后问题总结
音视频·soc·asic
景芯SoC芯片实战4 个月前
数字IC设计:JEDEC复位
soc
每天进步一点点️6 个月前
AI芯片APU子系统架构梳理:APU Cluster、缓存层级与CMN600AE
soc·半导体芯片·apu
每天进步一点点️6 个月前
透视 SOC 内部:APU Cluster 如何驱动 DB15 的 CAN/ETH 信号输出
arm开发·soc·芯片
每天进步一点点️6 个月前
CMN600AE——片上总线
嵌入式硬件·soc·芯片