콘텐츠로 이동

8.4. 라우터 통계 — 집계 범위

통계 → 라우터 탭은 번들된 Continuum Router의 /admin/stats 엔드포인트에서 데이터를 읽어 전체 요청 수, 토큰 합계, 모델별 사용량, 백엔드별 상태, 지연 시간 백분위수를 표시합니다. 일부 트래픽 형식은 라우터가 정상적으로 요청을 전달하고 있더라도 아직 카운터에 반영되지 않습니다.

이 문서는 현재 어떤 트래픽이 집계되고 어떤 트래픽은 집계되지 않는지, 그리고 외부 TCP로 노출된 라우터를 모니터링하는 임시 방법을 설명합니다.

현재 집계되는 트래픽

OpenAI 호환 형식으로 들어오는 요청에 대해서는 라우터의 요청 카운터가 정상적으로 증가합니다.

  • POST /v1/chat/completions
  • POST /v1/completions
  • POST /v1/embeddings
  • POST /v1/responses
  • POST /v1/images/generations, /v1/images/edits, /v1/images/variations
  • POST /v1/rerank
  • POST /embed_sparse

이 경로들은 라우터의 메인 프록시 핸들러를 통과하며, 매 요청마다 통계 미들웨어가 호출됩니다. 원격 클라이언트가 어떤 리스너(루프백, 외부 TCP)로 접속하든 동일하게 집계됩니다.

현재 집계되지 않는 트래픽

Anthropic Messages API 형식으로 들어오는 요청은 아직 집계되지 않습니다.

  • POST /anthropic/v1/messages
  • POST /anthropic/v1/messages/count_tokens

라우터는 이러한 요청도 정상적으로 백엔드에 전달하고 클라이언트는 정상 응답을 받지만, /admin/stats 회계 계층이 호출되지 않습니다. 공유 StatsCollector가 호출되지 않으므로 카운터가 0인 상태로 유지됩니다.

이것이 "라우터는 정상이고 가동 시간(uptime)도 정상인데 total_requests가 계속 0"으로 표시되는 가장 흔한 원인입니다. Claude Code를 비롯한 Anthropic 형식 클라이언트들은 /v1/messages로 통신하므로, 이런 형식의 트래픽만 처리하는 라우터는 며칠 동안 실제 트래픽이 흘렀더라도 통계 UI에서는 한가해 보이게 됩니다.

직접 확인하는 방법

두 가지 형식으로 한 번씩 호출한 뒤 통계를 폴링하여 동작을 확인할 수 있습니다.

# OpenAI 형식 — 카운터 증가
curl -s http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"<모델명>","messages":[{"role":"user","content":"hi"}]}'
curl -s http://127.0.0.1:8000/admin/stats | jq '.overall.total_requests'

# Anthropic 형식 — 카운터 그대로
curl -s http://127.0.0.1:8000/anthropic/v1/messages \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: <키>' \
  -H 'anthropic-version: 2023-06-01' \
  -d '{"model":"<모델명>","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
curl -s http://127.0.0.1:8000/admin/stats | jq '.overall.total_requests'

OpenAI 호출 후에만 카운터가 증가한다면 이 문서가 설명하는 집계 범위 문제를 직접 확인한 것입니다.

임시 모니터링 방법

라우터의 /admin/stats가 모든 형식을 집계하기 전까지, 외부 TCP로 노출된 라우터를 모니터링하려면 다음을 권장합니다.

  1. 애플리케이션 로그. Backend.AI GO의 설정 → 로그에서 모든 라우터 트래픽을 확인할 수 있습니다. 라우터 소스로 필터링하면 API 형식과 무관하게 모든 수신 요청을 볼 수 있습니다.
  2. 백엔드 텔레메트리. 클라우드 제공자(Anthropic, OpenAI, Bedrock 등)의 사용량 대시보드는 라우터가 전달한 모든 요청을 기록합니다. 자체 호스팅 백엔드(llama.cpp, vLLM)의 경우 백엔드 자체의 메트릭 엔드포인트에서도 확인할 수 있습니다.
  3. 통계 → 인앱 탭. Backend.AI GO 내부에서 발생한 모든 채팅 완성 요청은 라우터 통계 엔드포인트와 별개로 인앱 탭에서 집계됩니다.

근본 원인 수정 진행 상황

이 문제는 Backend.AI GO의 배선이 아닌, 상류의 Continuum Router에 있습니다. 진행 상황은 다음 이슈에서 추적합니다.

수정이 포함된 Continuum Router 릴리스가 출시되면 Backend.AI GO는 scripts/download-continuum-router.sh의 버전을 갱신합니다. 다음 설치부터 모든 Anthropic 트래픽이 자동으로 통계 → 라우터 탭에 표시되며 별도의 마이그레이션은 필요하지 않습니다.

집계가 정상화되면 통계 → 라우터 빈 상태에 표시되는 힌트는 자동으로 사라집니다.