roglag / README.md
deploy
deploy ROGLAG threat console
c4f5819
|
Raw
History Blame Contribute Delete
5.71 kB
---
title: ROGLAG Threat Console
emoji: 🛡️
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---
# ROGLAG Demo
AI RAG demo สำหรับตรวจความเสี่ยงจาก security log:
- Monitor dashboard แยก category/severity/source
- Critical alert center พร้อม badge/banner/toast ในหน้าเว็บ
- Rule classifier สำหรับ pattern ชัดเจน เช่น brute force, port scan, SQLi/XSS, C2 beacon
- Local RAG retrieval จาก `Data/files/security_logs.jsonl`
- Q&A ภาษาไทยแบบ local fallback
- Optional OpenRouter API สำหรับ LLM answer
## Run
```bash
cd "/Volumes/Drive D/Code/Work/Work/LAGROG"
python3 server.py
```
เปิด:
```text
http://127.0.0.1:8765
```
## Use OpenRouter
Local mode ใช้ได้ทันที ไม่ต้องมี key. ถ้าจะให้ LLM ช่วยสรุป:
```bash
export OPENROUTER_API_KEY="your_key_here"
export OPENROUTER_MODEL="openrouter/free"
python3 server.py
```
หน้าเว็บจะใช้ local fallback ได้ทันที และจะเรียก LLM อัตโนมัติเมื่อมี key
โปรเจกต์อ่าน `.env` อัตโนมัติด้วย key เหล่านี้:
```text
OPENROUTER_API_KEY=...
OPENROUTER_MODEL=openrouter/free
OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free
```
## Build Vector Index
ตัว demo ใช้ keyword retrieval ได้ทันที แต่ถ้าจะใช้ embedding/vector RAG จริง ให้ build index ก่อน:
```bash
python3 build_vector_index.py --limit 10000 --batch-size 32
python3 server.py
```
ไฟล์ vector DB จะถูกสร้างที่:
```text
Data/files/lograg_vectors.sqlite
```
ถ้าไฟล์นี้มีอยู่ server จะใช้ vector retrieval อัตโนมัติ และ fallback เป็น keyword retrieval เมื่อ OpenRouter rate-limit หรือ vector index ยังไม่มี
## Production Vector RAG
ผล RAG บน local กับ Vercel จะไม่เหมือนกันถ้า local ใช้ `Data/files/lograg_vectors.sqlite` แต่ Vercel ใช้ keyword fallback เพราะไฟล์ SQLite vector ขนาดใหญ่ถูก exclude จาก deploy.
แนะนำสำหรับ production demo:
- ใช้ **Qdrant Cloud** เป็น vector DB ภายนอก
- ใช้ `OPENROUTER_EMBED_MODEL` ตัวเดียวกับตอนสร้าง index
- ตั้ง env บน Vercel ให้ครบ แล้ว API จะใช้ `retrieval=vector_db` อัตโนมัติ
Env ที่ต้องเพิ่มบน Vercel:
```text
OPENROUTER_API_KEY=...
OPENROUTER_MODEL=openrouter/free
OPENROUTER_EMBED_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free
QDRANT_URL=https://xxxxx.qdrant.io
QDRANT_API_KEY=...
QDRANT_COLLECTION=roglag_logs
```
Upload vector index เข้า Qdrant:
```bash
python3 upload_qdrant_index.py --limit 10000 --batch-size 32
```
เพิ่ม env บน Vercel:
```bash
vercel env add QDRANT_URL production
vercel env add QDRANT_API_KEY production
vercel env add QDRANT_COLLECTION production
vercel env add OPENROUTER_EMBED_MODEL production
vercel --prod
```
## Model notes
สำหรับ demo ฟรี แนะนำเริ่มที่:
- `openrouter/free` - ง่ายสุด ให้ OpenRouter route ไป free model ที่ใช้ได้ตอนนั้น
- `openai/gpt-oss-120b:free` - reasoning/Q&A ดี เหมาะกับสรุป incident
- `nvidia/nemotron-3-ultra:free` - context ใหญ่ เหมาะกับ log context ยาว
- `google/gemma-4-31b:free` - multilingual/doc understanding ดี
- `nvidia/llama-nemotron-embed-vl-1b-v2:free` - embedding ฟรีสำหรับ vector RAG
Free models มี rate limit และ availability เปลี่ยนได้ ควรมี local fallback เสมอ
## Regenerate data
```bash
cd Data/files
python3 gen_logs.py -n 10000 --profile mixed --seed 42
python3 gen_logs.py -n 50000 --profile realistic --seed 42
```
ไฟล์ชุดใหญ่สำหรับ train/eval แยกไว้แล้ว:
```text
Data/files/security_logs_extended_50k.jsonl
Data/files/security_logs_extended_sample_2k.jsonl
```
ถ้าจะรัน local server กับชุด 50k:
```bash
LOGRAG_DATA_FILE=Data/files/security_logs_extended_50k.jsonl python3 server.py
```
## Critical Alerts
Local และ Vercel API มี endpoint เดียวกัน:
```text
GET /api/alerts?limit=20
```
หน้าเว็บจะ poll ทุก 15 วินาที ถ้าเจอ critical alert ใหม่จะขึ้น toast และกด badge บน navbar เพื่อเปิด Incident queue ที่ filter เป็น Critical ทันที
## Deploy on Vercel
โปรเจกต์มี `vercel.json` และ `api/*.py` แล้ว ดังนั้น deploy เป็น static frontend + Python Functions ได้เลย:
```bash
npm i -g vercel
vercel login
vercel env add OPENROUTER_API_KEY
vercel --prod
```
บน Vercel จะใช้ `Data/files/security_logs.jsonl` ชุด 10k เพื่อให้ bundle เล็กและ cold start เร็ว ส่วน vector SQLite และไฟล์ 50k ถูก exclude จาก deployment. Local ยังใช้ vector index ได้ตามเดิม.