- コンテナーオーケストレーション: バックグラウンドスレッドがトレースのアップロードを完了する前に、Pod が退避 (evict) されたり OOM によって強制終了されたりする可能性がある場合。
- 分散トレーニング: 複数のプロセスが並列にトレースを書き込み、いずれかのプロセスが失敗する可能性がある場合。
- 不安定なネットワーク: Weave サーバーへの接続性が断続的な環境。
- バッチジョブ: クラッシュによってトレースデータが失われると損害が大きい、長時間実行されるジョブ。
weave.flush() または weave.finish() を呼び出すことも検討してください。詳細については、ワーカープロセスにおけるトレースデータの損失を参照してください。
ライトアヘッドログはオプトイン方式です。今後のリリースでデフォルトで有効になる予定です。
ライトアヘッドログを有効にする
Weave クライアントで WAL を有効にするには、環境変数WEAVE_ENABLE_WAL を true に設定します。
weave.init() を呼び出す前に、Python で設定することもできます。
仕組み
WAL が有効な場合:- Weave は、Weave API への各呼び出し (オブジェクトの作成、呼び出しの開始、呼び出しの終了など) を、メモリ内だけに保持するのではなく、ディスク上の JSONL ファイルに追記します。
- 各プロセスは独自のログファイルに書き込むため、並列プロセス間で競合しません。
- バックグラウンドの送信プロセスがログファイルを読み取り、その内容を Weave サーバーにフラッシュします。
- データの送信に成功すると、Weave はログファイルを削除します。
.weave/wal/ に、entity と project ごとに整理して保存されます。各ファイルには、生の API リクエストが JSON オブジェクトとして 1 行に 1 件ずつ格納されます。
クライアントは起動時に、以前の run のログファイルが残っていないかを確認します。見つかった場合、送信プロセスは新しいデータとともにそれらをフラッシュします。これにより、クラッシュしたプロセスが書き込んだデータは、次回クライアントが実行されたときに Weave によって自動的に復元されます。
環境変数
以下の環境変数は、ライトアヘッドログの動作を制御します。
Weave の利用可能なすべての環境変数の一覧については、環境変数 のリファレンスページを参照してください。