roglag / README.md
deploy
deploy ROGLAG threat console
c4f5819
|
Raw
History Blame Contribute Delete
5.71 kB
metadata
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

cd "/Volumes/Drive D/Code/Work/Work/LAGROG"
python3 server.py

เปิด:

http://127.0.0.1:8765

Use OpenRouter

Local mode ใช้ได้ทันที ไม่ต้องมี key. ถ้าจะให้ LLM ช่วยสรุป:

export OPENROUTER_API_KEY="your_key_here"
export OPENROUTER_MODEL="openrouter/free"
python3 server.py

หน้าเว็บจะใช้ local fallback ได้ทันที และจะเรียก LLM อัตโนมัติเมื่อมี key

โปรเจกต์อ่าน .env อัตโนมัติด้วย key เหล่านี้:

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 ก่อน:

python3 build_vector_index.py --limit 10000 --batch-size 32
python3 server.py

ไฟล์ vector DB จะถูกสร้างที่:

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:

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:

python3 upload_qdrant_index.py --limit 10000 --batch-size 32

เพิ่ม env บน Vercel:

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

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 แยกไว้แล้ว:

Data/files/security_logs_extended_50k.jsonl
Data/files/security_logs_extended_sample_2k.jsonl

ถ้าจะรัน local server กับชุด 50k:

LOGRAG_DATA_FILE=Data/files/security_logs_extended_50k.jsonl python3 server.py

Critical Alerts

Local และ Vercel API มี endpoint เดียวกัน:

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 ได้เลย:

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 ได้ตามเดิม.