- コンテナー オーケストレーション: バックグラウンドスレッドによるトレースのアップロードが完了する前に、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 はリクエストをローカルのディスクに書き込みますが、サーバーにはフラッシュしません。これはデバッグに役立ちます。 |