🛡️ ROGLAG — Self-host Realtime Docs

ระบบตรวจจับความเสี่ยงจาก security log แบบ realtime + RAG ที่ self-host ได้ทั้งหมด รันได้แม้ออฟไลน์

FastAPIWebSocket Realtime Rule ClassifierRAG PostgreSQL / SQLiteDocker

1 ภาพรวม

ทำอะไร และต่างจาก demo เดิมอย่างไร

ROGLAG รับ log (อัปโหลด CSV หรือ stream เข้ามา) → classify ด้วย rule ทันที (brute force, port scan, web attack, priv esc, data exfil, C2 beacon) → เก็บลง database → push เข้าหน้าเว็บแบบ realtime ผ่าน WebSocket → ถามตอบด้วย RAG ภาษาไทยได้

2 วิธีรัน

เลือกได้ 3 แบบ — แนะนำ Docker สำหรับคนอื่นที่อยากรันต่อ

A) Docker Compose — full stack (PostgreSQL) ✅ แนะนำ

docker compose up --build
# เปิด http://localhost:8000

คำสั่งเดียวได้ทั้ง API + PostgreSQL พร้อม volume เก็บข้อมูลถาวร

B) Docker Compose — SQLite ล้วน (ไม่ต้องมี postgres)

docker compose up api-sqlite --build
# เปิด http://localhost:8000

C) รันตรงด้วย Python (dev)

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
# เปิด http://localhost:8000  (ใช้ SQLite ที่ ./data/lograg.db อัตโนมัติ)
รันด้วย 1 worker เท่านั้น (default) เพราะ WebSocket manager เก็บ connection ใน process เดียว — ถ้าจะ scale หลาย worker ต้องใส่ Redis pub/sub (ดูหัวข้อ Production)
เปิด LLM: ตั้งค่า OPENROUTER_API_KEY ใน .env (ดู .env.example) แล้วติ๊ก "ใช้ LLM" ในแท็บ Ask

3 ฟีเจอร์ในหน้า Console

⚡ ส่ง Mock Log

ปุ่ม burst สร้าง log จำลองหลากหลาย ไม่ซ้ำทุกครั้ง ยิงเข้า pipeline จริง เห็นใน feed ทันที

▶ Live Stream

สตรีม mock log ต่อเนื่องตาม rate/interval ที่ตั้ง เพื่อจำลองทราฟฟิกจริงสำหรับทดสอบ

⬇ Generate CSV

สร้างไฟล์ CSV ใหม่ที่สุ่มไม่ซ้ำ (unseeded) ดาวน์โหลดไปทดสอบ upload ได้

🔍 Upload CSV

อัปโหลด CSV → classify ทุกแถว realtime → เทียบความแม่นยำกับ label เดิม (ถ้ามี)

📡 Live Feed

แสดง event เข้ามาสดๆ สีตาม severity + เหตุผลการตรวจจับ + MITRE

🚨 Alerts

รวม critical event เป็น alert (group ตาม IP/user) พร้อม runbook แนะนำ

💬 Ask (RAG)

ถามภาษาไทยเกี่ยวกับ log ที่เก็บไว้ — keyword retrieval + สรุป (local หรือ LLM)

📊 Stats

สัดส่วน category / severity / risk rate แบบ realtime

4 Data Flow

CSV upload / Mock / Stream parse detect_rule()
classify
DB
log_events
WebSocket
broadcast
Browser feed

โค้ดหลัก: app/ingest.py (parse+classify+store) · app/realtime.py (WebSocket manager + stream) · app/rag.py (retrieval+answer) · app/main.py (routes)

5 API Reference

MethodPathหน้าที่
GET/healthสถานะระบบ (storage, llm_ready, ws_clients, stream_running)
GET/api/statsสถิติ category/severity/source/top_ips
GET/api/logs?limit&offset&category&severity&source&qquery log ที่เก็บไว้
GET/api/alerts?limitcritical alerts ที่ group แล้ว
POST/api/askRAG Q&A — body: {question, use_llm, model, limit}
POST/api/ingest/csvอัปโหลดไฟล์ CSV (multipart file) → ตรวจจับ + broadcast
GET/api/generate/csv?count&profileดาวน์โหลด CSV สุ่มใหม่ (profile: mixed/attack/realistic)
POST/api/mock/emit?count&profileยิง mock burst เข้าระบบ realtime
POST/api/mock/stream/start?rate&interval&profileเริ่มสตรีม mock ต่อเนื่อง
POST/api/mock/stream/stopหยุดสตรีม
WS/wsrealtime feed — รับ {type:event|summary|hello}

ตัวอย่าง (curl)

# ยิง mock 50 event แบบ attack-heavy
curl -X POST "http://localhost:8000/api/mock/emit?count=50&profile=attack"

# ถาม RAG
curl -X POST http://localhost:8000/api/ask \
  -H "Content-Type: application/json" \
  -d '{"question":"มี brute force จาก ip ไหนบ้าง"}'

# อัปโหลด CSV
curl -X POST http://localhost:8000/api/ingest/csv -F "file=@roglag_logs.csv"

6 รูปแบบ CSV

คอลัมน์ที่ระบบอ่าน — ต้องมีอย่างน้อย message (ใช้ตรวจจับ) หรือ source

timestamp,source,category,severity,message,src_ip,dst_ip,user,dst_port,path,action
ใช้ปุ่ม Generate CSV สร้างไฟล์ตัวอย่างที่ถูกฟอร์แมตพอดี แล้วเอามา Upload ทดสอบได้ทันที

7 ต่อ n8n (automation)

ใช้ ROGLAG เป็น detection engine แล้วให้ n8n ทำ action ต่อ

  1. n8n Schedule node เรียก GET /api/alerts?limit=20 ทุก X นาที (หรือเก็บ last_seen ไว้กรองของใหม่)
  2. Filter เฉพาะ alert ใหม่ → HTTP Request ไป enrich (AbuseIPDB/GeoIP ด้วย src_ip)
  3. เรียก POST /api/ask ให้สรุปภาษาไทย แนบเข้า ticket
  4. Action: สร้าง ticket (Jira/GitHub), แจ้ง Slack/LINE, (ออปชัน) block IP
การ block IP อัตโนมัติเป็น action ผลกระทบสูง — ควรมี allowlist + approval node + TTL

8 หมายเหตุ Production / Security

ยังไม่มี authentication. CORS เปิด * และทุก endpoint เปิด public — เหมาะกับ dev/self-host ในเครือข่ายปิดเท่านั้น ก่อนขึ้นจริงต้องวาง reverse proxy (Traefik/Caddy) + auth (API key/OAuth) หน้า API