OpenClawゲートウェイがヘルスチェックでは緑でも、モデルAPIから401が返ると運用は激怒します。2026年でも静かな根本原因のひとつはシステム時刻のスキューです。UTCに対してMacが90秒進むと、JWTのiatが「未来」になり拒否されます。遅れていると期限切れが早まって見えます。TLSセッションチケットのローテーションやノートPCのスリープが加わると、Linux CIでは再現しない断続障害になります。本稿では計測、sntp、JWTクレーム許容、macOStimedとLaunchAgent、Apple Siliconでのリハーサルをまとめます。
合わせてopenclaw doctor ゲートウェイ診断、429 Retry-After の扱い、JSON環境プロファイルで秘密と時刻ポリシーを同じレビューバンドルに収めてください。
補足1:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足2:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足3:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足4:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足5:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足6:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足7:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足8:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足9:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足10:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足11:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足12:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足13:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足14:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足15:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足16:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足17:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足18:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足19:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足20:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足21:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足22:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足23:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足24:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足25:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足26:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足27:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足28:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足29:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足30:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足31:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足32:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足33:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足34:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
補足35:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。
鍵が壊れたように見える症状
スキューはめったに「NTP失敗」とはログに出ません。散発的な401、タイムスタンプ比較で403、中間証明書ローテ後のTLS失敗が典型です。
sntpと単調時計で測る
sntp -d pool.ntp.orgをゲートウェイと同じユーザで実行し、絶対値500ms超は修正対象、5秒超はインシデントです。
JWTのiat/nbf/expマトリクス
| クレーム | 許容 | 失敗 | 緩和 |
|---|---|---|---|
iat | ±60秒が一般的 | 未来扱い | NTP同期 |
nbf | 厳しい | 早期リフレッシュ嵐 | 発行を2秒遅らせる |
exp | 厳しい | 早期期限切れ | 短命トークン+スキュー予算 |
証明書更新後のTLSセッションチケット
葉証明書を週次で回すと、古いチケットが残ります。長寿命プロセスはローリング再起動が必要になることがあります。
スリープと仮想化
30分スリープ後はWi-Fi再接続まで時刻が古いままかもしれません。常時稼働ゲートウェイはデスクトップ級Mac miniが安定します。
是正マトリクス
- 200ms未満:監視のみ
- 200ms–2s:即時NTP再同期とアラート
- 2s超:トラフィック停止→修正→スモーク
インシデント断片
date -uとログをスナップショット- JWTを検証ツールで読む
- 必要なら
timedを再起動 openclaw doctorでTLSを確認- ダッシュボードに300ms閾値を追加
Prometheusメトリクス
30秒ごとにsntp由来のゲージをスクレイプし、5連続で0.3秒超なら通知します。
LaunchAgentとtimed
45日稼働でもtimedが静かに劣化することがあります。追加の時間ログジョブを置きます。
多地域と夏時間
機械トークンはUTCのみで発行し、人間向けログだけローカル表示にします。
ゴールデンイメージ
初回ブート前に時計が止まっていることがあります。200ms超ではOpenClawを起動しないガードを入れます。
FAQ
2秒のズレはJWTを壊す?
厳しいiatではyes。
スリープは影響する?
はい。
チケットを無効化すべき?
最終手段;ローテ後の再起動を優先。
Mac miniで rehearsal?
macOSの時間サービスがLinuxと異なるからです。
同じOSファミリーで検証するには、MacHTMLのApple SiliconMac miniを約$16.9/日で借りてtimedとWi-Fiジッターを再現してください。