本文へスキップ
ColliePWA

07/Documentation

durable agentのトラブルシューティング

durable agentが表示されない、またはUnreachableと表示される場合: 初動の確認事項、各原因と解決策、doctor行、発生する主なケース

実験的。 通信プロトコル、SDK、およびこのページは、今後のマイナーリリースで変更されるか、機能自体が削除される可能性があります。機能が存続するかどうかの判断基準についてはdurable agentを参照してください。

durable agentが表示されない、Unreachableと表示される、またはタップに応答しない場合、3つのコマンドで原因を特定し、原因一覧表と事例リストで解決策を確認できます。Collie全体についてはトラブルシューティングで扱っています。

最初の確認

次の3つをこの順序で実行します:

collie durable list
collie doctor
collie logs
コマンドdurable agentについて表示される内容
collie durable listsources.jsonのエントリごとに1行ずつ、実行中のbridgeが割り当てた状態(loaded、not loaded (restart to apply)、refused (<status>)、またはbridge not answering)とともに表示されます。loadedはbridgeがエントリを読み込んだことを意味します。durable agentが応答することを意味するわけではありません。bridgeがその名前に対してHTTP 400を返す場合もnot loadedが表示されます
collie doctordurable agent自体に問い合わせます。durable agent向けのDoctor行の行を出力し、失敗したチェック項目と修正方法を示します
collie logs各durable agentの起動行、[bridge] program "desk": durable, private socket /run/user/1000/desk/app.sock、および設定がルールに違反している場合の原因です。不正なsources.jsonの場合は[bridge] FATAL:が出力されます。読み取りに失敗した場合は、停止1回につき[state] poll failed, marking disconnected: <reason>が1回出力されます。[durable]で始まる行は、バージョンの拒絶、古いlead、破棄されたアイテム、および削除されたログを示します

スマートフォン側の表示はより簡潔です。durable agentの行にはStartingまたはUnreachableと表示され、理由は示されません。プロトコルバージョンの拒絶には固有の表記(Version mismatch)があり、durable agentのホームに警告ボックスが表示されます。拒否されたトークンには接続バーに独自の文言が表示されます。その他のあらゆる理由はcollie doctorとcollie logsに示されます。

原因一覧

Collieがdurable agentに接続できない場合でも、Collieの他の部分はそのまま起動し、durable agentは1つの理由とともに到達不能として表示されます。

durable agentがsources.jsonのエントリである場合でも、原因には環境変数名が表示されます。COLLIE_DURABLE_SOCKETはエントリのsocket、COLLIE_DURABLE_URLはそのurl、COLLIE_DURABLE_TOKENはそのtokenと読み替えてください。エントリの修正はsources.jsonで行います。durable単体形式の修正は.envで行い、その後にcollie restartを実行します。

設定がルールに違反しています

Collieはdurable agentへ接続を試みることなくこれらを報告します。sources.jsonエントリに存在するルール違反も、ブリッジの開始時に拒否されます(sources.jsonの入力ミス)。

理由意味と修正方法
COLLIE_DURABLE_SOCKET is not setdurable単体形式にソケットパスがありません。ソケットパスを設定するか、URLとトークンを設定してください
COLLIE_DURABLE_SOCKET must be an absolute path/で始まる完全なパスを指定してください
COLLIE_DURABLE_SOCKET is longer than 103 bytesパスを短縮してください。$XDG_RUNTIME_DIR文字未満に抑えてください
the private socket transport is not available on Windows; set COLLIE_DURABLE_URL and COLLIE_DURABLE_TOKEN insteadWindowsはソケットトランスポートに対応していません。URLとトークンを使用してください
COLLIE_DURABLE_SOCKET and COLLIE_DURABLE_URL are both set; set the socket, or the URL with its token, not bothdurable単体形式に両方が指定されました。どちらか一方のトランスポートのみを残してください
COLLIE_DURABLE_URL is set without COLLIE_DURABLE_TOKEN; the durable agent refuses a caller with no tokendurable単体形式にURLが指定されましたが、トークンがありません。トークンを設定してください
COLLIE_DURABLE_TOKEN is set without COLLIE_DURABLE_URL; a token is only sent to a URLdurable単体形式にトークンが指定されましたが、URLがありません。URLを設定するか、トークンを削除してください
COLLIE_DURABLE_URL is longer than 2048 bytesURLをdurable agentのベースアドレスに短縮してください
COLLIE_DURABLE_URL is not a URLhttps://hostの形式で記述してください
COLLIE_DURABLE_URL must start with https://https://以外のスキームは拒否されます。暗号化なしのhttp://については下の別の行を参照してください
COLLIE_DURABLE_URL uses plain http to <host>, so the token would cross the network unencrypted; use https://, or http://127.0.0.1:<port> for wrangler devhttps://を使用してください。暗号化なしのhttpはポート番号付きの127.0.0.1またはlocalhost専用です
COLLIE_DURABLE_URL uses plain http on loopback without a port; name the port, for example http://127.0.0.1:8801ポート番号を追加してください
COLLIE_DURABLE_URL must not carry a user name or password; the token goes in COLLIE_DURABLE_TOKENURLからユーザー名とパスワードを削除してください
COLLIE_DURABLE_URL must not carry a query or a fragmentURLから?部分と#部分を削除してください
COLLIE_DURABLE_URL names the durable agent's base only; leave out /session/v1, the adapter adds itパスから/session/v1を削除してください
COLLIE_DURABLE_TOKEN is <n> bytes; it must be at least 32 bytes, for example 64 hex characters from openssl rand -hex 32トークンをより長くし、durable agentにも同じトークンを設定してください
COLLIE_DURABLE_TOKEN must be printable ASCII with no spacesトークンから空白やその他の文字を削除してください
COLLIE_DURABLE_TOKEN is longer than 4096 bytesヘッダーが長すぎます。設定ミスです。より短いトークンを使用してください

durable agentが応答しないか、誤った応答を返します

理由意味と修正方法
no socket at <path>指定されたパスに何も存在しません。durable agentを起動するか、パスを修正してください
cannot check <path>: <message>Collieがパスを読み取れませんでした。現在のユーザーから読み取り可能にしてください
socket-not-private: <check>パスの解決に失敗しました。コロン以降のテキストが該当部分を示しています。一般的な原因はプライバシーチェックに失敗しましたに記載されています
connection refusedリッスンしているプロセスがありません。クラッシュした durable agent がソケットファイル(古いソケットファイル)を残している可能性があります。https の場合、その URL でリッスンしているプロセスがありません
no answer within <n>msdurable agent がハングしているか、コールド状態です。Collie はソケットで 1000 ms、https で 5000 ms 待機します
tls refused: <message>URL の証明書が拒否されました。Collie にはこのチェックをスキップするオプションがありません
the host name does not resolveURL のホスト名が間違っているか、ネットワークから到達できません
token-refused: the durable agent answered 401 または 403durable agent がトークンを拒否しました。durable agent がトークンを拒否しました
too-largedurable agent が Collie の読み取り上限を超えるデータを返しました: hello は 16 KiB、スナップショットは 4 MiB。応答サイズを小さくしてください
incompatible: the durable agent speaks 2..3, this Collie speaks 1..1バージョンの対応範囲が一致しません。古い側を更新してください。collie doctor に両方の範囲が表示され、ログに範囲ごとに 1 行出力されます
incompatible: not a durable agentそのパスまたは URL で別のプロセスが応答しています。エントリが durable agent を指すようにしてください
incompatible: the durable agent asks for a tokenソケット経由の durable agent がトークンを要求していますが、ソケットではトークンを渡せません。古い側を更新するか、トークンを指定して URL 経由でアクセスしてください
unreadable hello: <detail> または unreadable snapshot: <detail>durable agent がプロトコル上許可されていないドキュメントを送信しました。durable agent 側のログを確認してください
the durable agent answered <status> または the durable agent answered 409 <code>durable agent がプロトコルで想定されていないステータスを返しました。durable agent 側のログを確認してください
startingdurable agent は稼働していますが、準備未完了を報告しているか、503 を返しています。Collie は次回のポーリングで再試行します

durable agent向けのDoctor行

collie doctor は、bridge と同じ順序で、bridge と同じ問い合わせを各 durable agent に対して実行します。送信するのは hello のみです。

sources.json の各エントリには 6 行のブロックが 1 つ割り当てられ、desk という名前の durable agent には durable-socket:desk と出力されます。ブロックの前にある sources 行でファイルをチェックし、後ろに durable-lead 行が 1 行続きます。durable 専用の Collie は接尾辞なしで同じ 6 行を出力し、mux 行には durable, see the durable-* lines と表示されます。

行緑警告または赤
sources2 durable agents in <path>, mode 0600ファイルを解析できない場合は赤になります。その対処方法として、誤りを修正するまで bridge が起動しない旨が表示されます。エントリにトークンが含まれる可能性があるため、group や others による読み取りが可能な場合も赤になり、対処方法として chmod 600 が表示されます
durable-envパス付きの transport: private socket、または transport: https with a bearer token設定が 理由の一覧テーブル の規則に違反している場合は赤になります
durable-socketパスは自身が所有するモード 0600 のソケットであり、自身が所有するモード 0700 のフォルダ内に存在し、途中にリンクはありません赤になり、失敗したチェック内容(存在しない、読み取り不可、ソケットではない、シンボリックリンク、フォルダではない、別の所有者のフォルダ、誤ったモードのフォルダ、others による書き込みが可能な上位フォルダ、別の所有者のソケット、開放されたモードのソケット)が該当行に表示されます。https 経由の durable agent ではスキップされます
durable-urlアドレス(https またはループバック http)とそのバイト長URL が規則に違反している場合は赤になります。ソケットの場合はスキップされます
durable-tokenset, <n> bytes。Collie が値を出力することはありませんトークンが規則に違反している場合は赤になります。ソケットの場合はスキップされます
durable-hellodurable agent が応答しました。両方の範囲と合意したバージョン原因とともに赤色で表示されます。トークンの拒否、応答なし、durable agent以外からの応答、durable agentによるソケット上でのトークン要求、読み取り不能なhello、範囲の不一致などが原因です。範囲が一致しない場合は両方の範囲が表示されます。
durable-readyready、durable agentのホスト名、およびそのエポックdurable agentがまだ準備完了でないことを示す警告
durable-leadリードが十分に新しいため、質問カードを表示できますcrew内を参照してください

1つの行が失敗すると、それ以降の行は停止します。それらは理由fix the row above firstとともにスキップとして出力されます。Collieは、プライバシーチェックに失敗したソケット経由や、ルールに違反するトークンを使ってdurable agentに問い合わせることはないためです。スキップされた行は障害ではありません。

ケース一覧

各ケースでは、発生する事象、原因、解決方法を説明します。

sources.jsonの入力ミス

1つのdurable agentだけでなく、Collie自体が停止してスマートフォンから接続できなくなります。collie logsの末尾に[bridge] FATAL:、ファイルパス、エントリ、フィールドが出力されます。

bridgeは起動時にsources.jsonを読み込み、不明なフィールド、durableではないkind、ルールに違反する名前、重複した名前、socketとurlの同時指定、どちらも指定されていない構成、tokenのないurl、socketのあるtokenを検出すると停止します。ファイルを修正し、collie restartを実行してください。collie doctorのsources行にも同じメッセージが表示されます。

bridgeがエントリ名を特定できない場合(オブジェクトではない、不明なフィールドがある、または名前がルールに違反している場合)、0からカウントし、2番目のエントリにはentry 1と出力します。collie durable attachは1からカウントし、同じエントリにentry 2と出力します。どちらも対象フィールドを示します。名前が有効になると、bridgeはその名前(entry "desk")を出力します。

attachおよびdetachは、読み取れないファイルへの書き込みを行いません。入力ミスによって他のエントリが失われるのを防ぐためです。これらは終了コード1で停止します。

attach後にdurable agentが表示されない

スマートフォン上にdurable agentが表示されず、collie durable listにnot loaded (restart to apply)と表示されます。

attachとdetachはsources.jsonへの書き込みのみを行います。bridgeはこれを起動時に読み込みます。collie restartを実行するか、次回からコマンドに--restartを追加してください。再起動後もnot loadedが残る場合は、collie logsを確認してください。listでは、bridgeからのHTTP 400が404と同じ文面で表示されます。

プライバシーチェックに失敗しました

socket-not-private: the socket's folder /tmp/hello has mode 0755, not 0700が表示され、doctorの行durable-socketが赤くなります。

Collieは、パス全体がプライベートな場合にのみソケットに接続します。主な原因は、モードが0755のフォルダ、/tmpなどの共有フォルダ直下にあるソケット、パス内のシンボリックリンクです。シンボリックリンクは見落としがちです。多くのLinux環境で/var/runは/runにリンクしているため、/var/run/で始まるパスは/var/run is a symlinkで失敗します。実パスを使用してください。

ソケットが存在するフォルダに対してchmod 700を実行するか、ソケットを$XDG_RUNTIME_DIR以下に移動してください。ルールはdurable agentのセキュリティに記載されています。SDKで作成されたdurable agentは、モードが0700ではない既存フォルダでは起動を拒否し、その旨を自身で出力します。

古いソケットファイル

ソケット上にconnection refusedと表示され、ファイルは存在しています。

クラッシュしたdurable agentはソケットファイルを残しますが、そのソケットをリッスンするプロセスはありません。durable agentを再起動してください。SDKはリッスンを開始する前に不要なソケットファイルを削除し、ソケットが稼働中の場合はanother instance is already listeningで停止します。durable agentがファイルを削除しない場合にのみ、手動でファイルを削除してください。

ターミナルセッションと重複する名前

bridgeが起動時にthe name is the terminal session's own; pick anotherで停止するか、スマートフォン上にターミナルセッションが表示されません。

durable agentには、Collieの実行元ターミナルと同じ名前を付けることはできません。多くのインストール環境でその名前はdefaultであり、durable専用のCollieではdefaultがそのdurable agentの名前になります。bridgeは起動時に停止し、該当エントリ名を出力します。Herdrセッションがdurable agentと同じ名前を持つ場合も同様です。durable agentがその名前を保持し、スマートフォンには該当セッションが表示されず、ログに一度出力されます。どちらかの名前を変更してください。

durable-readyの警告が消えない

collie doctorを実行するたびにdurable-readyが警告として表示されます。

durable agentがhelloと応答し、ready: falseと出力します。スマートフォン上では「Starting」と表示されます。durable agentは、会話を展開し、未解決の質問を再提示した後にのみ準備完了状態になります。何が待機されているかについては、durable agent自身のログを確認してください。

子孫プロセスのチェックでdurable agentが起動時に停止する

durable agentが起動時にthe descendant check needs Bun on Linux to read the peer of a socket; pass callerCheck: "off" to run without itで停止します。

このチェックにはLinux上のBunが必要です。macOSではNodeでdurable agentを実行するか、openCollieにcallerCheck: "off"を渡して事前にこのチェックが保護する対象を確認してください。このエラーはdurable agent側から発生しており、Collieは関与していません。

再起動後に質問が再度表示される

durable agentの再起動後に同じ質問が再度表示されるか、すでに回答済みと書かれたカードが表示されます。

再起動前の質問に対する回答は too-late を受け取り、カードはその旨を表示して消えます。ツール呼び出しから質問IDを生成するdurable agentは同じ質問を再提示するため、再起動を挟んで送信された回答が適用され、ツールが1回実行されます。毎回新しいIDを生成するdurable agentは、同じツール呼び出しに対して新しい質問を作成します。カードにはそれが表示され、プッシュガードがツール呼び出しをキーとするため、Collieは2回目のプッシュを送信しません。このガードはまた、会話ごとに毎分3回、ホストごとに毎分10回、ホストごとに毎時30回のプッシュを許可します。1時間の中で31回目となるプッシュはそのホストへの1件の要約プッシュとなり、そのホストはその後1時間が経過するまでプッシュを送信しません。カードは常に表示されます。

403 caller-refused

回答またはメッセージが拒否されたと電話機に表示され、durable agentの理由は 403 caller-refused です。

durable agentの子孫プロセス確認により呼び出し元が拒否されました。この確認は、durable agent自体、durable agentが起動したプロセス、およびそれらと区別できない呼び出し元を拒否します。durable agentまたはそれが実行したツールがCollieプロセスを起動し、そのプロセスがまだ子プロセスである場合、Collieはdurable agent側とみなされます。durable agentの外部からCollieを起動してから、やり直してください。

「やり直す」、および適用された可能性がある回答

「回答が届いたか不明です」と「やり直す」ボタンが表示され、タップ後に「すでに適用されている可能性があります。チャットを確認してください。」と表示されます。

回答送信後のタイムアウト、接続切断、または5xxエラーは、回答が届いた可能性があることを意味します。「やり直す」は同じリクエストIDを送信するため、durable agentは replayed と応答し、質問を2回解決することはありません。質問がすでに閉じられている場合、最初の試行で閉じられた可能性があるため、電話機にはチャットを確認するよう表示されます。送信、停止、ボタンタップもそれぞれの文言で同様のことを示します。

durable agent がトークンを拒否しました

接続バーに「durable agentがトークンを拒否しました。このピアのCOLLIE_DURABLE_TOKENを確認してください。」と表示され、理由は token-refused です。

durable agentがトークンに対して401または403を返しました。最も一般的な原因は、一方のトークンが先に変更されたローテーションです。電話機の文言は sources.json のエントリであっても COLLIE_DURABLE_TOKEN と表記します。そのエントリの token と読み替えてください。Collieを再起動する前に、新しいトークンをdurable agentに渡してください。トークン にローテーションの手順があります。403は、durable agentの前面にあるアクセスプロキシが原因である場合もあります。

2回の読み取りを経てUnreachableへ切り替わる

durable agentの読み取りが1回失敗してもReadyのまま維持され、その後Unreachableに切り替わります。

成功した読み取りの後に1回失敗した場合、そのポーリングでは直前のレイアウトが維持されます。2回連続で失敗すると、durable agentが切り替わります。拒否されたトークンも同じルールに従います。プライバシーチェックに失敗したソケットパスが唯一の例外で、即座に表示されます。

https経由では、ダウンしているかトークンを拒否したdurable agentへの問い合わせは最大で10秒に1回です。各試行が課金対象のリクエストとなるためです。ソケット経由では、ダウンしているdurable agentの2回の読み取り間の最小間隔は250ミリ秒です。

crew内

crewのメンバー上のdurable agentはリードの電話機に表示されるため、リードはdurable agentが何であるかを認識している必要があります。

1.21.0より前のリードは、質問カードなしでdurable agentの会話を一覧表示し、そのTerminalタブはターミナルのない会話をポーリングします。メンバー側ではこれを修正できません。メンバー自身がその旨を示します。collie doctor が durable-lead 内で警告し、ログには検出したリリースごとに1行、[durable] the lead is 1.20.1; it shows durable panes without the question card and its Terminal tab polls; update the lead が記録されます。リードを更新してください。

durable-lead表示内容
スキップ、crewなしこのマシンはcrewに含まれていないため、リードは存在しません
スキップ、リードこのマシンはリードであり、自身のペインを表示します
スキップ、リリースなしリードがリリースを明示しませんでした: 開発ビルド、更新の処理中、またはブリッジ起動後に呼び出しがありません
警告リードは1.21.0未満のリリースを実行しています
緑リードは1.21.0以降です

リードより古いメンバーには逆の問題があります。電話機に「このマシンは古いCollieを実行しているため、ここでは回答を受け取れません。更新するか、durable agent内で回答してください。」と表示されます。そのメンバーを更新してください。

GitHub でこのページを編集

The rest of the documentation