Linux Network Monitoring 하기

서비스를 운영하다보면 다양한 문제로 네트워크 트래픽이 이상증상을 보일 수 있습니다

제가 겪었던 몇몇의 사항들은

1) 설치된 프로그램의 취약점으로 외부의 공격으로 인한 과도한 Outbound발생

2) 악의적인 해커가 DDos류의 공격으로 80 or 443 포트의 과도한 Outbound

3) 실제로 서비스가 대박나서 정말 Outbound가 무지막지하게 발생하는 상황

하지만 불행하게도 대부분의 경우 1), 2) 케이스였고, 이경우 상황을 빨리 파악하고, 진단해야 네트워크 트래픽 비용 폭탄을 막을 수 있습니다.

몇가지의 유용한 명령어를 통해 어떤 포트(프로세스가)가 네트워크를 많이 사용하는지, 또 전체적인 네트워크 사용량은 어떻게되는지 살펴보겠습니다.

1. nload

nload

nload는 Network Interface별 Inbound / Outbound를 요약해서 보여주고, 약간의 그래프를 통해서 시각화 해줍니다.

현재 서버의 전체적인 Inbound / Outbound의 양을 쉽게 확인 할 수 있습니다.

2. iptraf

iptraf는 연결된 호스트간의 데이터 사용량을 보여줍니다.

로컬 서버의 소켓과 원격지 서버의 소켓정보를 비교해서, 로컬의 어떤 포트가 어떤 원격지의 소켓과 데이터를 많이 주고 받는지를 쉽게 볼 수 있습니다.

iptraf

3. nethogs

nethogs 는 top 명령어와 동일하게 네트워크 트래픽 사용량이 많은 순으로 정렬해서 소켓 정보를 보여줍니다.

nethogs

4. lsof (List of Open Files)

lsof는 실제 열려진 파일을 보는 명령어입니다.

리눅스에서는 소켓 또한 파일 핸들이기 때문에 lsof 명령어를 통해서 특정 포트에 연결된 프로세스를 찾을 수 있습니다.

예를들어 80 포트에 연결된 프로세스를 찾고 싶다면

# lsof -i:80
Screen Shot 2015-08-12 at 3.28.11 PM

해당 프로세스와 PID를 찾을 수 있습니다.