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

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

WAL を有効にするには、WEAVE_ENABLE_WAL 環境変数を true に設定します:
export WEAVE_ENABLE_WAL=true
weave.init() を呼び出す前に、Python で設定することもできます:
import os
os.environ["WEAVE_ENABLE_WAL"] = "true"
そのほかのコード変更は不要です。WAL は既存の Weave トレースコードと透過的に連携して動作します。

仕組み

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

環境変数

変数タイプデフォルト説明
WEAVE_ENABLE_WALboolfalseライトアヘッドログ (WAL) を有効にします。true に設定すると、Weave は API リクエストをサーバーに送信する前に、まずローカルのディスクに書き込みます。
WEAVE_DISABLE_WAL_SENDERboolfalseWAL 送信を無効にします。true に設定すると、Weave はリクエストをローカルのディスクに書き込みますが、サーバーにはフラッシュしません。これはデバッグに役立ちます。
Weave で使用できるすべての環境変数の一覧については、environment variables リファレンスページを参照してください。