본문 바로가기
Linux/명령어

[Linux] 네트워크 트래픽 모니터링 - 'nethog', 'iftop' 설치 및 사용법

by A6K 2020. 11. 10.

서버의 네트워크 상태를 모니터링하기 위한 도구로 nethogiftop 명령이 있다.nethog는 서버에서 구동중인 데몬이나 프로세스 레벨에서 트래픽을 모니터링 할 수 있는 도구이며, iftop은 NIC(Network Interface Card)레벨에서 트래픽을 모니터링 할 수 있는 도구다.

이 두 유틸리티를 잘 활용하면 서버에서 발생하는 네트워크 장애 상황을 모니터링 할 수 있고, 과도하게 네트워크 리소스를 잡아먹는 프로세스를 잡아낼 수 있다.

목차

    1. nethogs 설치

    nethogs 유틸리티는 리눅스 배포판에 기본 포함되지 않은 경우가 많다. 이 경우 수동으로 설치해주면 된다. yum이나 apt-get 같은 패키지 관리도구를 이용하면 편하다.

    CentOS

    sudo yum install nethogs

    Ubuntu

    sudo apt-get install nethogs

    nethobs 사용법

    nethogs 를 사용하기 위해서는 sudo 권한이 필요하다.

    sudo nethogs {인터페이스 이름}

    sudo를 이용해서 nethogs 명령을 실행하면 된다. 인자로 아무것도 입력하지 않으면 해당 호스트의 첫 번째 네트워크 인터페이스에 대해 모니터링을 시작한다. 만약 특정 인터페이스를 모니터링하고 싶으면 (etho0를 모니터링하려면) 다음처럼 인자로 넘기면 된다.

    sudo nethogs etho0

    명령을 실행하면 다음 결과를 얻게 된다.

    nethogs는 선택한 인터페이스를 이용하고 있는 프로세스들의 네트워크 트래픽 정보를 확인할 수 있다. 클러스터에서 네트워크 트래픽을 잡아먹고 있는 데몬을 잡아내는데 유용하게 사용할 수 있다.

    nethogs 옵션

    nethogs는 간단한 사용 이외에도 몇 가지 옵션을 제공하고 있다. nethogs -h 명령을 이용해서 사용할 수 있는 옵션을 확인해볼 수 있다.

    $ sudo nethogs -h
    usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
                    -V : prints version.
                    -h : prints this help.
                    -b : bughunt mode - implies tracemode.
                    -d : delay for update refresh rate in seconds. default is 1.
                    -v : view mode (0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB). default is 0.
                    -c : number of updates. default is 0 (unlimited).
                    -t : tracemode.
                    -p : sniff in promiscious mode (not recommended).
                    -s : sort output by sent column.
       -a : monitor all devices, even loopback/stopped ones.
                    device : device(s) to monitor. default is all interfaces up and running excluding loopback
    
    When nethogs is running, press:
     q: quit
     s: sort by SENT traffic
     r: sort by RECEIVE traffic
     m: switch between total (KB, B, MB) and KB/s mode

    더 자세한 설명은 nethogs 매뉴얼 페이지를 참고하면 된다. (링크 :nethogs(8) - Linux man page)

    2. iftop 설치

    nethogs와 마찬가지로 iftop 역시 리눅스 배포판에 기본으로 설치되어 있지 않은 경우가 많다. 수동으로 설치해주자.

    CentOS

    sudo yum install iftop

    Ubuntu

    sudo apt-get install iftop

    iftop 사용법

    iftop 역시 sudo 권한이 필요하다.

    sudo iftop

    별도의 인자를 명시하지 않으면 첫 번째 네트워크 인터페이스를 기준으로 모니터링이 수행된다.

    현재 접속중인 호스트를 기준으로 다른 호스트들과의 통신에 대한 통계정보를 확인할 수 있다.

    각 라인에서 첫 번째 항목은 현재 접속중인 호스트의 이름 혹은 IP 주소를 의미한다. 위 사진에서 'c603ad4f5fd8'라는 정보로 표시되고 있는 것이 현재 접속중인 머신의 호스트 정보다. 테스트를 위해 도커 환경에서 진행했기 때문에 도커 컨테이터의 id가 표시되었다. 그 다음 화살표 옆에 나타나는 정보가 현재 호스트가 통신하고 있는 대상 호스트 정보다. 현재 접속해있는 호스트가 서버라면 서버와 통신하고 있는 다른 서버 혹은 클라이언트의 정보가 이곳에 표시된다.

    그 다음 항목들은 평균 전송량을 의미한다. 첫 번째 항목이 2초, 두 번째 항목이 10초, 세 번째 항목이 40초 동안의 평균 전송량을 의미한다.

    화면의 하단에는 또 다른 통계 정보들이 표시된다. 약어로 되어 있어서 의미 전달이 안되는데 각각의 의미는 다음과 같다.

    • TX : 전송량 (Transmitting)
    • RX : 수신량 (Receiving)
    • TOTAL : 총량

    각 항목들은 다음과 같은 서브 항목들로 세분화 된다.

    • cum : 누적 전송량
    • peak : 피크 상태일 때의 전송량
    • rates : 각각 2초/4초/10초간 평균 데이터 흐름

    iftop 옵션

    iftop의 사용뻐은iftop --help혹은iftop -h명령을 통해 간단하게 확인할 수 있다.

    $ sudo iftop -h
    iftop: display bandwidth usage on an interface by host
    
    Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
    [-F net/mask] [-G net6/mask6]
    
    -h display this message
    -n don't do hostname lookups
    -N don't convert port numbers to services
    -p run in promiscuous mode (show traffic between other
    hosts on the same network segment)
    -b don't display a bar graph of traffic
    -B Display bandwidth in bytes
    -i interface listen on named interface
    -f filter code use filter code to select packets to count
    (default: none, but only IP packets are counted)
    -F net/mask show traffic flows in/out of IPv4 network
    -G net6/mask6 show traffic flows in/out of IPv6 network
    -l display and count link-local IPv6 traffic (default: off)
    -P show ports as well as hosts
    -m limit sets the upper limit for the bandwidth scale
    -c config file specifies an alternative configuration file
    -t use text interface without ncurses
    
    Sorting orders:
    -o 2s Sort by first column (2s traffic average)
    -o 10s Sort by second column (10s traffic average) [default]
    -o 40s Sort by third column (40s traffic average)
    -o source Sort by source address
    -o destination Sort by destination address
    
    The following options are only available in combination with -t
    -s num print one single text output afer num seconds, then quit
    -L num number of lines to print
    
    iftop, version 1.0pre4
    copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors

    iftop의 상세한 옵션 설명

    iftop은 다양한 옵션이 제공된다.

    iftop -i {interface}

    -i 옵션으로 모니터링 할 네트워크 인터페이스 이름을 명시할 수 있다.

    sudo iftop -i etho0

    iftop -f {filter}

    -f 옵션에pcap-filter형식의 필터링 문자열을 명시하여 모니터링하고 싶은 항목을 제한할 수 있다. (dst: Destination, src: Source) pcap-filter 형식은 대략적으로 다음과 같다.

    • dst host XXXX
    • src host XXXX
    • dst net XXXX
    • src net XXXX
    • dst port XXXX
    • src port XXXX
    • dst portrange start-end
    • src portrange start-end
    • gateway xxxx
    • ip proto protocol

    자세한 내용은 PCAP-FILTER 매뉴얼 페이지를 참고하자. (링크 :Manpage of PCAP-FILTER)

    iftop -f 옵션은 다음과 같이 사용할 수 있다.

    sudo iftop -i eth0 -f "dst host google.com"
    sudo iftop -i eth1 -f "dst port 22"

    이 필터 조건을 이용해서 원하는 호스트 혹은 원하는 포트를 사용하는 트래픽 통계만 뽑아 볼 수 있다.

    인터랙티브 모드단축키

    iftop 명령을 실행시킨 상태에서단축키들을 이용해 모니터링 표시 항목을 변경할 수 있다. 인터랙티브 모드에서의 단축키는 '?' 키를 입력하면 볼 수 있다.

    Host display:
     n - toggle DNS host resolution
     s - toggle show source host
     d - toggle show destination host
     t - cycle line display mode
    
    Port display:
     N - toggle service resolution
     S - toggle show source port
     D - toggle show destination port
     p - toggle port display
    
    Sorting:
     1/2/3 - sort by 1st/2nd/3rd column
     < - sort by source name
     > - sort by dest name
     o - freeze current order
    
     General:
      P - pause display
      h - toggle this help display
      b - toggle bar graph display
      B - cycle bar graph average
      T - toggle cumulative line totals
      j/k - scroll display
      f - edit filter code
      l - set screen filter
      L - lin/log scales
      ! - shell command
      q - quit

    설정파일

    iftop 명령을 실행시킬 때 너무 많은 옵션을 주면 불편할 때가 있다. 이 경우 따로 옵션으로 명시할 설정들을 파일로 만들어서 파일 경로만 입력하면 옵션을 한번에 다룰 수 있다.

    기본적으로 /.iftoprc 파일에 설정 사항을 저장하면, iftop 명령 실행시 기본적으로 ~/.iftoprc 파일의 내용을 기준으로 동작한다. (/.bashrc 혹은 ~/.vimrc 파일의 동작원리를 생각해보자.)

    혹은 iftop -c 옵션의 인자로 설정 파일을 넘겨줘도 된다.

    sudo iftop -c <config file>

    설정 파일에 명시 할 수 있는 옵션들은 다양한데 자세한 내용은 'iftop manpage'를 확인해보면 된다. (링크 :iftop manpage)

    댓글