Windows だと perfmon 使えば一発なんだけど、Linux だとどうやるんだっけ?
って事で調べてみました。
前に、Apache が怪しい動きをしていた時に使った lsof コマンドでも似たようなことが出来るかなぁっと思ったんだけど、これだと単純にプロセス数になってしまいます。
当然、Current Connections とは違う。
ってことで、やはり一番簡単なのは普通に netstat の結果に grep かけて行数をカウントする方法。
netstat -an |grep :80 |wc -lhttp://blog.mattsatorius.com/technology/web-design/ssh-command-to-show-current-active-apache-connections/
まぁ、これでも良いんだけど、これだと全てのIPアドレスを一緒にしてカウントされてしまうので、もっといい方法が無いか調べてみました。
IP別に集計する
って事で、色々見てたらかなり強引だけど、IP別に表示する方法がありました。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1http://www.webhostingtalk.com/showthread.php?t=673467
素晴らしい!
thats what i was looking for..
確かに。
でも、これ IPv4 なら問題ないんだけど、IPv6だとcut -d: -f 1
の部分で IPv6 の IP を全部そぎ落としてしまうので、ちょっと改造しました。
IPv6 も考慮してみた
netstat -plan|grep :80|awk {'print $5'}|sed -e 's/\:[^.]*$//'|sort|uniq -c|sort -nk 1
これで IP別にカウントされます。
欲を言うとホストヘッダー毎にカウントできると一番いいんだけど、まぁ、今回はこれくらいで。
watch で自動更新する
で、こういうのって状況的に、ロードバランサーからサーバーを外したりとか、入れたりとかした時の変化を監視するのに使ったりするので、出来れば数秒間隔で更新されるといいなぁっと思ってたんですが、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 オプション使ってみたけど、これはいいですね。
なんか少し、監視している気分になりました(笑)
HTTPS もカウントするように
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 に対してのコネクションがどの程度有るか一発で分かります!
コメント