- 컨테이너 오케스트레이션: 백그라운드 스레드가 트레이스 업로드를 마치기 전에 축출되거나 OOM으로 종료될 수 있는 파드 환경
- 분산 트레이닝: 여러 프로세스가 병렬로 트레이스를 기록하며, 그중 하나의 프로세스라도 실패할 수 있는 환경
- 불안정한 네트워크: Weave 서버 연결이 간헐적으로 끊기는 환경
- 배치 작업: 비정상 종료로 트레이스 데이터가 손실되면 부담이 큰 장시간 실행 작업
weave.flush() 또는 weave.finish()를 호출해 모든 데이터가 업로드되도록 하는 것도 고려하세요. 자세한 내용은 워커 프로세스에서의 트레이스 데이터 손실을 참조하세요.
쓰기 전 로그는 현재 옵트인 기능입니다. 향후 릴리스에서는 기본적으로 활성화될 예정입니다.
쓰기 전 로그 활성화
WEAVE_ENABLE_WAL 환경 변수를 true로 설정하세요:
weave.init()를 호출하기 전에 이를 설정할 수도 있습니다:
작동 방식
- Weave API에 대한 각 호출(객체 생성, 호출 시작, 호출 종료 등)은 메모리에만 유지되지 않고 디스크의 JSONL 파일에 추가됩니다.
- 각 프로세스는 자체 로그 파일에 기록하므로 병렬 프로세스 간에 충돌이 발생하지 않습니다.
- 백그라운드 전송기가 로그 파일을 읽어 해당 내용을 Weave 서버로 전송합니다.
- 데이터가 성공적으로 전송되면 로그 파일이 제거됩니다.
.weave/wal/에 저장되며, 엔터티와 프로젝트별로 구성됩니다. 각 파일에는 원시 API 요청이 JSON 객체 형식으로 한 줄에 하나씩 들어 있습니다.
클라이언트가 시작되면 이전 실행에서 생성된 기존 로그 파일이 있는지 확인합니다. 발견되면 전송기가 새 데이터와 함께 해당 파일도 전송합니다. 즉, 비정상 종료된 프로세스가 기록한 데이터는 다음에 클라이언트가 실행될 때 자동으로 복구됩니다.
환경 변수
| 변수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
WEAVE_ENABLE_WAL | bool | false | 쓰기 전 로그를 활성화합니다. true로 설정하면 Weave는 API 요청을 서버로 보내기 전에 먼저 로컬 디스크에 기록합니다. |
WEAVE_DISABLE_WAL_SENDER | bool | false | WAL sender를 비활성화합니다. true로 설정하면 Weave는 요청을 로컬 디스크에 기록하지만 서버로 전송하지 않습니다. 디버깅에 유용합니다. |