YEDASAVG/Stratum

GitHub: YEDASAVG/Stratum

一个基于 AI 的日志智能分析系统,通过语义搜索与 RAG 技术实现自然语言问答、异常检测与根因定位。

Stars: 49 | Forks: 2

Stratum

🧠 问你的日志问题。用大白话获取答案。

安装功能工作原理常见问题

Rust Next.js Docker ClickHouse

## 🤔 这是什么? 你知道当你有成千上万的日志文件,而某处出问题时,你却要花数小时在其中搜索吗? **Stratum 解决了这个问题。** 与其这样: ``` grep -r "error" /var/log/ | grep "payment" | grep "timeout" | head -50 # 😫 还是不知道哪里出了问题... ``` 你只需这样提问: ``` "Why did payments fail last night?" ``` 然后得到: ``` The payment failures occurred due to a database connection timeout. At 2:47 AM, the connection pool was exhausted because of a memory leak in the order-service. Here's the root cause chain: 1. 02:30 - Memory usage exceeded 90% 2. 02:45 - Connection pool warnings started 3. 02:47 - First payment timeout 4. 02:52 - Service restarted automatically Recommendation: Increase connection pool size and fix the memory leak in OrderProcessor.java line 234. ``` ## 🚀 一键安装 ### 先决条件 - [Docker](https://docs.docker.com/get-docker/) 已安装 - **要么:** 免费 [Groq API 密钥](https://console.groq.com)(30 秒获取) - **或者:** 在本地安装 [Ollama](https://ollama.ai)(完全离线,无需 API 密钥) ### 开始吧! ``` # 1. 克隆仓库 git clone https://github.com/YEDASAVG/Stratum.git cd Stratum # 2. 运行设置 ./setup.sh # For Groq (will ask for API key) # 或者仅本地使用 Ollama: # 在 .env 中设置 LLM_PROVIDER=ollama(参见配置部分) # 3. 打开浏览器 # 仪表板:http://localhost:3001 ``` **就这样。完成了。** 🎉 ## 🎯 它能做什么? ### 💬 用大白话提问 | 你问 | Stratum 回答 | |------|--------------| | "为什么 API 很慢?" | 找到延迟问题,展示时间线,并给出修复建议 | | "显示 nginx 错误" | 自动过滤并排序相关日志 | | "3 点发生了什么?" | 汇总该时间窗口内的所有事件 | | "为什么用户收到 502 错误?" | 跨服务追踪根本原因 | ### 🔍 智能搜索(不只是关键词) 搜索 `"database connection issues"`,它会找到: - `Connection refused to postgres:5432` - `MySQL timeout after 30s` - `Redis reconnection failed` 即使它们都不包含 "database connection issues"! ### 🚨 自动异常检测 Stratum 24/7 监控你的日志,并在以下情况提醒你: - 错误率飙升(达到正常的 5 倍) - 出现新的错误模式 - 服务静默(流量下降) 在用户投诉前通过 Slack 收到告警。 ### 📊 美观仪表板 - 实时日志浏览器 - AI 聊天界面 - 异常时间线 - 服务健康概览 ## 🏗️ 工作原理 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ YOUR LOGS │ │ (nginx, apache, apps, anything) │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ LOG AI │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Parser │ │ Embeddings │ │ Search │ │ │ │ nginx,json │ │ (AI) │ │ (Qdrant) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ ClickHouse │ │ Groq │ │ Dashboard │ │ │ │ (Storage) │ │ (LLM) │ │ (Next.js) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────┐ │ "The error was │ │ caused by..." │ └─────────────────────┘ ``` **用简单的话来说:** 1. 你的日志输入 2. AI 理解其含义 3. 你提问 4. 你获得答案 ## 📁 项目结构 ``` log-intelligence/ ├── 🚀 setup.sh # One-command setup ├── 🐳 docker-compose.yml # All services defined here ├── 📄 Dockerfile # Rust backend container │ ├── crates/ # Rust code (the backend) │ ├── logai-api/ # HTTP API server │ ├── logai-core/ # Log parsers │ ├── logai-rag/ # AI/search engine │ ├── logai-worker/ # Background processor │ ├── logai-anomaly/ # Anomaly detection │ └── logai-cli/ # Terminal commands │ └── dashboard/ # Next.js frontend ├── 🐳 Dockerfile └── src/ └── app/ # React pages ``` ## 🛠️ 命令 ### Docker(推荐) ``` # 启动全部 docker compose up -d # 停止全部 docker compose down # 查看日志 docker compose logs -f # 使用演示数据启动(模拟日志) docker compose --profile demo up -d ``` ### 开发模式 如果你想修改代码: ``` # 仅启动基础设施 docker compose -f docker-compose.dev.yml up -d # 本地运行 Rust 后端 ./dev.sh # 本地运行前端 cd dashboard && pnpm dev ``` ### CLI 命令 ``` # 检查是否全部运行 logai status # 搜索日志 logai search "timeout error" # 向 AI 提问 logai ask "What caused the crash at 3am?" # 交互聊天模式(保持上下文) logai chat # 导入日志文件 logai ingest /var/log/nginx/access.log --format nginx --service my-nginx # 查看最近日志 logai logs --limit 50 # 系统统计 logai stats ``` ## 🔌 支持的日志格式 | 格式 | 示例 | |------|------| | **JSON** | `{"level":"error","message":"Connection failed"}` | | **Nginx** | `192.168.1.1 - - [10/Feb/2026:14:00:00 +0000] "GET /api" 500` | | **Apache** | `[Tue Feb 10 14:00:00 2026] [error] Connection refused` | | **Syslog** | `Feb 10 14:00:00 server sshd[1234]: Failed password` | | **Proxmox** | `Feb 23 14:00:00 pve1 pveproxy[1234]: starting worker` | 没看到你的格式?AI 会自动为大多数日志识别出来! ## 🔗 连接你的日志 ### 选项 1:从你的应用(HTTP API) 直接从应用代码发送日志: **Python** ``` import requests import datetime def send_log(message, level="info", service="my-app"): requests.post("http://localhost:3000/api/logs", json={ "message": message, "level": level, "service": service, "timestamp": datetime.datetime.utcnow().isoformat() + "Z" }) # 用法 send_log("User logged in successfully", "info") send_log("Database connection failed", "error") ``` **Node.js** ``` async function sendLog(message, level = "info", service = "my-app") { await fetch("http://localhost:3000/api/logs", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ message, level, service, timestamp: new Date().toISOString() }) }); } // Usage sendLog("Order processed", "info"); sendLog("Payment timeout after 30s", "error"); ``` **cURL** ``` curl -X POST http://localhost:3000/api/logs \ -H "Content-Type: application/json" \ -d '{ "message": "User signup completed", "level": "info", "service": "auth-service", "fields": {"user_id": "12345", "plan": "pro"} }' ``` ### 选项 2:从现有日志文件 已有日志文件?使用 CLI 导入: ``` # Nginx 访问日志 logai ingest /var/log/nginx/access.log --format nginx --service nginx # Apache 日志 logai ingest /var/log/apache2/error.log --format apache --service apache # Syslog logai ingest /var/log/syslog --format syslog --service linux # Proxmox VE 日志 logai ingest /var/log/pveproxy/access.log --format proxmox --service proxmox # JSON 日志(Docker 常用) logai ingest /var/log/myapp/app.log --format json --service my-app ``` ### 选项 3:从 Docker 容器 **使用 Docker 日志驱动:** ``` # docker-compose.yml 用于 YOUR 应用 services: my-app: image: your-app:latest logging: driver: "fluentd" options: fluentd-address: "localhost:24224" tag: "my-app" ``` **或者直接管道 Docker 日志:** ``` # 一键发送所有容器日志 docker logs -f my-container 2>&1 | while read line; do curl -s -X POST http://localhost:3000/api/logs \ -H "Content-Type: application/json" \ -d "{\"message\": \"$line\", \"service\": \"my-container\"}" done ``` ### 选项 4:使用日志转发器 **Fluent Bit**(轻量级,推荐) ``` # fluent-bit.conf [OUTPUT] Name http Match * Host localhost Port 3000 URI /api/logs Format json ``` **Vector**(由 Datadog 提供) ``` # vector.toml [sinks.stratum] type = "http" inputs = ["your_source"] uri = "http://localhost:3000/api/logs" encoding.codec = "json" ``` **Filebeat** ``` # filebeat.yml output.http: hosts: ["http://localhost:3000/api/logs"] codec.json: pretty: false ``` ### 选项 5:试用演示模式 想先看看实际效果?使用模拟日志启动: ``` # 使用演示数据启动(自动生成真实日志) docker compose --profile demo up -d ``` 这会运行一个模拟器,生成来自 5 个假服务的日志,包括支付失败、认证攻击和数据库变慢——这样你可以在不连接真实应用的情况下测试 AI。 ## ⚙️ 配置 创建 `.env` 文件(或运行 `./setup.sh` 自动完成)。 ### 远程部署(服务器/VPS) 如果你在远程服务器(而非 localhost)部署 Stratum,请设置服务器 IP: ``` # 在 .env 文件中 STRATUM_HOST=192.168.1.100 # or your-domain.com ``` 这确保仪表板可以从浏览器连接到 API。 ### 选项 1:云 LLM(Groq - 免费额度) ``` # 从 https://console.groq.com 获取免费密钥 GROQ_API_KEY=gsk_your_key_here ``` ### 选项 2:仅本地(Ollama - 无网络) ``` # 无需 API 密钥 - 完全离线 LLM_PROVIDER=ollama OLLAMA_URL=http://host.docker.internal:11434 # Use this for Docker OLLAMA_MODEL=llama3.2 # or any model you have pulled ``` 确保本地运行 Ollama 并加载模型: ``` ollama pull llama3.2 ollama serve ``` ### 可选设置 ``` # 保护您的 API STRATUM_API_KEY=your-secret-key # Slack 告警 SLACK_WEBHOOK_URL=https://hooks.slack.com/... ``` ## ❓ 常见问题 ### “需要付费吗?” **不需要!** - **选项 1:** Groq API 提供慷慨的免费额度(足够个人使用) - **选项 2:** 使用 Ollama 实现 100% 免费、完全本地的 AI(无需 API 密钥) - 所有基础设施均在 Docker 中本地运行 ### “能处理多少日志?” - **摄入:** 每秒 50,000+ 条日志 - **存储:** 数百万条日志(ClickHouse 非常高效) - **搜索:** 响应时间 <100ms ### “可以用自己的 LLM 吗?” 可以!在 `.env` 中设置 `LLM_PROVIDER=ollama` 并将 `OLLAMA_URL` 指向本地 Ollama 实例。无需 Groq API 密钥。 ### “数据会传到别处吗?” 只有 AI 查询和相关日志片段会发送到 Groq 进行分析。 你的原始日志 100% 保留在 Docker 卷中。 ### “出问题了!” ``` # 检查所有服务是否运行 docker compose ps # 检查日志中的错误 docker compose logs api # 常见修复: docker compose down docker compose up -d --build ``` ## 🆚 Stratum 与其他工具对比 | 功能 | Stratum | Datadog | Splunk | ELK | |------|---------|---------|--------|-----| | **价格** | 免费 | 昂贵 | 昂贵 | 免费 | | **安装时间** | 1 分钟 | 数小时 | 数小时 | 数小时 | | **AI 聊天** | ✅ | ✅ | ❌ | ❌ | | **自托管** | ✅ | ❌ | ❌ | ✅ | | **语义搜索** | ✅ | ❌ | ❌ | ❌ | | **根因分析** | ✅ 自动 | 手动 | 手动 | 手动 | ## 🧪 运行基准测试 ``` # 运行解析基准测试 cargo bench -p logai-core --bench parsing # 运行 RAG 基准测试 cargo bench -p logai-rag --bench rag # 压力测试(API 必须正在运行) cargo run --release --bin logai-stress -- --rate 10000 --total 100000 ``` ## 🤝 贡献 1. 叉仓库 2. 创建分支(`git checkout -b feature/awesome`) 3. 修改代码 4. 运行测试(`cargo test` 5. 推送并创建 PR ## 📜 许可证 根据 [Apache License 2.0](LICENSE) 授权——自由使用,包含专利保护! ## ⭐ 给仓库加星! 如果 Stratum 帮你节省了调试时间,请给它一颗星!这有助于他人发现它。

GitHub stars

用 ❤️ 和大量 ☕ 构建

标签:AIOps, AI 日志分析, AI 运维, API集成, Axum, ClickHouse, NATS, Qdrant, RAG, Rust, 可观测性, 可视化界面, 向量数据库, 大模型日志, 实时日志, 异常检测, 日志上下文, 日志关联, 日志分析平台, 日志分类, 日志可观测性, 日志可视化, 日志向量化, 日志处理, 日志嵌入, 日志平台, 日志异常, 日志推理, 日志搜索, 日志搜索引擎, 日志故障排查, 日志时间序列, 日志智能, 日志架构, 日志根因, 日志检索, 日志模式识别, 日志洞察, 日志特征提取, 日志相似度, 日志管道, 日志系统, 日志索引, 日志结构化, 日志聚合, 日志聚类, 日志诊断, 日志问答, 根因分析, 网络流量审计, 自然语言查询, 语义搜索, 语义理解, 请求拦截, 通知系统