- 컨테이너 오케스트레이션: 백그라운드 스레드가 트레이스 업로드를 마치기 전에 파드가 축출되거나 OOM으로 강제 종료될 수 있는 경우
- 분산 트레이닝: 여러 프로세스가 병렬로 트레이스를 기록하고, 그중 어느 프로세스든 실패할 수 있는 경우
- 불안정한 네트워크: Weave 서버와의 연결이 간헐적으로 끊기는 환경
- 배치 작업: 크래시로 트레이스 데이터가 손실되면 피해가 큰 장기 실행 작업
weave.flush() 또는 weave.finish()를 호출하여 모든 데이터가 업로드되도록 하는 것도 고려하세요. 자세한 내용은 워커 프로세스의 트레이스 데이터 손실을 참조하세요.
쓰기 전 로그는 옵트인 방식입니다. 향후 릴리스에서는 기본적으로 활성화될 예정입니다.
쓰기 전 로그 활성화
Weave 클라이언트에서 WAL을 활성화하려면WEAVE_ENABLE_WAL 환경 변수를 true로 설정하세요.
weave.init()을 호출하기 전에 Python 코드에서 설정할 수도 있습니다.
작동 방식
WAL을 활성화하면 다음과 같이 동작합니다.- Weave는 Weave API에 대한 각 호출(객체 생성, call 시작, call 종료 등)을 메모리에만 보관하지 않고 디스크의 JSONL 파일에 추가합니다.
- 각 프로세스는 자체 로그 파일에 기록하므로 병렬 프로세스 간에 충돌이 발생하지 않습니다.
- 백그라운드 전송기가 로그 파일을 읽어 그 내용을 Weave 서버로 플러시합니다.
- 데이터 전송이 완료되면 Weave는 해당 로그 파일을 삭제합니다.
.weave/wal/에 entity 및 프로젝트별로 정리되어 저장됩니다. 각 파일에는 원시 API 요청이 한 줄에 하나씩 JSON 객체 형태로 저장됩니다.
클라이언트는 시작할 때 이전 실행에서 남은 로그 파일이 있는지 확인합니다. 로그 파일이 있으면 전송기가 새 데이터와 함께 이를 플러시합니다. 따라서 프로세스가 크래시되더라도 다음에 클라이언트를 실행하면 Weave가 해당 프로세스에서 기록한 데이터를 자동으로 복구합니다.
환경 변수
다음 환경 변수로 WAL 동작을 제어할 수 있습니다.
Weave에서 사용 가능한 전체 환경 변수 목록은 환경 변수 레퍼런스 페이지를 참조하세요.