콘텐츠로 이동
Study NoteLangfuse

9. 저장소·backup·retention

Langfuse backup은 PVC snapshot 하나가 아니라 같은 시점의 네 저장소와 암호화 key를 다시 연결하는 일이다

이 장에서 처음 나오는 말5개
RPORecovery Point Objective
장애 때 잃어도 되는 최대 데이터 시간이다.
RTORecovery Time Objective
서비스와 데이터 접근을 복구해야 하는 목표 시간이다.
retention
trace·observation·score·media를 조회 가능하게 보관하는 기간 정책이다.
TTLTime To Live
ClickHouse row나 object가 일정 시간이 지나면 만료되게 하는 규칙이다.
raw event
Worker 처리 전 S3에 저장하는 원본 ingestion payload다.
저장소핵심 데이터복구하지 못하면
Postgresuser·org·project·key·prompt·dataset·evaluator configlogin·prompt·project 관계와 설정 손실
ClickHouseobservation·score·분석 tabletrace UI·dashboard·품질 역사 손실
Redis/Valkeyqueue·cache·coordination처리 대기 event와 cache 일관성 영향
S3 event bucketraw ingestion eventqueue 재처리·audit 원본 손실
S3 media bucketimage·audio attachmenttrace의 multimodal content 깨짐
Secret storeSALT·NEXTAUTH_SECRET·ENCRYPTION_KEYkey 검증·저장 credential 복호화 실패

Redis는 cache만이 아니라 queue도 맡는다. “Redis는 재생성 가능”이라고 단정하려면 S3의 어떤 raw event를 어떤 id로 다시 enqueue할 수 있는지 실제 recovery 절차가 있어야 한다.

성장률을 event 크기에서 계산한다

섹션 제목: “성장률을 event 크기에서 계산한다”
일일 logical ingest
= 일 요청 수
× 요청당 observation 수
× observation 평균 payload
× replication/dual-write/backfill 계수

Prompt·response 전문, retrieved documents와 judge reasoning이 평균 payload를 크게 만든다. application traffic이 2배가 아니어도 agent step 수와 online evaluation 비율이 늘면 observation은 더 빠르게 증가한다.

capacity review에는 다음을 같은 그래프에 둔다.

  • 하루 observation 수와 평균/상위 payload bytes
  • ClickHouse data·index·system table disk와 merge backlog
  • event/media bucket 증가량과 multipart 실패
  • Redis queue depth·oldest age·memory
  • retention deletion throughput과 실패
  • v4 migration 중 dual write/backfill의 임시 배수

Retention을 데이터 종류로 나눈다

섹션 제목: “Retention을 데이터 종류로 나눈다”
데이터보존 예시이유
metadata·timing·usage90일trend·capacity·release 비교
sampled masked content30일incident와 품질 debug
media승인된 짧은 기간크기·개인정보 위험
dataset item명시적 lifecycleregression contract
audit/export별도 archive policy제품 UI retention과 분리

공식 project-level retention은 self-hosted Enterprise Edition 기능이다. 정책이 없으면 self-hosted event data가 자동 삭제되지 않는다. OSS에서 ClickHouse TTL이나 S3 lifecycle을 직접 쓰면 entity 관계와 media reference를 깨뜨리지 않는지 별도 검증한다.

대상방식 예시검증
PostgresPITR + 정기 logical/physical backup새 instance에 restore·migration
ClickHousemanaged backup, native backup 또는 volume snapshotrepresentative query와 row count
RedisHA + persistence/backup 정책queue 장애 시 duplicate/loss test
S3replication·object lock/backup 정책raw event와 media checksum
Secret별도 encrypted escrowDB와 함께 key 검증·복호화

ClickHouse replica는 backup이 아니다. 같은 operator 오류나 잘못된 delete가 모든 replica에 복제된다. S3 versioning도 무조건 켜지 않는다. ClickHouse external disk는 파일을 자주 갱신해 version이 빠르게 늘 수 있으므로 공식 권고와 storage 특성을 확인한다.

복구를 secret·key부터 Postgres와 S3, ClickHouse, Redis, 애플리케이션, 검증 순으로 되돌리는 여섯 단계

정확한 순서는 장애와 backup 방식에 따라 달라질 수 있지만 Web/Worker를 먼저 열어 새 event가 불완전한 저장소에 섞이게 하지 않는다. restore point 사이 시간 차이 때문에 project는 있는데 ClickHouse row가 없거나, queue reference가 없는 object를 가리킬 수 있다.

  • 기존 user가 SSO/login 후 project를 볼 수 있는가
  • project key로 새 trace를 ingest하고 조회할 수 있는가
  • 과거 trace의 tree·score·media가 열린다
  • production prompt label이 올바른 immutable version을 가리킨다
  • dataset과 experiment run의 trace link가 기대만큼 남아 있다
  • queue를 재처리해도 observation이 비정상 중복되지 않는다
  • backup 이후 변경된 key와 encrypted LLM credential을 읽을 수 있다

Retention은 UI에서 보이지 않는 것과 법적 삭제를 구분한다. ClickHouse row만 지우고 raw event나 media backup이 남으면 완전 삭제가 아니다. 삭제 대상과 backup 만료·export archive·object version까지 data map에 포함한다.

장기 분석이 필요하면 product hot store를 무한히 늘리기보다 승인된 enriched observation export를 별도 lake에 두고 접근·schema·deletion 정책을 독립 운영한다.