2017年12月28日木曜日

iptablesで通信量を測定

クラスタのノード間での通信量を測定するための仕掛けを探していたら、実はiptablesでできることが判明。 こちらのサイトが元ネタ。 要するに、各ノードごとにチェインを用意してやればよい。チェインごとの統計をiptablesで取得できる。 まずクリアしておいて、
sudo iptables -F
sudo iptables -X
対象ノードごとに下記のようにルールを設定する。
sudo iptables -N host
sudo iptables -A OUTPUT -j host
sudo iptables -A INPUT -i eth0 -j host
sudo iptables -A host -d 172.16.96.1/32
sudo iptables -A host -s 172.16.96.1/32
すると、下記のように通信量を取得できる。左端に出ているのがパケット数とバイト数。
> sudo iptables -v -n -L host
Chain host (2 references)
 pkts bytes target     prot opt in     out     source               destination         
   44  7068            all  --  *      *       0.0.0.0/0            172.16.96.1         
   74  5579            all  --  *      *       172.16.96.1          0.0.0.0/0   
これらのカウンタは下記でリセットできる。
 sudo iptables -Z
新しいものを入れる必要が無いので手軽といえば手軽だが、全部のノードに、ノード数分だけルール入れるの面倒くさい。。インターフェイスも2系統あったりするのでさらに。。