indicaindependent/dripops

GitHub: indicaindependent/dripops

DripOps 是一套基于 Cloudflare Workers、Splunk Cloud 与 Claude Sonnet 4.5 的智能体可观测性系统,通过 MCP 协议实现内容流水线事件的自动采集与 AI 驱动的运维响应。

Stars: 0 | Forks: 0

# DripOps

DripOps

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE) [![Bridge Worker](https://img.shields.io/badge/Cloudflare%20Worker-v0.3.0-orange)](./workers/splunk-hec-bridge) [![MCP Server](https://img.shields.io/badge/MCP%20Server-v0.1.0-purple)](./agent/mcp-server) [![Claude](https://img.shields.io/badge/Claude-Sonnet%204.5-blueviolet)](./agent/claude-agent) ## 太长不看 DripOps 是一个三通道的智能体可观测性技术栈: 1. **Sources(数据源)** — Python 和 Cloudflare Worker 服务发出带有类型的事件。 2. **Ingest(接入)** — 一个 Cloudflare Worker (`dripops-splunk-hec-bridge`) 负责验证、缓冲,并通过 HEC 将它们发送到 Splunk Cloud,同时具有 SSH-MCP 中继作为后备方案。 3. **Intelligence(智能)** — 一个 Model Context Protocol 服务器向 Claude Sonnet 4.5 暴露 5 个工具,后者会读取操作手册(runbook)、查询 Splunk,并在模式匹配到已知故障时执行操作(发送 Telegram 警报或创建 GitHub PR)。 它目前正运行在作者的生产环境内容流水线上。真实的事件。真实的 Splunk。真实的 Telegram 警报。 ## 架构

Architecture

### 通道 1 — Sources(数据源) | Service(服务) | Runtime(运行时) | Emits(发出的事件) | |---|---|---| | `drip-watchdog` | Python · systemd | `p0_fired`, `reply_fired`, `fire_failed` | | `campaign-validator-worker` | Cloudflare Worker | `validation_completed` (包含星标和违规项) | | `tuck-cache-refresh` | Cloudflare Worker | `cache_refreshed`, `refresh_failed`, `freshness_drift` | 所有数据源都使用相同的 helper 签名: ``` emit_dripops_event(source, event_type, severity="info", **fields) ``` ``` ctx.waitUntil(emitDripops(env, { source, event_type, severity, ...fields })); ``` ### 通道 2 — Ingest(接入) `workers/splunk-hec-bridge/` — 一个 Cloudflare Worker,它负责: - 根据严格的 JSON schema 验证每一个事件 - 当 Splunk 不可达时缓冲至 Cloudflare KV(通过 cron 每 5 分钟排空一次) - 当直接的 HEC 被严格的证书验证阻挡时,回退到 OptiPlex SSH-MCP 中继 - 暴露 `/event`, `/batch`, `/replay`, `/splunk-search` 和 `/splunk-saved-search` 接口 ### 通道 3 — Intelligence(智能) `agent/mcp-server/` — TypeScript MCP 服务器,采用 stdio 传输,包含 5 个工具: | Tool(工具) | 功能描述 | |---|---| | `dripops_health` | 读取 bridge 的 `/health` endpoint 以及最近的延迟 | | `splunk_search` | 通过 bridge → relay → Splunk 路由原始的 SPL | | `splunk_saved_search` | 按名称派发 Splunk saved search | | `telegram_alert` | 向配置的聊天发送消息 | | `github_open_pr` | 针对配置的 repo 开启一个 draft PR | `agent/claude-agent/` — Python 编排器,它将操作手册(runbook)作为系统 prompt 加载,生成 MCP 服务器,并在 tool-use 循环中运行 Claude Sonnet 4.5。 ## 线上实证 真实的 Splunk Cloud,真实的 `dripops:event` sourcetype,真实的跨运行时事件:

DripOps in Splunk

## 快速开始 ``` # 1. Clone 并安装 git clone https://github.com/indicaindependent/dripops.git cd dripops cp .env.example .env # fill in your own values # 2. Bridge worker (Cloudflare) cd workers/splunk-hec-bridge npm install # 通过 `wrangler secret put` 设置 secrets — 参见 SECURITY.md wrangler deploy # 3. MCP server (任何能运行 Node 的主机) cd ../../agent/mcp-server npm install npm run build ./test/smoke-test.sh # 4. Claude agent (任何拥有 Python 3.11+ 的主机) cd ../claude-agent pip install -r requirements.txt python3 agent.py --once ``` ## 为什么采用这种设计 - **统一的凭证管理面。** 所有 Splunk 密钥都存在于 bridge worker 中。MCP 服务器只需要 bridge URL 和接入密钥。 - **Fire-and-forget(即发即弃)遥测。** 数据源通过 `ctx.waitUntil()` (CF Workers) 或 3 秒超时机制 发出事件。面向用户的延迟保持在 100ms 以下。 - **Saved-search 优先。** 智能体通过名称调用预先审查过的 saved search,而不是运行任意的 SPL。真实的 Splunk 环境通过 saved report 来管理 SPL;这与该工作流相匹配。 - **将 Runbook 作为系统 prompt。** 添加新的故障模式只需 `touch prompts/runbooks/new_pattern.md`。智能体在下一次运行时就会自动加载。 有关凭证处理和轮换操作手册,请参见 [SECURITY.md](./SECURITY.md)。 ## 仓库布局 ``` dripops/ ├── workers/splunk-hec-bridge/ # Lane 2 — Cloudflare Worker ingest │ ├── src/index.ts # v0.3.0 source │ ├── wrangler.toml # deployment config (secrets listed, never set) │ └── package.json │ ├── agent/mcp-server/ # Lane 3 — MCP server (TypeScript) │ ├── src/index.ts # 5 tools, stdio transport │ ├── test/smoke-test.sh # E2E smoke tests │ └── README.md │ ├── agent/claude-agent/ # Lane 3 — Claude orchestrator (Python) │ ├── agent.py # tool-use loop, 8-iteration cap │ ├── prompts/system.md # agent persona + safety rails │ └── prompts/runbooks/ # one .md per incident pattern │ ├── sources/ # Lane 1 — instrumented service snapshots │ ├── campaign-validator-worker.{original,patched}.js │ ├── tuck-cache-refresh.{original,patched}.js │ └── splunk-hec-bridge.{v0.2.0,v0.3.0}.js │ ├── patches/ # Idempotent patcher scripts for sources │ ├── dripops_watchdog_patch.py │ └── patch_campaign_validator.py │ ├── docs/ # Architecture notes, runbook templates ├── assets/ # Diagrams, logos, devpost images ├── .env.example ├── SECURITY.md ├── LICENSE └── README.md ``` ## 后续计划 - 集成 Splunk AI Assistant 以实现自动化的 SPL 生成 - 通过 `github_open_pr` 实现一键 branch + commit + PR - 多租户 runbook 目录(自带 runbook) - 在交由 Claude 处理之前,使用 Workers AI (Llama 3.3 70B) 廉价计算层进行初步分类 - 一个用于展示智能体自身活动的 Splunk dashboard ## 致谢 由 [Peter McVries](https://bsky.app/profile/indicaindependent.bsky.social) ([@indicaindependent](https://github.com/indicaindependent)) 构建。 技术栈:Cloudflare Workers · Cloudflare KV · Splunk Cloud · Anthropic Claude Sonnet 4.5 · Model Context Protocol · TypeScript · Python · Dell OptiPlex · home lab。 许可证:[MIT](./LICENSE)。
标签:API集成, MCP, OISF, 可观测性, 日志管理, 程序员工具, 自定义脚本, 运维监控, 逆向工具