Langfuse LLM 비용 집계 누락 — 워커 이미지에 포함된 모델 단가
LLM 호출은 게이트웨이를 하나 두고 그리로 모아서 내보냅니다. 어느 서비스가 어떤 모델을 얼마나 쓰는지 한군데서 보려는 목적이고, 그 기록은 Langfuse 로 갑니다.
Langfuse 는 호출 하나를 트레이스로 남기면서 모델 이름과 입출력 토큰 수를 같이 받고, 그 토큰 수에 모델별 단가를 곱해 비용을 계산해 주기 때문에 팀별 사용량 집계도 여기서 뽑습니다. Langfuse 자체는 Helm 차트로 클러스터에 띄워 뒀습니다.
그런데 새로 나온 모델은 트레이스는 잘 들어오는데 비용이 $0.00 로 집계됐습니다. 토큰 수는 맞게 찍히고 단가만 0 이었고, Model Definitions 목록에도 그 모델이 없었습니다.
원인 — 워커 이미지에 번들된 기본 단가
Langfuse 워커는 기동할 때 upsertDefaultModelPrices() 를 돌려, 이미지에 번들된
default-model-prices.json 으로 DB 의 기본 단가를 시딩합니다.
문제는 배포된 워커 이미지가 그 모델이 추가되기 전 버전이었다는 겁니다. 이미지 안의 JSON 에 새 모델 단가 행이 없으니 DB 는 한 번 시딩된 뒤로 그 모델 없이 그대로 남고, 트레이스는 모델 이름으로 매칭이 안 되니 단가 0 으로 계산됩니다.
여기에 Helm 차트 버전과 실제 워커 이미지(appVersion) 가 따로 논다는 점이 겹칩니다. 차트만 최신이라고 워커 이미지까지 최신인 건 아니라 단가 JSON 이 옛날 버전에 묶여 있었습니다.
번들 JSON 에 그 모델이 있는지는 업스트림에서 직접 확인합니다.
gh api repos/langfuse/langfuse/commits?path=.../default-model-prices.json
그 모델 단가가 언제 추가됐는지 커밋 날짜로 나오고, 쓰고 있는 워커 이미지가 그보다 먼저 만들어졌으면 JSON 에 없는 게 맞습니다.
해결 — 워커 이미지 업그레이드로 자동 시딩
차트를 올려 워커 이미지가 새 JSON 을 포함하게 하면 재기동 때 upsertDefaultModelPrices() 가 그
모델 단가를 자동으로 시딩합니다. 급하면 Model Definitions 에 단가를 수동으로 넣어도 되지만
근본은 이미지 갱신입니다.
단가 데이터는 설정이 아니라 이미지 버전
이미지가 스스로 기준 데이터를 시딩하는 구조면 그 데이터는 설정이 아니라 이미지 버전이 좌우합니다. 단가나 기본값 같은 참조 데이터가 안 맞을 때 설정 화면만 뒤지면 아무것도 안 나오고, 배포된 이미지가 그 데이터를 담을 만큼 최신인지를 봐야 합니다.
Helm 으로 올린 컴포넌트에서 이런 게 걸리면 차트 버전 말고 appVersion, 그러니까 실제로 떠 있는
이미지 태그를 확인합니다. 차트는 최신인데도 왜 안 되냐는 상황이 대개 여기서 갈립니다.
댓글 0