Byeo

네트워크 트래픽 관측 도구 (Network Traffic Monitoring Tool) 본문

프로그래밍 (Programming)/컴퓨터 네트워크 - 학부 외

네트워크 트래픽 관측 도구 (Network Traffic Monitoring Tool)

BKlee 2024. 2. 14. 22:55
반응형

Linux server의 시스템 상태를 확인하기 위해서 많은 사람들이 많이 쓰는 응용은 아마도 top 일 거예요. 그런데 top은 CPU / Memory 사용량을 전체 시스템 뿐만 아니라 개별 process 마다 보여주는데 반해, I/O와 관련된 정보는 찾기가 쉽지 않습니다. 윈도우는 ctrl+alt+delete로 한 눈에 쉽게 보여주는데 말이죠.

 

그래서 이 포스트에서는 네트워크 트래픽 관측 툴들 몇 가지를 직접 사용해보고 정리해보려고 합니다.

 

구글에서 찾아보면 정말 많은 툴들이 존재합니다만, 각각을 깊이 다뤄본다기 보다는 간단하게 만져보고 장단점을 정리해보려고 합니다. 각 툴들의 캡처 화면과 내용을 살펴보시면서 마음에 드는 툴을 고르는데 도움이 되었으면 좋겠습니다~.

 

1개의 도구를 제외하고는 CLI 기반입니다. 불가피하게 GUI를 사용할 수 없는 상황이 많기 때문이죠.

 

환경 구성

  • 단순한 구성: 1개의 NIC이 존재. iperf3이 2개의 TCP session (Tx, Rx)을 생성하고, hping3 UDP 1개의 session이 flooding, ping이 동시에 실행된다.
    • iperf3 -c $ServerIP --bidir -t 2000
    • hping3 $ServerIP -2 -k -p 1122 --flood
    • ping $ServerIP
  • 복잡한 구성을 확인하기 위해서 NIC 3개가 존재할 때 테스트를 진행. 아래의 표에서 NIC 구분/출력 항목한 화면 여러 NIC 항목을 통해 다중 NIC 지원 여부를 확인할 수 있고, 캡쳐는 하지 않음

OS

  • NHN Cloud의 Ubuntu 22.04 instance를 생성하여 테스트

0. 종류

도구 bps pps NIC
구분/출력
한 화면
여러 NIC
Process
구분/출력
Address
구분/출력
Protocol
구분/출력
그래프
시각화
History 기타
1. iftop O X / / X O X O X  
2. bmon O O O O X X X O O tc도 구분
3. slurm O / / X X X O O  
4. tcptrack O X / / X O / X X  
5. nethogs O X O O O X O X X  
6. ifstat O X O O X X X X X  
7. nettop O X X O O O O X X  
8. nload O X O X X X X O O  
9. netstat X O O O X X X X X  
10. dstat O X X X X X X X O  
11. iptraf O O O O X O O X X  
12. speedometer O X O O X X X O O  
13. vnstat O O O O X X X X O daemon
14. cbm O X O O X X X X X  
15. bandwhich O X O O O O O X X  
16. darkstat O X O O X O X O O daemon, GUI

 

bps, pps

bps: bandwidth 정보를 제공하는 경우: O

pps: packet 개수와 관련된 정보를 제공하는 경우: O (pps값이 아니라 현재까지의 누적 packet값만 제공하는 경우: △)

 

NIC 구분

여러개의 NIC을 모니터링 시작했을 때, 모니터링 화면에서 NIC을 구분해주는 경우: O

여러개의 NIC을 모니터링 시작했을 때, 모니터링 화면에서 NIC을 구분하지 않는 경우: X

여러개의 NIC을 모니터링 할 수 없는 경우: /

 

Process, Address, Protocol 구분/출력

각각의 요소를 화면 내에 통계를 수집하는 단위로서 사용한 경우: O (e.g., pid 혹은 process name별로 통계를 구분한 경우)

그렇지 않은 경우: X

 

그래프 시각화

막대그래프 등으로 현재 상황을 시각화 한 경우: O 

그렇지 않은 경우: X

 

History

현재의 상황만 아니라 과거의 상황까지 정보를 그래프 혹은 텍스트로서 제공하는 경우: O 

그렇지 않은 경우: X

 

1. iftop

메뉴얼

https://linux.die.net/man/8/iftop

 

설치

apt install iftop

 

실행

iftop -P

-P: port 번호를 화면에 출력

 

화면

 

장점

  • Simple하다!
  • NIC이 사용하는 트래픽 양을 주소별로 알 수 있다. (Tx / Rx 별도)
  • 글자에 하얀색 배경은 화면 최상단의 bar를 통해서 어느정도 쓰는지 알 수 있다. 즉, 정보의 시각화를 제공한다.
  • 우측에 2초, 10초, 40초 평균을 제공한다.

 

단점

  • 프로토콜과 관련된 정보가 보이지 않는다.
  • 프로세스와 관련된 정보도 없다. 만약 5-tuple에서 protocol만 다른 경우, 프로세스가 다를 수도 있다.
  • 한 화면에 인터페이스 1개다. -i 옵션으로 지정하지 않으면 interface list에서 가장 첫 interface를 보여준다.

 

 

2. bmon

메뉴얼

https://linux.die.net/man/1/bmon

 

설치

apt install bmon

 

실행

bmon

 

 

화면

 

장점

  • NIC별로 bps와 pps를 한 눈에 보여준다.
  • 선택한 1개의 NIC에 대해서 시각화하여 그래프도 그려준다.
  • tc (traffic control qdisc)와 관련된 정보까지 세세히 제공한다.

단점

  • NIC 단위에 대한 정보에 집중해있어서 process 별 정보, five-tuple 별 정보 등은 얻기 힘들다.
  • 8을 곱하면 되긴 하나.. bps가 Byte단위로 나온다. 

3. slurm

메뉴얼

https://github.com/mattthias/slurm

 

설치

apt install slurm

 

실행

slurm -i eth0

 

화면

 

장점

  • NIC 1개에 대하여 Tx, Rx의 bps와 pps를 보여준다.
  • 시각화하여 그래프도 그려준다. 초록색이 Rx, 빨간색이 Tx다.
  • 화면이 단순하다.

단점

  • NIC 단위에 대한 정보에 집중해있어서 process 별 정보, five-tuple 별 정보 등은 얻기 힘들다.
  • NIC을 1개만 선택할 수 있다. 
  • Received와 Transmitted 항목은 bmon을 실행한 이후의 값이 아니라, 링크가 활성화 된 이후의 값이다.

 

4. tcptrack

매뉴얼

https://linux.die.net/man/1/tcptrack

 

설치

apt install tcptrack

 

실행

slurm -i eth0

 

화면

iperf3 bandwidth를 500 Mbps로 제한한 상태.

장점

  • NIC 1개에 대하여, 현재 이루어지고 있는 TCP 연결의 상태를 보여준다.
  • 화면이 단순하다.

단점

  • TCP만 사용 가능하다.
  • NIC을 1개만 선택할 수 있다. 
  • 1 Gbps를 넘기면 Speed가 LUDICROUS로 표시되어 정확한 값을 알 수 없게된다. 따라서 고성능 환경에서는 사용이 어렵다. (https://github.com/bchretien/tcptrack/issues/2)
  • Traffic 사용량의 history를 제공하지는 않는다.

5. Nethogs

매뉴얼

https://linux.die.net/man/8/nethogs

https://github.com/raboof/nethogs

 

설치

apt install nethogs

 

실행

nethogs -C

 

화면

 

장점

  • Process별로 어떤 NIC을 통해서 traffic을 얼마나 주고받는지 보여준다.
  • 화면이 단순하다.

단점

  • UDP는 pid가 unknown으로 출력된다. (github을 살펴보면 꽤나 최근에도 개발이 진행중인 상태인데, 더 높은 버전에서 확인해보면 좋을 것 같다.)
  • address와 관련된 정보는 찾기 힘들다.
  • Bandwidth 사용량의 history를 보여주지는 않는다. 현재의 상태만을 제공한다.

6. ifstat

매뉴얼

https://linux.die.net/man/8/nethogs

https://github.com/raboof/nethogs

 

설치

apt install ifstat

 

실행

ifstat -t

 

화면

장점

  • 정말 단순하다. 

단점

  • NIC별 Bandwidth를 제외하고는 정보가 별로 없다. 메뉴얼을 훑어서 더 있는지 찾아보자!

 

7. nettop

매뉴얼

https://github.com/Emanem/nettop

 

설치

apt install libncurses5-dev libpcap-dev
git clone https://github.com/Emanem/nettop.git
cd nettop
make

 

실행

./nettop --tcp-udp-split

 

화면

 

장점

  • Process별로 Traffic 양을 보여준다.
  • TCP뿐만 아니라 UDP 정보도 함께 보여준다. 
  • 목적지 주소도 함께 보여준다.
  • 화면이 깔끔하다.

단점

  • hping3은 왜 PID가 -1로 나왔을까?
  • bandwidth history를 제공하지는 않는다.
  • NIC이 여러개인 경우, 어느 interface로 나갔을지 한 눈에 파악하기는 어렵다.

 

8. nload

매뉴얼

https://linux.die.net/man/1/nload

 

설치

apt install nload

 

실행

nload

 

화면

 

장점

  • NIC별로 현재 흐르는 traffic 양을 한 눈에 보기 쉽도록 보여준다.
  • 시각화도 나름 되어있는 편이다.

단점

  • process별, address별 정보는 제공하지 않는다.
  • 여러 NIC을 동시에 모니터링하긴 하나, 한 화면에 한 NIC만 볼 수 있다.

9. Netstat

매뉴얼

https://linux.die.net/man/8/netstat

 

설치: 기본 제공 커맨드

 

실행

netstat -c -i

 

화면

 

장점

  • 여러 NIC들의 Rx/Tx packet을 보여준다.

단점

  • ifconfig에서 보여지는 packet 개수 관련 정보를 1초마다 출력해주는 것과 같다. 그 외의 정보가 제공되지 않는다. (사실은 bandwidth 사용량을 모니터링하기 위한 도구보다는 다른 기능으로서 유용하다.)

 

10. dstat

매뉴얼

https://linux.die.net/man/1/dstat

 

설치

apt install dstat

 

실행

nload

 

화면

장점

  • 네트워크 상태 뿐만 아니라 disk, cpu 사용량 등 다양한 정보를 제공한다.

단점

  • NIC별로, 프로세스 별로 등 확인하기 어렵다.

 

11. iptraf

매뉴얼

http://iptraf.seul.org/2.2/manual.html

https://man7.org/linux/man-pages/man8/iptraf.8.html

 

설치

apt install iptraf

 

실행

iptraf

 

화면

 

장점

  • NIC별로 간단한 통계 (IPv4, IPv6)를 한 화면에 제공한다.
  • 자세하게 보고 싶은 NIC을 선택하면 IPv4, IPv6, TCP, UDP, ICMP 등 프로토콜 별로 inbound, outbound packet, bytes 누적 통계를 알 수 있다.
  • TCP 주소별로 통계도 제공한다.
  • 종합적으로 다양한 기능들이 함께 포함되어있다.

단점

  • history를 제공하지는 않는다.

 

12. speedometer

매뉴얼

https://linuxcommandlibrary.com/man/speedometer

 

설치

apt install speedometer

 

실행

speedometer -r eth0 -t eth0

 

화면

장점

  • NIC별로 Rx, Tx의 정보를 제공한다.
  • 한 화면에 여러개의 NIC을 담을 수 있다. (-r eth0 -t eth0 -r eth1 -t eth1과 같은 방식으로 여러 NIC을 한 화면에 가능)
  • 깔끔한 시각화를 제공한다. 우측의 파란색과 하얀색 막대그래프는 일정 시간 평균을 의미하는 것으로 보인다.

단점

  • process별, address별 확인은 어렵다.
  • pps 등의 정보는 없다.

13. vnstat

매뉴얼

https://linux.die.net/man/1/vnstat

 

설치

apt install vnstat

 

실행

vnstat -l

# 아래는 여러 개의 NIC을 동시에 모니터링하고 싶은 경우
vnstat --add eth1
vnstat --add eth2

 

화면

interactive

 

5분 통계

 

장점

  • NIC에서 tx와 rx의 통계를 보여준다.
  • pps, Gbps등을 함께 보여준다.
  • Daemon으로 돌아간다. 따라서 나중에 시간이나 일 단위의 통계를 확인할 일이 있는 경우에 사용하기 좋다. 

단점

  • process별, address별 확인은 어렵다.
  • Daemon이 수집하는 데이터는 구간당 1G를 넘길 수 없다.

 

14. cbm

매뉴얼

https://www.unix.com/man-page/debian/1/cbm/

 

설치

apt install cbm

 

실행

cbm

 

화면

 

장점

  • 심플하다.
  • 수신과 송신의 bandwidth를 보여준다.

단점

  • NIC단위의 정보를 보여주기에, process나 address 등의 정보가 많지는 않다.

 

15. Bandwhich

매뉴얼

https://github.com/imsnif/bandwhich

 

설치

curl -Lo bandwhich.tar.gz https://github.com/imsnif/bandwhich/releases/download/v0.22.2/bandwhich-v0.22.2-x86_64-unknown-linux-musl.tar.gz
tar -xvzf bandwhich.tar.gz

 

실행

./bandwhich

 

화면

 

장점

  • 다양한 정보들을 한 화면에 제공해준다. Process 별 bandwidth 사용량, address별 주소 사용량, 어떤 프로토콜을 사용하는지, 그리고 어떤 NIC을 통해서 통신하는지 등을 한 눈에 보여준다.
  • 수신과 송신의 bandwidth를 보여준다.

단점

  • History를 제공하지 않는다.
  • NIC별 통계는 없다.

 

 

16. darkstat (GUI)

매뉴얼

https://unix4lyfe.org/darkstat/

 

설치

apt install darkstat

 

실행

vi /etc/darkstat/init.cfg
# 위 파일에서 START_DARKSTAT=yes로 변경

systemctl restart darkstat

 

화면

기본 포트는 667이다. 따라서 darkstat이 구동중인 서버의 ip:667로 접속하여 확인한다.

 

장점

  • Web 기반의 GUI로 깔끔하게 정보를 파악할 수 있다.
  • 긴 History를 제공한다.
  • NIC 여러개를 설정하여 동시에 정보를 취득할 수 있다.

단점

  • Process와 관련된 정보는 없다.

 

GUI 기반의 Network Bandwidth Monitoring tool도 다양하게 존재할텐데, 우선 CLI 기반만 정리하였습니다. GUI 기반은 우선 한 가지만 예제로 살펴보았고, 다음에 기회가 되면 GUI 기반도 별도로 정리해볼 예정입니다.

반응형
Comments