目次

Linux ネットワーク確認(コマンド比較 sar, bwm-ng)



ネットワーク監視の知識

SNMPv1の32bitカウンタ問題

SNMPv1 は 32bit のみをサポート。64bitをサーポートしているのは,SNMPv2C and SNMPv3。

32bitは、2^32[Byte] = 4,294,967,296 [Byte] = 4294967296 x 8 = 34359738368 [bit]。

5[min] = 300[sec] 間隔でカウンタを読みにいく場合
34359738368 / 300 = 114,532,461[bps] = 114[Mbps] で 5分間通信されてしまうと,
監視する間に桁上がりしちゃって値を正しく取得できない。

1[min] = 60[sec] 間隔でカウンタを読みにいく場合
34359738368 / 60 = 572,662,306[bps] = 572[Mbps] で 1分間通信されてしまうと,
監視する間に桁上がりしちゃって値を正しく取得できない。


Linuxコマンド

sar -n DEVで、NICごとのインとアウトのトラフィックを確認

インターフェース合計のインとアウトを確認できます。
傾向を正しく掴むためには、インタフェースでgrepしましょう。(sar -n DEV | grep eth0)

$ sar -n DEV 1
Linux 3.10.0-327.10.1.el7.x86_64 (centos7)       2018年07月10日  _x86_64_        (2 CPU)

00時15分02秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
00時15分03秒      eth0      8.00      1.00      0.88      0.15      0.00      0.00      0.00
00時15分03秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

00時15分03秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
00時15分04秒      eth0     10.00      3.00      0.80      0.74      0.00      0.00      0.00
00時15分04秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

00時15分04秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
00時15分05秒      eth0      9.00      2.00      0.91      0.50      0.00      0.00      0.00
00時15分05秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
^C


00時15分05秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
00時15分05秒      eth0      7.46      7.46      0.64      1.33      0.00      0.00      0.00
00時15分05秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均値:      IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均値:       eth0      8.72      3.00      0.82      0.62      0.00      0.00      0.00
平均値:         lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
rxkB/s 1秒間あたりの受信キロバイト数
Mbps単位にするには、{rxkB/s} / 1024 * 8
txkB/s 1秒間あたりの送信キロバイト数
Mbps単位にするには、{txkB/s} / 1024 * 8
   500 rxkB/s = 3.9 Mbps
 1,000 rxkB/s = 7.8 Mbps
 5,000 rxkB/s = 39.0 Mbps
10,000 rxkB/s = 78.1 Mbps


bwm-ngで、NICごとのトラフィックを表示

top感覚で、NICごとのトラフィックを表示します。

$bwm-ng

  bwm-ng v0.6.1 (probing every 0.500s), press 'h' for help
  input: /proc/net/dev type: rate
  /         iface                   Rx                   Tx                Total
  ==============================================================================
           enp0s3:           0.12 KB/s            0.74 KB/s            0.86 KB/s
  br-295e2a4e2c26:           0.00 KB/s            0.00 KB/s            0.00 KB/s
               lo:           2.24 KB/s            2.24 KB/s            4.49 KB/s
          docker0:           0.00 KB/s            0.00 KB/s            0.00 KB/s
  ------------------------------------------------------------------------------
            total:           2.36 KB/s            2.98 KB/s            5.35 KB/s


cat /proc/net/devでNICごとのエラーやコリジョン等を確認

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 27308215278 141779019    0    0    0     0          0         0 84148972390 38829977    0    0    0     0       0          0
    lo: 99073617055 34553250    0    0    0     0          0         0 99073617055 34553250    0    0    0     0       0          0
$
Receive bytes
packets 受信したパケットの数
errs エラーを起こしていたパケット数
drop
fifo
frame
compressed
multicast
Transmit bytes
packets 送信したパケットの数
errs エラーを起こしていたパケット数
drop
fifo
colls 衝突(コリジョン)を起こしたパケット数
carrier
compressed
multicast


netstat -iで、インターフェースごとのErrorやDropを確認

# netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
br-295e2  1500     1273      0      0 0           703      0      0      0 BMU
docker0   1500        0      0      0 0             0      0      0      0 BMU
enp0s3    1500     1273      0      0 0           703      0      0      0 BMRU
lo       65536     3202      0      0 0          3202      0      0      0 LRU
MTU 1回の転送で送信できるデータの最大値を示す値
送信する側が接続ごとに値を設定できる。
送信側ホストが受信側ホストより大きいMTUを持っていた場合は、
送信側が受信側のMTUに従ってデータを再分割して送信する。
エラーデータの再送信はMTUに指定されたサイズを単位として行われるため、
劣悪な通信環境ではMTUを小さい値に設定した方が転送速度が速くなり、
逆に安定した通信環境では制御信号が少なくなる分MTUの大きい方が転送速度が速くなる。
Met メトリック
送信元から宛先までの距離
RX Receiver。Xは以下省略ということらしい。
受信
TX Transmitter。Xは以下省略ということらしい。
送信
OK 正常パケット数
ERR エラー・パケット数
DRP 破棄パケット数
自覚を持って切り捨て
OVR オーバーロードとなったパケット数
超過して失ったパケット数
Flg B : ブロードキャスト
M : インタフェースは、プロミスキャス・モード
R : 動作中
U : 使用可能
L : ループバック


# ip -s link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    69956939   734115   0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    69956939   734115   0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 02:01:76:1b:6f:c6 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    43434766052 454007619 0       1481    0       0
    TX: bytes  packets  errors  dropped carrier collsns
    175763584705 54913952 0       0       0       0


netstat -sで、プロトコルごとのエラー等を確認

# netstat -s
Ip:
    Forwarding: 2
    227248004 total packets received
    151 with invalid addresses
    0 forwarded
    0 incoming packets discarded   ★破棄された受信IPパケット数(受信バッファーが足りないなどの理由)
    223126191 incoming packets delivered  上位プロトコル(TCP/UDPなど)へ正常に届けられた受信IPパケット数
    55632439 requests sent out     下位プロトコル(イーサネットなど)へ転送できた送信IPパケット総数
    2 outgoing packets dropped
    2 reassemblies required
    1 packets reassembled ok
    4 fragments failed
Icmp:
    44337 ICMP messages received
    104 input ICMP message failed  受信に失敗したICMPメッセージ数
    ICMP input histogram:
        destination unreachable: 7574
        timeout in transit: 554
        echo requests: 36207
        timestamp request: 2
    61086 ICMP messages sent
    0 ICMP messages failed      送信に失敗したICMPメッセージ数
    ICMP output histogram:
        destination unreachable: 24877
        echo replies: 36207
        timestamp replies: 2
IcmpMsg:
        InType3: 7574
        InType8: 36207
        InType11: 554
        InType13: 2
        OutType0: 36207
        OutType3: 24877
        OutType14: 2
Tcp:
    58753 active connection openings
    1331813 passive connection openings
    29664 failed connection attempts   接続失敗数
    23857 connection resets received   リセットされた接続数(または送受信のそれぞれの数)
    13 connections established
    63398380 segments received         受信したTCPセグメント(データ)数
    134176225 segments sent out        送信したTCPセグメント(データ)数
    2832607 segments retransmitted   ★再送されたTCPセグメント(データ)数
    10 bad segments received           不正なセグメントの受信数
    601884 resets sent
Udp:
    423407 packets received
    36883 packets to unknown port received
    0 packet receive errors            エラー受信UDPパケット数
    407400 packets sent
    0 receive buffer errors
    0 send buffer errors
    IgnoredMulti: 159223167
UdpLite:
TcpExt:
    29658 resets received for embryonic SYN_RECV sockets
    113 packets pruned from receive queue because of socket buffer overrun
    32 ICMP packets dropped because they were out-of-window
    520375 TCP sockets finished time wait in fast timer
    15861 packetes rejected in established connections because of timestamp
    56854 delayed acks sent
    430 delayed acks further delayed because of locked socket
    Quick ack mode was activated 217201 times
    248 SYNs to LISTEN sockets dropped
    4053271 packet headers predicted
    33092622 acknowledgments not containing data payload received
    18905290 predicted acknowledgments
    400 times recovered from packet loss due to fast retransmit
    TCPSackRecovery: 215141
    TCPSACKReneging: 1330
(略)