JacobPEvans/ansible-splunk
GitHub: JacobPEvans/ansible-splunk
用于在 Proxmox 虚拟机上自动化部署和配置 Splunk Enterprise 的 Ansible Role,支持 Docker 容器化、HEC 数据接入、自定义索引和 Doppler 密钥管理。
Stars: 0 | Forks: 0
# Ansible Splunk Enterprise
[](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/lint.yml)
[](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/molecule.yml)
[](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/validate.yml)
在 Proxmox VM 上部署和配置 Splunk Enterprise (Docker)。
## 基本信息
| 属性 | 值 |
| --- | --- |
| **类型** | Ansible role + playbooks |
| **目标** | Proxmox VM `192.168.0.200` (VMID 200) |
| **Role** | `roles/splunk_docker` |
| **入口** | `playbooks/site.yml` |
| **Secrets** | Doppler (`iac-conf-mgmt` / `prd`) |
| **版本** | 参见 `VERSION` |
## 流水线架构
```
Cribl Edge (181/182) ──HEC :8088──> Splunk (200)
│
Splunk indexes:
ai, claude, firewall, gemini,
netflow, network, openai,
os, otel, unifi, vscode
```
## 设置
此仓库使用 [Nix dev shell][nix-develop] 来提供所有工具
(`ansible-playbook`、`ansible-lint`、`molecule` 等)。在每个工作树中激活一次:
```
direnv allow # if using direnv (recommended)
# 或:nix develop
```
## 快速开始
```
# 1. 部署 Splunk
doppler run -- ansible-playbook playbooks/site.yml
# 2. 验证部署
doppler run -- ansible-playbook playbooks/validate.yml
```
## 自定义索引
所有索引:最大容量 100 GiB,保留期 365 天,存储于 `/opt/splunk//`。
| Index | 用途 |
| --- | --- |
| `ai` | AI 助手活动和工具调用 |
| `claude` | Claude 特定事件 |
| `firewall` | Palo Alto / Cisco 防火墙日志 |
| `gemini` | Gemini 特定事件 |
| `netflow` | NetFlow / IPFIX 流数据 |
| `network` | 网络设备 syslog |
| `openai` | OpenAI 特定事件 |
| `os` | Linux / Windows 系统日志 |
| `otel` | OpenTelemetry spans / metrics |
| `unifi` | UniFi 网络 syslog |
| `vscode` | VS Code / Copilot 事件 |
## 技术附加组件
运行前必须将归档文件放置在 `roles/splunk_docker/files/` 中(已被 gitignore)。
参见 [`roles/splunk_docker/files/README.md`](roles/splunk_docker/files/README.md) 获取下载说明。
| Add-on | 来源 | 备注 |
| --- | --- | --- |
| TA-unifi-cloud | 内部构建 | UniFi syslog 解析 |
| Duck Yeah | Splunkbase | 应用打包工具 |
| Splunk DB Connect | Splunkbase [#2686](https://splunkbase.splunk.com/app/2686) | 数据库连接 |
## Playbooks
| Playbook | 用途 |
| --- | --- |
| `site.yml` | 完整部署:加载 inventory,运行 `splunk_docker` role |
| `deploy.yml` | 仅裸部署(不加载 inventory) |
| `deploy_docker.yml` | 部署 Splunk 容器,假设已预装 Docker |
| `validate.yml` | 部署后验证:端口、HEC、Web UI |
| `configure_indexes.yml` | 仅索引配置(幂等) |
## Role 结构
```
roles/splunk_docker/
├── defaults/main.yml # Core Docker + Splunk configuration
├── tasks/
│ ├── main.yml # Orchestrates all tasks
│ ├── java.yml # Optional JRE-21 for DB Connect
│ └── wait_for_splunk.yml # Health check loop after container start
├── templates/
│ ├── docker-compose.yml.j2
│ ├── indexes.conf.j2
│ ├── inputs.conf.j2 # HEC token configuration
│ ├── web.conf.j2
│ ├── server.conf.j2
│ └── firewall.sh.j2
├── handlers/main.yml # Restart Splunk container
└── files/ # TA archives (gitignored)
```
## 配置变量
`roles/splunk_docker/defaults/main.yml` 中的关键默认值:
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
| `splunk_docker_image` | `splunk/splunk:latest` | Docker 镜像。生产环境请固定到特定版本。 |
| `splunk_docker_web_port` | `8000` | Splunk Web UI 端口 |
| `splunk_docker_hec_port` | `8088` | HEC 接收端口 |
| `splunk_docker_data_dir` | `/opt/splunk` | 数据卷挂载路径 |
| `splunk_docker_web_ssl` | `true` | 启用 Splunk Web SSL |
| `splunk_docker_java_enabled` | `false` | 为 DB Connect 启用 JRE |
| `splunk_docker_firewall_enabled` | `false` | Guest iptables(已禁用;使用 Proxmox 防火墙) |
| `splunk_docker_allow_internet_access` | `false` | 禁用 Splunkbase 应用浏览、更新检查和遥测,以防止离线 VM 上的 DNS 超时。 |
| `splunk_docker_index_default_max_size_mb` | `102400` | 每个索引 100 GiB |
| `splunk_docker_index_default_frozen_time_secs` | `31536000` | 365 天保留期 |
## Secrets
所有 secrets 通过 Doppler (`iac-conf-mgmt` / `prd`) 管理:
| Doppler Secret | Ansible 变量 | 用途 |
| --- | --- | --- |
| `SPLUNK_PASSWORD` | `splunk_docker_password` | Splunk admin 密码 |
| `HEC_NAMESPACE` | `splunk_docker_hec_namespace` | 用于 HEC token 派生的 UUID 命名空间(主要) |
| `SPLUNK_HEC_TOKEN` | `splunk_docker_hec_token_values.legacy` | 旧版 HEC token UUID(若无 `HEC_NAMESPACE` 时的备用) |
| `SPLUNK_MCP_TOKEN` | `splunk_docker_mcp_token` | MCP Server 认证 token |
| `PROXMOX_SSH_KEY_PATH` | — | 用于 VM 访问的 SSH 密钥 |
```
# 运行任意注入 secrets 的 playbook
doppler run -- ansible-playbook playbooks/site.yml
```
## 测试
```
# Lint
ansible-lint
# 语法检查
doppler run -- ansible-playbook playbooks/site.yml --syntax-check
# Molecule (仅语法 CI 测试)
molecule test
# 部署后验证
doppler run -- ansible-playbook playbooks/validate.yml
```
## 依赖
### Ansible Collections (`requirements.yml`)
| Collection | 版本 |
| --- | --- |
| `ansible.posix` | `>=2.1.0,<3.0.0` |
| `community.general` | `>=12.4.0,<13.0.0` |
| `community.docker` | `>=5.0.6,<6.0.0` |
| `cloud.terraform` | `>=4.0.0,<5.0.0` |
```
ansible-galaxy collection install -r requirements.yml
```
### 外部服务
- **terraform-proxmox** — 供应 Splunk VM (VMID 200)
- **Doppler** — secrets 管理
- **Proxmox firewall** — 网络访问控制(无 guest iptables)
## 链接
- [更新日志](CHANGELOG.md)
- [贡献指南](CONTRIBUTING.md)
- [Splunk Docker image](https://hub.docker.com/r/splunk/splunk)
- [ansible-proxmox-apps](https://github.com/JacobPEvans/ansible-proxmox-apps) — Cribl Edge(上游发送端)
标签:Ansible, API集成, Cribl, DNS解析, Docker, Doppler, EC2, HEC, HTTP Event Collector, IaC, Molecule, Nix, OISF, Playbook, Proxmox, Role, Splunk Enterprise, 可观测性, 命令控制, 安全防御评估, 开源项目, 数据流水线, 数据采集, 日志管理, 日志索引, 服务器配置, 监控, 系统提示词, 网络安全, 自动化运维, 请求拦截, 防火墙日志, 隐私保护