Skip to main content
ライトアヘッドログ (WAL) は、API リクエストをサーバーに送信する前にディスクに永続化します。デフォルトでは、クライアントはリクエストをメモリ上にバッファします。プロセスが予期せず終了すると、バッファされたデータは失われます。Weave の WAL は、リクエストを送信前にディスクへ書き込むことでこの問題に対処します。 WAL を有効にすると、クライアントは各 API リクエストをまずローカルの JSONL ファイルに書き込み、その後ファイルの内容をサーバーへフラッシュします。プロセスがクラッシュした場合やサーバーに到達できない場合でも、データはディスク上に残り、クライアントが次回実行されたときに Weave が自動的に送信します。 WAL は、プロセスが中断される可能性がある環境や、サーバーが一時的に利用できなくなる可能性がある環境で特に有用です。
  • コンテナーオーケストレーション: バックグラウンドスレッドがトレースのアップロードを完了する前に、Pod が退避 (evict) されたり OOM によって強制終了されたりする可能性がある場合。
  • 分散トレーニング: 複数のプロセスが並列にトレースを書き込み、いずれかのプロセスが失敗する可能性がある場合。
  • 不安定なネットワーク: Weave サーバーへの接続性が断続的な環境。
  • バッチジョブ: クラッシュによってトレースデータが失われると損害が大きい、長時間実行されるジョブ。
サーバーレス関数のような短命な環境では、すべてのデータを確実にアップロードするために、プロセスの終了前に weave.flush() または weave.finish() を呼び出すことも検討してください。詳細については、ワーカープロセスにおけるトレースデータの損失を参照してください。
ライトアヘッドログはオプトイン方式です。今後のリリースでデフォルトで有効になる予定です。

ライトアヘッドログを有効にする

Weave クライアントで WAL を有効にするには、環境変数 WEAVE_ENABLE_WAL を true に設定します。
weave.init() を呼び出す前に、Python で設定することもできます。
ほかにコードの変更は必要ありません。WAL は、既存の Weave トレースコードで透過的に動作します。

仕組み

WAL が有効な場合:
  1. Weave は、Weave API への各呼び出し (オブジェクトの作成、呼び出しの開始、呼び出しの終了など) を、メモリ内だけに保持するのではなく、ディスク上の JSONL ファイルに追記します。
  2. 各プロセスは独自のログファイルに書き込むため、並列プロセス間で競合しません。
  3. バックグラウンドの送信プロセスがログファイルを読み取り、その内容を Weave サーバーにフラッシュします。
  4. データの送信に成功すると、Weave はログファイルを削除します。
ログファイルは、作業ディレクトリ内の .weave/wal/ に、entity と project ごとに整理して保存されます。各ファイルには、生の API リクエストが JSON オブジェクトとして 1 行に 1 件ずつ格納されます。 クライアントは起動時に、以前の run のログファイルが残っていないかを確認します。見つかった場合、送信プロセスは新しいデータとともにそれらをフラッシュします。これにより、クラッシュしたプロセスが書き込んだデータは、次回クライアントが実行されたときに Weave によって自動的に復元されます。

環境変数

以下の環境変数は、ライトアヘッドログの動作を制御します。 Weave の利用可能なすべての環境変数の一覧については、環境変数 のリファレンスページを参照してください。
最終更新日 2026年9月30日