Linuxネットワーク「武器」をアップグレード:gping、bandwhich、doggoの3種の神器を試す

Network tutorial - IT technology blog
Network tutorial - IT technology blog

従来のコマンドではスピードについていけなくなった時

上司から「オフィスのネットワークがなんでこんなに遅いんだ?」と催促の電話がかかってきたところを想像してみてください。反射的に ping 8.8.8.8 と打ち込みます。画面には延々とテキストのリストが流れ始めます。あなたは time の値が跳ね上がっている行がないか、目を皿のようにして探し続けます。

実際、このやり方は非常に疲れます。1〜2秒だけ発生するラグ(マイクロスパイク)は、テキストだけを見ていると非常に見逃しやすいものです。同様に、サーバーが突然帯域不足になった際、iftop はどのIPが容量を消費しているかは教えてくれますが、具体的にどのアプリケーションが帯域を「食いつぶして」いるかまでは特定してくれません。

ping や dig、netstat といった古典的なツールは、モノクロ画面の時代に誕生しました。これらは軽量であることを優先しており、直感性に欠けています。トラブルシューティングをより迅速に行うため、私はRustで書かれた3つのツール、gpingbandwhichdoggo に完全に移行しました。

なぜツールセットを刷新すべきなのか?

ネットワークが不安定な時、従来のツールでは説明しにくい3つの「死角」に原因があることが多いです。

  • レイテンシの変動(Jitter): Pingは返ってくるものの、不安定に上下している。
  • バックグラウンドプロセス: システムアップデートやバックアップスクリプトが回線を占有している。
  • DNSレスポンスの遅延: ドメイン名の解決に2〜3秒かかり、ウェブアプリがフリーズしたように見える。

わずか数秒でシステムの「病状」を特定するために、私がこの3つのツールをどのように活用しているかをご紹介します。

1. gping – リアルタイムグラフで遅延を可視化する

数値を読み取る代わりに、gping はターミナル内にグラフを描画します。ネットワークがラグった時のスパイク(尖った山)が一目でわかります。私はよく複数のノード間の遅延を比較して、問題がプロバイダー側にあるのか、内部デバイスにあるのかを切り分けるのに使っています。

クイックインストール

# Homebrewを使用(Linux/macOSで最も一般的)
brew install gping

# または cargo を使用
cargo install gping

実戦シナリオ

ネットワークの遅延が海底ケーブルのせいなのか、自宅のモデムのせいなのかを知るには、次のコマンドを試してみてください。

gping 1.1.1.1 google.com 192.168.1.1

画面には3色の異なるグラフが表示されます。もし3本とも同時に跳ね上がっていれば、間違いなくモデムかケーブルに問題があります。もし google.com だけが跳ねていれば、国際回線に問題があると考えられます。

2. bandwhich – 帯域を占有しているアプリを突き止める

bandwhich は、ネットワークを食いつぶしている「犯人」を探す際のお気に入りツールです。nloadiftop とは異なり、プロセス名、接続、送信先IPごとに詳細を表示してくれます。

インストール方法

# cargo でインストール
cargo install bandwhich

使用のコツ

サーバーの負荷が突然異常に高くなった時は、以下を実行してください。

sudo bandwhich

インターフェースは3つのカラムに明確に分かれています。rsync がバックグラウンドで50MB/sの速度でデータを転送していたり、Pythonのボットが外部へ数千のリクエストを投げていたりするのが即座にわかります。注意:システムのネットワークスタックにアクセスする権限が必要なため、必ず sudo で実行する必要があります。

3. doggo – モダンでクリーンなDNSクライアント

dig の出力が長ったらしいテキストの羅列で煩わしいと感じるなら、doggo がその答えです。カラー表示、読みやすいインターフェース、そして何より現代的なセキュリティ標準である DoH (DNS over HTTPS) をサポートしています。

インストール

go install github.com/mr-karan/doggo/cmd/doggo@latest

doggoを効果的に使うテクニック

ドメインのMXレコード(メールサーバー)を確認するには、次のように入力するだけです。

doggo itfromzero.com MX --human

結果は非常にすっきりと返ってきます。私が気に入っている機能の一つは、複数のサーバーから同時にDNSを確認し、レコードの更新が完了したかどうかをチェックできる機能です。

doggo google.com @8.8.8.8 @1.1.1.1

監視スクリプトを書く必要がある場合は、--json フラグを追加してください。他のツールで処理しやすい、非常に標準的なデータ形式で返されます。

60秒で終わるトラブルシューティング手順

何十ものコマンドを弄り回す代わりに、ネットワークに「異変」を感じた時は以下のワークフローを適用しています。

  1. gpingを起動: 安定性を確認。グラフがギザギザなら、物理回線の問題を疑う。
  2. bandwhichを開く: バックグラウンドで帯域を占有しているアプリがないか探す。怪しいプロセスがあれば、kill -9 で即座に解放する。
  3. doggoを使用: サービスの遅延が、DNSの誤解決やDNSサーバーの応答遅延(500ms以上)によるものでないか確認する。

補足: サーバーが数Gbpsといった膨大なトラフィックを捌いている場合、bandwhich はCPUリソースを少し消費します。そのため、確認が必要な時だけ起動し、終わったらすぐに終了させるのが賢明です。

これらのツールは、従来のLinuxコマンドを完全に置き換えるものではありません。しかし、観察にかかる時間を最大70%短縮してくれます。プレッシャーのかかる環境において、無機質なテキストを必死に追うよりも、直感的なグラフを見る方がはるかに効率的です。

Share: