ブログに戻る
·11分で読める·productdevbook

開発者・システム管理者向けMac通信量モニタリング

macOS上で開発者やシステム管理者が使える実用的な通信量モニタリング構成。プロセス単位の可視化、スクリプトとの連携、デバッグの定石を紹介します。

  • Developer tools
  • macOS
  • Network monitoring
  • Sysadmin

90秒で済むはずのテストスイートが14分かかり、CIがタイムアウトしている。ローカル実行も遅い。プロファイラを取り付ける——CPUは問題なし。メモリも問題なし。すると、テストフィクスチャが実行ごとに数百の外向きHTTPSリクエストを行っていることに気づきます。3ヶ月前に誰かがセットアップフックに本物のAPI呼び出しを追加したからで、今はすべてのPRがレート制限を食らったばかりのサンドボックスエンドポイントを叩きまくっているのです。通信量モニタリングしていれば初日に捕まえられたはずでした。

Macの開発者とシステム管理者にとって、ネットワークの可観測性は積み重なるスキルの1つです。どのツールがどの問いに答えるかを知れば、実は明らかなことをしている暴走プロセスである問題に何時間も無駄にしなくなります。本稿は実用スタックです: いつtcpdumpに手を伸ばし、いつWireshark、いつnettop、いつovaのようなアプリ別モニターか、そしてどう組み合わせるか。Mac向け開発者用通信量モニターを検索していたなら、ここでの目標はマーケティングツアーではなく実用的な決定木です。

4つのレベル、簡潔に

診断ツールは4つの抽象レベルにまたがります:

  1. パケットバイトtcpdump。回線上のすべてのバイトとヘッダ。最低レベル。キャプチャしてから分析するのに良い。
  2. パケット検査 — Wireshark。tcpdumpのデータを読みやすいプロトコル層に解読。接続が何をしているかを理解するのに最適。
  3. ライブのプロセス別nettop。macOSネイティブで、プロセス別の現在の接続とレートを表示。
  4. 時間軸でのアプリ別集計 — ova。メニューバーアプリ、スクラブ可能な履歴、ヘルパープロセスの折りたたみ。

これらをうまく使うコツは、レベルを問いに合わせること。「先週テストスイートはどれだけ通信量を使ったか」と問うなら、tcpdumpは間違った答え。ovaか同様のアプリ別履歴ツールが正しい答えです。「なぜこの特定のHTTPS接続が遅いか」と問うなら、nettopは教えてくれません——Wiresharkが必要です。

tcpdump: 回線上のバイトビュー

tcpdumpはあらゆるMacにあります。次のときに正しいツールです:

  • 特定のプロトコル問題(TLSハンドシェイクの失敗、再送、フラグメンテーション)を疑っている。
  • 後の分析のためにトラフィックをキャプチャする必要がある。
  • GUIツールが利用できないサーバ級マシンで作業している。

便利な既定キャプチャ:

sudo tcpdump -i en0 -n -s 0 -w capture.pcap
  • -i en0 — Wi-Fiインターフェースでキャプチャ(両方ある場合のイーサネットにはen1、またはifconfigで確認)。
  • -n — ホスト名を解決しない(より速い)。
  • -s 0 — ヘッダだけでなく完全パケットをキャプチャ。
  • -w capture.pcap — Wiresharkで読めるpcapファイルに書き込み。

フィルタするには:

sudo tcpdump -i en0 -n 'host api.example.com and port 443'
sudo tcpdump -i en0 -n 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

最初は特定ホスト名のHTTPSへのトラフィックだけをキャプチャ。2つ目はTCP接続の確立/切断だけをキャプチャ——ペイロードバイトに溺れずに接続を数えるのに有用です。

Wireshark: プロトコル解読

Wiresharkはpcapファイルを読み、読みやすい階層に解読します: イーサネットフレーム、IPパケット、TCPセグメント、TLSレコード、HTTPリクエスト。無料、ローカル、クラウド要素なし。Homebrewでインストール:

brew install --cask wireshark

表示フィルタ言語が魔法です。影響力のあるフィルタをいくつか:

  • http.response.code >= 400 — 失敗したHTTPレスポンスを表示。
  • tcp.analysis.retransmission — TCP再送を表示、しばしばネットワーク輻輳やピア問題の兆候。
  • tls.handshake.type == 1 — TLS Client Helloを表示(接続ごとに1つ)。
  • dns and dns.qry.name contains "example.com" — 特定ドメインのDNSクエリを表示。

Wiresharkは「Slackは今日どれだけ通信量を使ったか」には過剰ですが、「他は成功するのになぜこの特定の接続は30秒でタイムアウトするか」にはまさに正しい。クライアントマシンからのキャプチャ済みpcapがあって事後調査が必要なときにも正しいツールです。

nettop: ライブのプロセス別ビュー

nettopはmacOSに同梱されています。組み込みでアプリ別ライブモニターに最も近い等価物です:

sudo nettop -P -m route

便利なフラグ:

  • -P — プロセスでグループ化。
  • -m route — ルート情報(どのインターフェース)を表示。
  • -x — レートだけでなくバイト数を表示。
  • -c <interval> — 定期更新、例: -c 2
  • -J bytes_in,bytes_out,interface — 表示する特定の列を選択。

nettopはテキストのみで、自分の画面を更新し、SSH越しに動きます。リモートMac(CIランナー、トリアージのためにSSH接続している同僚のマシン)で「今何かおかしいか」の素早い答えが必要なときに正しいツールです。

短所: nettopには履歴がありません。終了した瞬間にデータは消えます。

ova: ヘルパー折りたたみ付きアプリ別履歴

ovaはメニューバーに常駐し、nettopにないものを提供します: 永続履歴、スクラブ可能なタイムライン、ヘルパープロセスの折りたたみ。約1Hzでサンプリングし、データはローカルに書かれ、削除するまで残ります。

ovaが組み込みツールにできない2つのこと:

  1. ヘルパープロセスの折りたたみ。 Chromeはタブごとに1つのヘルパーPIDを作ります。Slackには独自のヘルパーアーキテクチャがあります。Discord、Telegram、Electronアプリ全般がこれをします。nettopはそれらを別の行(「Slack Helper (Plugin)」、「Slack Helper (GPU)」など)として表示します——技術的には正しいが読めません。ovaはそれらを「Slack」の下に折りたたむので、行は実際にあなたが意図するものになります。
  2. スクラブ可能な履歴。 「先週火曜の午後3時に何が起きたか」はタイムラインをクリック&ドラッグすれば答えられます。nettopの答えは「分かりません、動いていなかったので」です。
ヘルパープロセスの折りたたみ
ovaはすべてのヘルパーPIDを親アプリの下にグループ化するので、7行のヘルパーではなく「Slack」と読めます。

開発者の日々の業務——「ビルドはレジストリを叩いたか」、「どのテストが4GB引いたか」、「毎時定期的なスパイクは何か」——には、ovaは儀式なしに素早く答えます。「今すぐ、インストールなしで」が必要なときのフォールバックがnettopです。

具体例

API叩きまくりのデバッグ

チームがステージングAPIが遅いと不満を言っています。クライアントがリトライループに入っていると疑います。問題のある開発者のMacのメニューバーでovaを動かし、遅さの時間にスクラブすると、チームのCLIツールが15分間80MB/sでスパイクしているのが見えます。それが手がかりです。Wiresharkを開いて30秒キャプチャを取り、確認: すべてのリクエストが503を取得しており、クライアントは100msのバックオフで再試行しています。バグはリトライポリシーにあります——指数バックオフではなく定数——そして今、何を直すべきかが正確に分かります。

暴走テストプロセスの発見

CIは大丈夫だがローカルテスト実行が遅い。ovaを開き、スイートを実行し、スパイクをスクラブ。nodeが30秒の窓で200MB引いているのが見えます。怪しいポートにフィルタしたtcpdumpは、テストフィクスチャが録画フィクスチャを使う代わりにテストごとに本物のCDNからライブデータを取得していると示します。ローカルフィクスチャに置き換え、スイートは90秒に戻ります。

ベンダーライブラリからの意外な外向き

コンプライアンスレビューで、コードベースがどこかに本国通信していないか問われます。静的解析は部分的; 唯一決定的な答えは「代表的な使用中にネットワークを観察」することです。ovaでアプリを1時間動かし、検証のためtcpdumpで同じ1時間をキャプチャ。nettopのホスト名列で見える宛先と相互参照。予期しないものは調査されます。アプリ別履歴なしには、この種の監査は難しいものです。

システム管理者のフリート上の暴走同期エージェント

社内Slackメッセージ: 「Macが遅く感じる」。SSH接続してsudo nettop -P -m routeを実行。誰もがインストールを忘れたバックアップエージェントがフルリインデックスをして、30MB/sを持続的に引いています。デーモンを終了し、スケジュール修正のチケットを起票。5分の修正、正しいツールなしなら1時間かかったでしょう。

ovaを動かしてみる

一目で分かるメニューバー通信量モニター——ローカル、署名済み、約3MB。

macOS用ダウンロード

スクリプト用フック

自動化向け:

JSONっぽい出力のnettop

nettop -P -L 1 -k state,interface_name,rx_dupe,rx_ooo,re-tx,rtt_avg,rcvsize,tx_win,tc_class,tc_mgt,cc_algo,P,C,R,W -J bytes_in,bytes_out

これはスクリプトに取り込める1サンプル(-L 1フラグ)を生成します。整形後にawkjqにパイプ。

通信量しきい値

「いずれかのプロセスがXを超えたら警告」スクリプトはnettop周りで素早く構築できます:

sudo nettop -P -L 1 -J bytes_in,bytes_out -k state,interface_name,P,C,R,W \
  | awk 'NR>1 && ($2+$3) > 1000000 {print}'

(粗いが機能する)。本番品質バージョンには、ホスト別トラフィック用のiftopやインターフェースレベル用のbmonを見ましょう。

監視犬としてのtcpdump

sudo tcpdump -i en0 -n 'host suspicious.example.com' -w "/tmp/capture-$(date +%Y%m%d-%H%M).pcap" -G 3600 -W 24

1時間のキャプチャファイルを回転させ、24個保持。「いつ起きるか分からないが次回捕まえたい」のに有用。

ovaのエクスポート

ovaは履歴をローカルに書きます。これをダッシュボードやレポートに送り込む必要があるなら、エクスポートパスが正しい出発点——データはあなたのもので、間にベンダー同期層はありません。

開発者がMacワークフローで実際に必要とする通信量モニターの選び方

短いマトリックス:

問い正しいツール
今ネットワークを使っているのは何か?nettop、ova
昨日午後3時にネットワークを使ったのは何か?ova
なぜこの特定のTCP接続が遅いか?Wireshark
TLSハンドシェイクの失敗があるか?Wireshark
先週の合計バイト数は?ova
プロセスXはホストYと話しているか?nettop、tcpdump
後のフォレンジックレビュー用にキャプチャ?tcpdump → pcap
SSH越しの一回限りリモート診断?nettop

パターンは: 「何を」と「いつ」にはnettopとova、プロトコルレベルの「なぜ」にはtcpdumpとWireshark。開発者向けの問いの大半は、Wiresharkを開かずに答えられます——これは本当に混乱したプロトコル問題に取っておく低頻度ツールです。

システム管理者特有のパターン

Macのフリート(小チーム、デザインスタジオ、ビデオ店)を保守しているなら、パターンは異なります:

  • 発見が先。 SSHかリモート管理経由で各マシンにsudo nettop -P -m routeを実行し、何が動いているか確認。見覚えのないプロセスを探す——望まないブラウザ拡張、同梱アドウェア、忘れたベータソフトウェアの兆候。
  • パワーユーザーの履歴。 チームの重いネットワークユーザー(デイリーをアップロードする動画編集者、大きな成果物をプッシュする開発者)向けには、アプリ別履歴ツールが、起こる瞬間にそこにいなくても繰り返しの問題を捕まえます。
  • 文書化されたベースライン。 「良好」なMacと「不満を言う」Macのnettop出力をキャプチャ。差分は通常明白です。

次に何をするか

開発者向けMac通信量モニタースタックを最初から構築するなら、常時稼働の履歴ビュー用にovaをインストールし、上の3つのnettopの呪文を覚え、必要なときのためにWiresharkをブックマークしましょう。それが作業セットです。開発者やシステム管理者の日々の問題のほとんどはアプリ別またはプロセス別レベルで解決します。パケットレベルのツールは毎日ではなく毎月現れる難しいケースのためにあります。

APIを叩くテストスイート、暴走同期エージェント、ビルドごとに密かに8GBダウンロードするCIランナー——これらはすべて、正しいツールを開いた瞬間に見えます。コストは数分のセットアップ。報酬は、次回何かが「理由なく遅い」とき、答えが2時間のプロファイラ狩りではなくメニューバーにあることです。