Files
obsidian/history/2026-04-08-anomaly-detect-iterations.md
kappa 2356b86d36 obsidian: 정본 문서에서 히스토리/인시던트 분리 완료
15개 정본 문서에서 날짜별 변경이력, 인시던트 기록, 폐기된 구현 상세를
history/ 디렉토리로 분리. 정본은 현재 상태만 기술하는 백서 형태로 정리.
각 정본에 history 위키링크 추가.

분리된 history 파일 12건:
- apisix git push 500, k3s postgresql migration, apisix→traefik 전환
- netbis DDoS 공격, gitea 이전/분리, usb 2.5g hang + NFS hard mount
- supabase→patroni, apisix etcd 통합/분리, anomaly-detect 재설계
- patroni failover incident, zlambda nixos migration, ops-agents setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 12:09:21 +09:00

2.8 KiB

date, topic, areas, tags
date topic areas tags
2026-04-08 anomaly-detect 3차 재설계 과정 (gemma → cohort → agentic Grok-4)
infra/anomaly-detect.md
infra/crowdsec-safeline.md
history
anomaly-detect
crowdsec
ai
grok

anomaly-detect 시스템의 3번의 설계 반복과 최종 agentic 구조 확정 과정.

1차 구현 (2026-04-08 초반) — gemma4:e4b + stats 파이프라인

per-IP 통계 게이트(count/4xx/5xx/499/distinct paths) → 후보 N개 → ollama gemma4:e4b(Q4_K_M, 8.0B) yes/no 분류. Python이 축을 정의하고 LLM은 판정만 수행하는 구조.

2차 구현 (같은 날) — cohort 탐지 추가

_cohort_path_candidates, _cohort_ua_candidates 등 집단 축 탐지 로직 추가. 여전히 "Python이 탐지, LLM이 분류"라는 본질적 한계 동일.

코드 리뷰 수정 2회

초기 리뷰 (커밋 d5310f0)

  • LAPI POST 실패 시 dedup 선기록 버그 수정
  • XFF CSV 파싱 버그 수정 (extract_client_ip() 헬퍼)
  • 사설망/Tailscale 필터 개선 (ipaddress.ip_address().is_private)
  • dedup.json 원자적 쓰기 (tempfile + os.replace)

2차 리뷰 (커밋 b0e3c68) — High 5건 / Medium 4건

  • H1: events_count 프로토콜 오용 → sample 10건을 events에 풀어서 넣기
  • H2: limit=20000 raw 로그 pull → | stats by (remote_addr) 서버측 집계
  • H4: prompt injection via path → json.dumps + 경고 삽입
  • H5: num_predict=80 한국어 truncation → 256
  • M1~M4, M7: start_at/stop_at, 파일 핸들 누수, ratio에 499 포함, set cap, housekeeping

남은 설계 이슈

  • H3: 분산 봇넷 대비 게이트 사각지대 (per-IP 게이트의 한계)

3차 재설계 — agentic 구조 (최종)

사용자 원래 의도 "시계열 DB를 AI에 연결하면 AI가 알아서 찾는다"에 부합하도록 전면 재설계. OpenRouter x-ai/grok-4-fast에 tool 2개(logsql_query, ban_ips)만 노출하는 agentic 구조.

모델 벤치마크 결과

모델 비용 결과
x-ai/grok-4-fast 4 $0.0036 정답
qwen/qwen3-235b-a22b-2507 7 $0.0012 정답
google/gemini-2.0-flash-001 10(max) $0.0026 결론 없음
deepseek/deepseek-chat-v3.1 10(max) $0.0127 결론 없음

E2E 검증

  • VictoriaLogs에 270 rows 주입, Grok-4-fast 5턴에 31개 공격 IP 정확 식별, 정상 IP 0건 ban
  • DRY_RUN=0 활성화, 실운영 개시

전임자 폐기

  • ddos-detect (Go, jp1 crowdsec 컨테이너, 60s 폴링, Claude CLI sonnet 호출) — 60s 폴링 + 동기 Claude CLI 구조 한계로 폐기
  • 제거 항목: ddos-detect.service, Go 바이너리+소스, ddos-detect.sh, extract_behavior.py, ddos-logs/

참조

  • infra/anomaly-detect.md — 현재 agentic 구조
  • Gitea: kaffa/anomaly-detect, kaffa/ddos-detect(보존)