피드로 돌아가기
Dev.toBackend
원문 읽기
4 SQLite Tables Replaced My $200/mo AI Observability Stack
엔지니어가 SQLite 4개 테이블과 Python 47줄 코드로 월 $200 AI 옵저버빌리티 스택을 대체하며 11분 내 무음 할루시네이션 탐지
AI 요약
Context
4개 LLM 제공자의 16개 에이전트 팀을 운영하면서 LangSmith Teams(월 $400), Self-hosted Langfuse(2GB+ RAM 필수), 실험 단계의 OpenTelemetry GenAI 의미론 등 기존 옵저버빌리티 솔루션이 1GB RAM 무료 인스턴스에서 즉시 운영 불가능했다. 다중 모델 라우팅에서 어느 모델이 어느 단계를 처리했는지, 출력이 실제로 사용되었는지, 라우팅 결정 근거가 무엇인지 파악할 수 없었다.
Technical Solution
- SQLite 4개 테이블 설계: audit_log(LLM 호출·레이턴시·토큰 카운트), events(이벤트 타입·긴급도), decisions(라우팅 결정), memories(에이전트 메모리)로 스키마 구성
- WAL 모드와 busy_timeout 설정: PRAGMA journal_mode=WAL과 busy_timeout=5000ms로 동시 읽기 대시보드와 에이전트 쓰기 작업 처리
- 이벤트 버스 패턴 구현: ControlPlane.emit()을 통해 모든 에이전트 액션을 중앙화하고 구독자(bias_firewall, cost_tracker, dashboard)가 독립적으로 라우팅되도록 분리
- 타임스탐프 기반 상관관계 수립: 적절한 상관관계 ID 대신 BETWEEN 절과 타임스탐프 근접도로 테이블 간 조인 구현
- 단계적 도입 전략: 가장 중요한 LLM 호출에 audit_log INSERT 추가 → 이벤트 버스로 에이전트 감싸기 → 진단 쿼리 작성 → decisions 테이블 추가
Impact
- 338개 감사 항목과 108개 이벤트로 비용 기반 모니터링이 놓친 3개의 무음 실패 탐지
- 월 $200 옵저버빌리티 솔루션 비용 절감
- 1GB Oracle Cloud 무료 인스턴스에서 50MB 미만 RAM 소비
- 구현 시간 1주말(weekend)
- 할루시네이션 탐지 시간 11분
Key Takeaway
OpenTelemetry 같은 표준 솔루션이 프로덕션 안정성에 도달하기 전에, 제약 환경에서는 완전히 이해 가능한 간단한 스키마로 주말에 구축한 SQLite 기반 감시 시스템이 더 신뢰할 수 있으며, 나중에 OTel 스팬으로 마이그레이션할 수 있는 명확한 경로를 유지할 수 있다.
실천 포인트
다중 LLM 모델을 오케스트레이션하는 AI 에이전트 시스템을 운영하는 팀에서 각 호출 후 model_name, latency_ms, token_in, token_out을 audit_log 테이블에 INSERT하고, 에이전트 액션을 중앙 emit() 함수로 감싸서 구독자 패턴으로 로깅을 분리하면 기존 $200/월 이상의 상용 옵저버빌리티 도구 없이 라우팅 결정과 무음 실패를 추적할 수 있다.