YEDASAVG/Stratum
GitHub: YEDASAVG/Stratum
一个基于 AI 的日志智能分析系统,通过语义搜索与 RAG 技术实现自然语言问答、异常检测与根因定位。
Stars: 49 | Forks: 2
Stratum
🧠 问你的日志问题。用大白话获取答案。
安装 •
功能 •
工作原理 •
常见问题
## 🤔 这是什么?
你知道当你有成千上万的日志文件,而某处出问题时,你却要花数小时在其中搜索吗?
**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 帮你节省了调试时间,请给它一颗星!这有助于他人发现它。
用 ❤️ 和大量 ☕ 构建
标签:AIOps, AI 日志分析, AI 运维, API集成, Axum, ClickHouse, NATS, Qdrant, RAG, Rust, 可观测性, 可视化界面, 向量数据库, 大模型日志, 实时日志, 异常检测, 日志上下文, 日志关联, 日志分析平台, 日志分类, 日志可观测性, 日志可视化, 日志向量化, 日志处理, 日志嵌入, 日志平台, 日志异常, 日志推理, 日志搜索, 日志搜索引擎, 日志故障排查, 日志时间序列, 日志智能, 日志架构, 日志根因, 日志检索, 日志模式识别, 日志洞察, 日志特征提取, 日志相似度, 日志管道, 日志系统, 日志索引, 日志结构化, 日志聚合, 日志聚类, 日志诊断, 日志问答, 根因分析, 网络流量审计, 自然语言查询, 语义搜索, 语义理解, 请求拦截, 通知系统