netstatで通信の接続状況を定期監視し可視化
はじめに
以前投稿した「netstatで通信の接続状況を定期監視」では、netstatの結果をファイルに書き出すまででしたが、今回は接続先毎に状況を可視化できるようにしてみました。
必要なもの
-
Git for Windows(Git Bashを利用します)
- Microsoft Excel(グラフを描画します)
監視スクリプト
netstat_monitor.sh
#!/bin/bash
output_file=`date '+%Y%m%dT%H%M%S'`.tsv
echo "output: ${output_file}"
echo -e "datetime\tserver\tcount" > ${output_file}
while :
do
date_now=`date '+%Y%m%dT%H%M%S'`
netstat -an | egrep "ESTABLISHED|CLOSE_WAIT|TIME_WAIT" | awk '{print $3}' | sort | uniq -c | awk '{printf("%s\t%s\n",$2,$1)'} | sed "s/^/${date_now}\t/g" >> ${output_file}
echo ${date_now}
sleep 5
done
#!/bin/bash
output_file=`date '+%Y%m%dT%H%M%S'`.tsv
echo "output: ${output_file}"
echo -e "datetime\tserver\tcount" > ${output_file}
while :
do
date_now=`date '+%Y%m%dT%H%M%S'`
netstat -an | egrep "ESTABLISHED|CLOSE_WAIT|TIME_WAIT" | awk '{print $3}' | sort | uniq -c | awk '{printf("%s\t%s\n",$2,$1)'} | sed "s/^/${date_now}\t/g" >> ${output_file}
echo ${date_now}
sleep 5
done
ポート番号をカットしてサーバー毎にカウントする場合はawk '{print $3}' | sed "s/:[0-9]\+$//g" | sort |
のようにすると良いと思います。
Linuxの場合はawk '{print $3}'
をawk '{print $5}'
にします。
$ ./netstat_monitor.sh
output: 20200419T141531.tsv
20200419T141531
20200419T141537
20200419T141542
20200419T141547
20200419T141552
20200419T141557
20200419T141603
:
停止するには[CTRL]+[C]
Excelでグラフ化
出力されたtsvファイルをExcelに取り込み、ビボットテーブルで集計し、折れ線グラフで可視化します。
Excelに取り込み
ビボットテーブルで集計し、折れ線グラフにする
下図のように、ビボットテーブルのフィールドを設定し、集計結果を基にグラフ化します。
今回のサンプル例は、C# HttpClientのマルチスレッド・プログラムで某サイトにアクセスした結果です。一気に600ポート消費しています。その後、プログラムを停止し消費ポート数が減っていくのが分かります。
参考文献
Author And Source
この問題について(netstatで通信の接続状況を定期監視し可視化), 我々は、より多くの情報をここで見つけました https://qiita.com/curvaceous410/items/b862bbca78e6d544b41e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .