JacobPEvans/ansible-splunk

GitHub: JacobPEvans/ansible-splunk

用于在 Proxmox 虚拟机上自动化部署和配置 Splunk Enterprise 的 Ansible Role,支持 Docker 容器化、HEC 数据接入、自定义索引和 Doppler 密钥管理。

Stars: 0 | Forks: 0

# Ansible Splunk Enterprise [![Lint](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/lint.yml/badge.svg)](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/lint.yml) [![Molecule](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/97a62a2ae5045054.svg)](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/molecule.yml) [![Validate](https://github.com/JacobPEvans/ansible-splunk/actions/workflows/validate.yml/badge.svg)](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, 可观测性, 命令控制, 安全防御评估, 开源项目, 数据流水线, 数据采集, 日志管理, 日志索引, 服务器配置, 监控, 系统提示词, 网络安全, 自动化运维, 请求拦截, 防火墙日志, 隐私保护