ライトアヘッドログ (WAL) は、API リクエストをサーバーに送信する前にディスクへ永続化します。デフォルトでは、クライアントはリクエストをメモリにバッファリングしますが、プロセスが予期せず終了すると、バッファされたデータは失われます。Weave の WAL は、送信前にリクエストをディスクへ書き込むことで、この問題に対処します。 WAL を有効にすると、クライアントはまず各 API リクエストをローカルの JSONL ファイルに書き込み、その後その内容をサーバーにフラッシュします。プロセスがクラッシュした場合やサーバーに到達できない場合でも、データはディスク上に残り、クライアントの次回実行時に自動的に送信されます。 WAL は、プロセスが中断される可能性がある環境や、サーバーが一時的に利用できなくなる可能性がある環境で特に有用です。Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-john-wbdocs-2044-rename-serverless-products.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
- コンテナー オーケストレーション: バックグラウンドスレッドによるトレースのアップロードが完了する前に、Pod がエビクトされたり OOM Killer によって強制終了されたりする可能性があります。
- 分散トレーニング: 複数のプロセスが並列でトレースを書き込む環境では、いずれかのプロセスが失敗する可能性があります。
- 不安定なネットワーク: Weave サーバーへの接続が断続的になる環境です。
- バッチジョブ: 長時間実行されるジョブでは、クラッシュによるトレースデータの損失が大きな影響を及ぼします。
weave.flush() または weave.finish() を呼び出すことも検討してください。詳細は ワーカープロセスでのトレースデータ損失 を参照してください。
ライトアヘッドログは現在、明示的に有効化する必要があります。今後のリリースではデフォルトで有効になる予定です。
ライトアヘッドログ (WAL) を有効にする
WEAVE_ENABLE_WAL 環境変数を true に設定します:
weave.init() を呼び出す前に、Python で設定することもできます:
仕組み
- Weave API への各 call (object の作成、call の開始、call の終了など) は、メモリ内に保持するだけでなく、ディスク上の JSONL ファイルにも追記されます。
- 各プロセスはそれぞれ専用のログファイルに書き込むため、並列プロセス同士で競合しません。
- バックグラウンドの送信プロセスがログファイルを読み取り、その内容を Weave サーバーに送信します。
- データの送信に成功すると、ログファイルは削除されます。
.weave/wal/ に、entity と project ごとに整理されて保存されます。各ファイルには、生の API リクエストが JSON object として 1 行に 1 つずつ格納されます。
クライアントは起動時に、以前の run から残っている既存のログファイルがあるかどうかを確認します。見つかった場合、送信プロセスはそれらを新しいデータとあわせて送信します。つまり、クラッシュしたプロセスによって書き込まれたデータは、次回クライアントの実行時に自動的に復旧されます。
環境変数
| 変数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
WEAVE_ENABLE_WAL | bool | false | ライトアヘッドログ (WAL) を有効にします。true に設定すると、Weave は API リクエストをサーバーに送信する前に、まずローカルのディスクに書き込みます。 |
WEAVE_DISABLE_WAL_SENDER | bool | false | WAL 送信を無効にします。true に設定すると、Weave はリクエストをローカルのディスクに書き込みますが、サーバーにはフラッシュしません。これはデバッグに役立ちます。 |