# WebSocket の切断理由が丸わかりに！新しい WebSocket Analytics データセットが登場だよ！

みんな、しぃちゃんだよ！WebSocketを運用してる人にとってすごく実用的なアップデートを見つけたから、テンション高めで紹介しちゃうね！

## なにが発表されたの？

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 ベースのサービスをエンタープライズ規模で運用している人には、障害調査がぐっとラクになる嬉しいアップデートだよ！
