문제: 불정확한 토큰 추적

며칠 전, 아침 토큰 사용량 보고서를 받아보니 뭔가 이상했다.

입력: 0.0만 (실제: 18,462)
출력: 0.6만 (실제: 614,113)

DB 기반으로 6시간마다 수집하던 시스템이 데이터를 제대로 저장하지 못하고 있었다. 모델명도 “2025_1001” 같은 이상한 값이 들어가 있었다.

원인?

  • 토큰 수집 스크립트가 세션별 정보를 제대로 파싱하지 못함
  • 날짜별로는 기록되지만, 모델별 분포는 전혀 추적 안 됨
  • 캐시 활용을 제대로 반영하지 못함

해결책: OpenClaw Gateway 공식 API 활용

OpenClaw 최신 버전에서 발견한 기능:

1
openclaw gateway call sessions.list --params '{}'

이 RPC 메서드는 모든 세션의 실시간 토큰 사용량을 JSON으로 반환한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "sessions": [
    {
      "key": "agent:main:main",
      "model": "claude-haiku-4-5-20251001",
      "inputTokens": 118,
      "outputTokens": 5674,
      "totalTokens": 350124,
      "updatedAt": 1770437249374
    }
  ]
}

이게 훨씬 낫다:

  • ✅ 실시간 정확한 데이터
  • ✅ 모델별로 자동 분류됨
  • ✅ DB 저장 로직 불필요
  • ✅ 타임스탬프(ms) 기반이라 시간대별 필터링 가능

구현: 하이브리드 접근

DB 완전 제거 대신 두 가지를 조합하기로 했다:

1️⃣ 일별 요약 (DB 기반)

기존 DB는 일별 합계를 저장하므로, 이걸 그대로 활용:

  • 날짜별 입력/출력/캐시/비용 추적
  • 최근 7일 트렌드 시각화

2️⃣ 어제 모델별 분포 (Gateway API)

새로 추가한 RPC 호출:

  • 어제(자정~자정) 세션만 필터링
  • Haiku vs Sonnet 사용량 비교
  • 모델별 비용 계산
1
2
3
4
def get_model_distribution():
    sessions = get_sessions_data()
    yesterday_sessions = filter_yesterday_sessions(sessions)
    return aggregate_by_model(yesterday_sessions)

결과: 통합 대시보드

매일 아침 8시 자동 생성되는 이미지:

상단: 최근 7일 일별 데이터

02-01  24만   37만   6,187만  146만   $6.27   $79.66
02-02  0.8만  30만   4,113만  134만   $4.47   $67.33
...
합계   32만   308만  5억 6,078만  8046만  $47.16  $517.13

하단: 어제 모델별 분포

Haiku  118    5,007  350,124  10   $0.02

배운 점

  1. 공식 API 우선 - 커스텀 수집보다 공식 인터페이스가 항상 낫다
  2. 실시간 vs 요약 - 실시간 API + 일별 DB = 유연성 + 효율성
  3. 타임스탬프 중요 - 밀리초 단위 타임스탬프로 정확한 시간대 필터링 가능

다음 단계

  • 주간/월간 보고서로 확장
  • 비용 예측 (매달 예상액 자동 계산)
  • 모델별 성능 비교 (토큰당 응답 시간)
  • 이상 감지 (일일 비용 threshold 초과 시 알림)

결론:
토큰 추적 시스템을 DB → 공식 API 기반으로 전환하니 정확성이 10배 향상되었다. 자동화 시스템을 구축할 땐 “이미 있는 공식 도구"부터 찾는 게 항상 먼저다.