Apacheのアクティブ接続数を取得する

Windows だと perfmon 使えば一発なんだけど、Linux だとどうやるんだっけ?
って事で調べてみました。

前に、Apache が怪しい動きをしていた時に使った lsof コマンドでも似たようなことが出来るかなぁっと思ったんだけど、これだと単純にプロセス数になってしまいます。
当然、Current Connections とは違う。

ってことで、やはり一番簡単なのは普通に netstat の結果に grep かけて行数をカウントする方法。

netstat -an |grep :80 |wc -l

まぁ、これでも良いんだけど、これだと全部のIPが纏めてカウントされてしまう。

って事で、色々見てたらかなり強引だけど、IP別に表示する方法がありました。

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

素晴らしい、
thats what i was looking for..
確かに。

でも、これ IPv4 なら問題ないんだけど、IPv6だと

cut -d: -f 1

の部分で IPv6 の IP を全部そぎ落としてしまうので、ちょっと改造しました。

netstat -plan|grep :80|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1

これで IP別にカウントされます。

欲を言うとホストヘッダー毎にカウントできると一番いいんだけど、まぁ、今回はこれくらいで。


で、こういうのって状況的に、ロードバランサーからサーバーを外したりとか、入れたりとかした時の変化を監視するのに使ったりするので、出来れば数秒間隔で更新されるといいなぁっと思ってたんですが、watch を使えば出来ますね。

watch -d -n 1 "netstat -an |grep :80 |wc -l"

とか

watch -d -n 1 "netstat -plan|grep :80|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1"

みたいな感じ。

今回はじめて watch の d オプション使ってみたけど、これはいいですね。

なんか少し、監視している気分になりました(笑)


2012-09-28追記

前回のスクリプトだと HTTP のコネクションしかカウント出来なかったので、HTTPS もカウントするように修正しました。

watch -d -n 1 "netstat -plan|egrep ':(80|443) '|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1"

これで、WEB に対してのコネクションがどの程度有るか一発で分かります!