WebSocket の切断理由が丸わかりに!新しい WebSocket Analytics データセットが登場だよ!
みんな、しぃちゃんだよ!WebSocket を運用してる人にとってすごく実用的なアップデートを見つけたから、テンション高めで紹介しちゃうね!
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog で、Logpush 向けの新しいデータセット websocket_analytics が発表されたよ。エンタープライズ顧客向けの機能で、コネクション単位の WebSocket 分析情報を任意の Logpush 送信先にプッシュできるようになるの。各ログレコードは WebSocket 接続がクローズしたタイミングで出力される仕組みだよ。
含まれる主なフィールドはこんな感じ:
ConnectionCloseReason— 接続が終了した理由(peerReset/peerNoError/timedOut/upstreamReset/protocolViolation/unspecifiedError/none)ConnectionCloseSource— どちら側が切断を開始したか(upstream/downstream/me/both)ConnectionTransportCloseCode— TLS のアラートコードや TCP レベルのクローズコードRayID— 既存の HTTP リクエストログとの突き合わせに使える識別子
これに加えて、送受信の方向別バイト数(BytesSentClient / BytesReceivedClient / BytesSentOrigin / BytesReceivedOrigin)、接続のタイムスタンプ、クライアント IP、コロケーションコード、WebSocket アップグレード時点のリクエストメタデータも含まれているよ。
なぜ重要なの?
原文によると、このデータセットに入っているフィールドの多くは、これまで Cloudflare のエンジニアが社内ツール経由でしか見られなかった情報なんだって。WebSocket は接続がずっと張られたままになる性質上、切断の原因が分かりづらくて、障害調査がしにくいプロトコルなの。それがログとしてそのまま出てくるようになるのは、運用者にとってかなり大きい意味を持つよ。
これで何が変わるの?
たとえば ConnectionCloseReason == "peerReset" のようなイベントをホストやデータセンターごとに集計すれば、TCP リセットが急増しているパターンを既存のログ分析ツールの中でそのまま検知できるようになるの。今まで「なんとなく WebSocket が切れる」というふわっとした状況だったものが、具体的にどちら側が・どういう理由で・どのくらいの頻度で切断しているのかまで、手元のデータで説明できるようになるよ。
まとめ
- WebSocket 接続がクローズするたびに 1 レコードを出力する
websocket_analyticsデータセットが新登場 - 切断理由・切断元・TLS/TCP のクローズコード・バイト数・RayID などが取得できる
- エンタープライズプランで、任意の Logpush 送信先に出力可能
WebSocket ベースのサービスをエンタープライズ規模で運用している人には、障害調査がぐっとラクになる嬉しいアップデートだよ!