「netstatはもう古い?」ネットワークエンジニアが今すぐ『ss』コマンドを使うべき理由
皆さん、こんにちは。データセンターの片隅で、深夜の障害アラートの音を子守唄代わりに聞きながら長年生き抜いてきたNOCエンジニアです。
サーバーの調子が悪いとき、まず何を確認しますか? 「誰がこのサーバーに繋いでいるんだ?」「どのポートが死んでるんだ?」と、真っ先にネットワークの状態を見に行きますよね。そのとき、皆さんは何のコマンドを使っていますか?
もし、まだ netstat を叩いているなら、今日で卒業しましょう。今回は、大規模環境の現場で「これがないと仕事にならない」と言われる、超高速なソケット調査ツール ss コマンドの世界へご案内します。
—
郵便局の「窓口」と「バックヤード」のお話
ss コマンドの凄さを理解するために、ちょっとだけ例え話をさせてください。
サーバーがネットワークと通信する様子は、大きな「郵便局」に似ています。
- ソケットは、手紙(データ)をやり取りするための「窓口」です。
- カーネルは、その窓口の裏側で、どの手紙をどこへ送るかを管理する「バックヤード(司令塔)」です。
これまで使われてきた netstat は、このバックヤードの情報を知りたいとき、「役所の台帳( /proc という場所にあるファイル)」をいちいちめくって情報を探していました。でも、窓口が何万個も増えたらどうなるでしょう? 台帳をめくるだけで日が暮れてしまいますよね。
一方、ss はどう動くか。これはバックヤードの管理者(カーネル)に直接、「今の状況はどうなってる?」と「Netlinkソケット」という専用の直通電話で問い合わせるんです。台帳をめくる必要なんてありません。だから、大規模なアクセスがあっても爆速で結果が返ってくるのです。
—
さっそく『ss』を使ってみよう!
難しい理屈はさておき、まずは現場で一番よく使うコマンドから試してみましょう。
1. 全ての接続をリストアップする
まずは、今サーバーで何が起きているかを確認します。
# 全てのTCP接続、かつ数値で表示(名前解決してると時間がかかるため)
ss -t -a -n
-t: TCPの接続だけを表示してね(TCPは「届いたか確認する丁寧な郵便」のことです)。-a: 待機中(LISTEN)のものも全部見せてね。-n: IPアドレスやポート番号を数字のまま表示してね(名前解決を待つと遅いので、現場の基本です)。
2. 待ち受け中のポートだけを絞り込む
「Webサーバーがちゃんと動いてるか確認したい」という時は、これです。
# LISTEN(待ち受け)状態のポートを詳しく表示
ss -lnt
これだけで、「あ、80番ポートや443番ポートがちゃんと客待ちしてるな」と一瞬で判断できます。
3. 特定の接続だけを抽出する
「特定のIPアドレスからのアクセスが多すぎる!」という緊急時には、grep と組み合わせるのが鉄板です。
# 特定のIPアドレスからの接続だけを抽出
ss -nt | grep "192.168.1.10"
—
現場で役立つ「フィルタリング」の魔法
ss の真骨頂は、実はコマンドの引数でさらに細かいフィルタをかけられることです。例えば、「接続状態が『確立(ESTAB)』しているものだけ見たい」という時はこう書きます。
# 接続が確立している(ESTAB)ものだけ表示
ss -nt state established
これを使えば、何万という接続がある中で、「今まさに通信している相手」だけを瞬時に抜き出せます。障害対応中に、ゴミ情報の中から「犯人」を探し出すための必須テクニックです。
—
最後に:ツールを使いこなすということ
netstat を否定するつもりはありません。あれはあれで歴史ある素晴らしいコマンドです。しかし、現代のクラウドや大規模なWebサービスを支えるインフラでは、「いかに素早く、正確に現状を把握するか」がエンジニアの腕の見せ所です。
ss コマンドは、カーネルの深い部分を覗き見るための「特等席」です。最初はコマンドのオプションを覚えるのが大変かもしれませんが、まずは ss -lnt だけでも毎日叩いてみてください。
「あ、今のパケットの流れ、なんとなく見えてきたかも?」
そう感じたとき、あなたはもう立派なインフラエンジニアの入り口に立っています。現場で困ったときは、いつでもこの「直通電話」を使って、サーバーの心の声を聞いてあげてくださいね。
また次の記事で、現場の知恵をお話ししましょう!
コメント