본문

테크
리눅스 명령어를 이용한 시스템 모니터링하기

작성일 2018년 11월 07일

Linux_monitoring

시스템 성능 측정을 위한 항목에는 CPU, Memory, Disk, Traffic 등이 있습니다. 리눅스 환경에서 이런 리소스들을 확인할 수 있는 다양한 명령어들을 지원하고 있는데요.

각각의 명령어들을 통해 시스템을 모니터링 하는 방법에 대해 알아봅시다.

uname: 시스템과 커널의 정보

Uname 명령어를 사용하면 시스템과 커널의 정보를 확인할 수 있습니다. -a 옵션을 사용하면 모든 정보를 확인할 수 있습니다.

Linux_monitoring_uname

각각의 의미는 다음과 같습니다.

  • [Linux] : 커널 명
  • [Localhost] : 호스트 명
  • [3.13.0-24-generic] : 커널 릴리즈 정보
  • [#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014] : 커널 버전
  • [x86_64] : 머신 하드웨어 이름
  • [x86_64] : 프로세서 종류
  • [x86_64] : 하드웨어 플랫폼
  • [GNU/Linux] : 운영체제

사용할 수 있는 옵션은 아래와 같습니다.

$ uname --help [-a, --all] : 전체 내용 출력 [-s, --kernel-name] : 커널 명 출력 [-n, --nodename] : 네트워크 노드의 호스트 명 출력 [-r, --kernel-release] : 커널 릴리즈 정보 출력 [-v, -kernel-version] : 커널 버전 출력 [-m, --machine] : 머신 하드웨어 이름 출력 [-p, --processor] : 프로세서 종류 또는 'unknown' 출력 [-i,- -hardware-platform ] : 하드웨어 플랫폼 또는 'unknown' 출력 [-o, --operating-system ] : 운영체제 'unknown' 출력

ifconfig: 네트워크 기본 모니터링

시스템에 설정된 네트워크 인터페이스의 상태를 확인 및 변경할 수 있습니다.

Linux_monitoring_ifconfig

그럼 이제 ifconfig 명령어를 사용했을 때 나오는 의미를 살펴보겠습니다.

  • [eth0, eth1] : 흔히 랜 카드라고 불리는 유선 네트워크 인터페이스입니다. 위 예제는 랜 카드가 2개있는 경우입니다.
  • [lo] : 루프 백 인터페이스로 자기자신과 통신하는데 사용하는 가상 장치입니다. IP가 127.0.0.1 입니다. IP주소는 서버에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당되기 때문에 각 네트워크 인터페이스마다 다른 IP주소를 가지고 있습니다.
  • [HWaddr] : 네트워크 인터페이스의 하드웨어 주소(MAC Address)
  • [inetaddr] : 네트워크 인터페이스에 할당된 IP 주소
  • [Bcast] : 브로드캐스트 주소
  • [Mask] : 넷마스크
  • [MTU] : 네트워크 최대 전송 단위(Maxium Transfer Unit)
  • [RX packets] : 받은 패킷 정보
  • [TX packets] : 보낸 패킷 정보
  • [collision] : 충돌된 패킷 수
  • [Interrupt] : 네트워크 인터페이스가 사용하는 인터럽트 번호

Ifconfig 명령어로는 private ip밖에 확인되지 않습니다. 공인 아이피(Public IP)를 알고 싶다면 Curl을 설치 후에 확인하면 됩니다.

$ curl ifconfig.me

top: 운영체제 작업 내역 모니터링

윈도우의 작업관리자와 비슷한 기능을 하는 명령어입니다.

프로세스 작업 명령어로, 시스템 프로세스들의 CPU/Memory 점유율을 실시간으로 볼 수 있습니다. 현재 몇 개의 프로세스가 있는지, CPU의 자세한 사용률은 어떻게 되는지, Memory와 Swap은 얼마나 사용하고 있는지를 확인할 수 있습니다.

Linux_monitoring_top % Cpu(s) [us] : 사용자가 사용중인 사용률 [sy] : 시스템이 사용중인 사용률 [ni] : 프로세스 우선순위를 기반으로 사용되는 사용률(사용자 공간에서 사용됨) [id] : 아무 일도 하지 않는 여유률 [wa] : 입출력을 기다리는 프로세스 사용률 [hi] : 하드웨어 인터럽트 사용률 [si] : 소프트웨어 인터럽트 사용률 [st] : 가상화 환경에서 손실률

User값이 높다면, 사용자 코드를 수행하는데 시간이 오래 걸린다면 내부적으로 계산을 많이 하고 있다는 것입니다. System값이 높다면, 시스템에 의해 사용되고 있는 시간이 오래 걸린다면 프로세스들이 시스템 호출 또는 I/O가 많다고 할 수 있습니다. idle의 값이 항상 0이라면 CPU를 100% 사용하고 있다는 것을 의미합니다. CPU를 계속 사용하고 있는 프로세스를 찾아 적절하게 대응할 필요가 있습니다.

PROCESS [PID] : 프로세스 ID [USER] : 프로세스를 실행시킨 사용자 ID [PR] : 프로세스의 우선순위 [NI] : NICE 값, 마이너스를 가지는 값이 우선순위가 높음 [VIRT] : 가상 메모리의 사용량(SWAP+RES) [RES] : 현재 페이지가 상주하고 있는 크기 [SHR] : 가상 메모리 중 사용중인 메모리를 제외한 잔여 가상 메모리 [S] : 프로세스의 상태 [%CPU] : 프로세스가 사용하는 CPU의 사용률 [%MEM] : 프로세스가 사용하는 메모리의 사용률 [TIME+] : 프로세스가 CPU를 사용한 시간 [COMMAND] : 실행된 명령어

프로세스 목록을 원하는 특정 기준에 따라 정렬할 수 있습니다. top 실행화면에서 Shift 키와 영문자를 누르면 프로세스의 정렬 기준이 변경됩니다.

PROCESS [SHIFT + M] : 메모리 사용률 정렬 [SHIFT + N] : PID 기준 정렬 [SHIFT + P] : CPU 사용률 정렬 [SHIFT + T] : 실행시간 기준 정렬 [SHIFT + R] : 정렬 기준변경 (오름차순인 경우 내림차순으로, 내림차순인 경우 오름차순으로 변경)

free: 메모리 모니터링

메모리에 대한 정보를 확인할 수 있습니다. 저는 Memory와 Swap에 대한 값의 총 합을 확인하기 위하여 -t 옵션을 주었습니다.

Linux_monitoring_free
  • [MEM] : 실제 메모리
  • [Swap] : 일종의 가상 메모리
  • [Buffers] : 일부 프로세스에 의해 발생한 임시 메모리
  • [Cached] : 기존에 실행된 프로그램들이 사용했던 메모리로 실행 중이거나 새로 시작될 프로그램들이 필요할 때 빠르게 재 사용할 수 있는 메모리 영역

Buffers와 Cached 둘 다 Free영역의 일부이므로 실제로는 2번째 줄에 보이는 364812가 실 여유 메모리를 말하며 즉, 사용자가 사용 가능한 메모리입니다.

실제 사용률은 1번째 줄에 보이는 used – (buffers + cached)인 2번째 줄에 보이는 used값 인 것이지요.

참고 [$ free -b # or –bytes] : show output in bytes [$ free -k # or –kilo] : show output in kilobytes [$ free -m # or –mega] : show output in megabytes [$ free -g # or –giga] : show output in gigabytes

vmstat: 시스템 정보 모니터링

시스템 작업, 하드웨어 및 시스템 정보를 확인할 수 있습니다. 메모리, 페이징, 블록장치의 I/O, CPU상태 등을 볼 수 있습니다.

Linux_monitoring_vmstat procs [r] : CPU에서 대기중인 프로세스의 수를 의미한다. r의 개수가 CPU의 개수의 2배를 넘는다면 CPU의 성능을 올려주어야 합니다. [b] : 인터럽트가 불가능한 sleep 상태에 있는 프로세스의 수 (I/O 처리를 하는 동안 블록 처리된 프로세스)이다. b의 수치가 높은 경우라면 CPU가 계속 대기상태로 있다는 의미이므로 디스크 I/O를 확인해 볼 필요가 있습니다. Swap(KB/s) [si(swap in)] : 디스크 swap 공간에 있는 데이터를 메모리로 호출하는 양을 의미합니다. 사용되고 있는 swap 디스크가 해제되는 양(per sec)입니다. [so(swap out)] : 메모리에서 디스크로 보내는 데이터의 양을 의미합니다. 물리적 메모리가 부족할 경우 디스크로부터 사용되는 메모리 양(per sec)입니다. swap out이 지속적으로 발생한다면 메모리 부족을 의심해 볼 수 있습니다. swap out값이 증가하면 메모리가 부족하다는 의미이므로 메모리를 늘려야 합니다. Swap out값은 0에 가까워야 좋고 초당 10블럭 이하가 좋습니다. swap필드의 값이 높다고 해도 free 메모리에 여유가 있다면 메모리가 부족한 것은 아닙니다.

-s 옵션을 주면 메모리 통계 항목들을 확인할 수 있습니다.

Linux_monitoring_vmstat-s

vmstat [delay [count]]를 사용하면 실시간으로 메모리 상태를 확인할 수 있습니다.

  • [$ verstat 3 5] : 3초 간격으로 모니터링 정보를 5번 출력

iostat: CPU, 디스크 입출력 상태 모니터링

평균 CPU부하 와 디스크 I/O의 세부적인 내용을 확인 할 수 있습니다.

Linux_monitoring_iostat Device [tps] : 디바이스에 초당 전송 요청 건수 [kB_read/s] : 디바이스에서 초당 읽은 데이터 블록 단위 [kB_wrtn/s] : 디바이스에서 초당 쓴 데이터 블록 단위 [kB_read] : 디바이스에서 지정한 간격 동안 읽은 블록 수 [kB_wrtn] : 디바이스에서 지정한 간격 동안 쓴 전체 블록 수

-x 옵션을 사용하면 더 자세한 내역을 볼 수 있습니다.

Linux_monitoring_iostat-x

iostat [delay [count]]를 사용하면 실시간으로 디스크의 상태를 확인할 수 있습니다.

  • [$ iostat 3 5] : 3초 간격으로 모니터링 정보를 5번 출력하게 됩니다.

netstat: 네트워크 상태 모니터링

현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태 등을 볼 수 있습니다.

Linux_monitoring_netstat

2개의 영역으로 나누어져 보여집니다.

  • [Active Internet connections] : TCP, UDP, raw로 연결된 목록만 보여집니다.
  • [Active UNIX domain sockets] : 도메인 소켓으로 연결된 목록만 보여집니다.

옵션은 아래와 같습니다.

  • [-n] : 호스트명, 포트명을 lookup하지 않고(도메인으로 보이지 않고) IP, Port번호를 보여줍니다.
  • [-a] : 모든 네트워크상태를 보여줍니다.
  • [-t] : TCP 프로토콜만 보여줍니다.
  • [-u] : UDP 프로토콜만 보여줍니다.
  • [-p] : 해당 포트를 사용하는 프로그램과 프로세스ID(PID)를 보여줍니다.
  • [-r] : 라우팅 테이블 출력
  • [-s] : 프로토콜 별(IP, ICMP, TCP, UDP 등)로 통계를 보여줍니다.
  • [-c] : 연속적으로 상태를 보여줍니다.
  • [-l] : 대기중인 소켓 목록을 보여줍니다.

State는 아래와 같이 표현됩니다.

  • [공백] : 연결되어 있지 않음
  • [FREE] : socket은 존재하지만 할당되어 있지 않다.
  • [LISTENING] : 연결요청에 대한 응답준비가 되어 있는 상태
  • [CONNECTING] : 연결이 막 이루어진 상태
  • [DISCONNECTING] : 연결해제 되고 있는 상태
  • [UNKNOWN] : 알 수 없는 연결, 알려지지 않은 연결 상태
  • [LISTEN] : 연결 가능하도록 daemon이 떠있으며 연결이 가능한 상태
  • [SYS-SENT] : 연결을 요청한 상태
  • [SYN_RECEIVED] : 연결요구에 응답 후 확인 메시지 대기중인 상태
  • [ESTABLISHED] : 연결이 완료된 상태
  • [FIN-WAIT1] : 소켓이 닫히고 연결이 종료되고 있는 상태
  • [FIN-WAIT2] : 로컬이 원격으로부터 연결 종료 요구를 기다리는 상태
  • [CLOSE-WAIT] : 종료 대기 중
  • [CLOSING] : 전송된 메세지가 유실되었음
  • [TIME-WAIT] : 연결종료 후 한동안 유지되어 있음
  • [CLOSED] : 연결이 완전히 종료

옵션에 따라 다른 정보를 확인 할 수 있습니다. 유용하게 쓰이는 옵션들은 알아 두어야 합니다.

  • [$ netstat -r] : 서버의 라우팅 테이블 출력
  • [$ netstat -na --ip] : tcp/udp의 세션 목록 표시
  • [$ netstat -na | grep ESTABLISHED | wc -l] : 활성화된 세션 수 확인
  • [$ netstat -nap | grep :80 | grep ESTABLISHED | wc -l] : 80포트 동시 접속자수
  • [$ netstat -nltp] : LISTEN 중인 포트 정보 표시

df: 디스크 모니터링

현재 디스크의 전체 용량 및 남은 용량을 확인할 수 있습니다.

Linux_monitoring_df

옵션은 아래와 같습니다.

  • [-h] : 용량을 읽기 쉽게 단위를 계산하여 출력
  • [-T] : 파일 시스템 종류와 함께 디스크 정보 출력

마치며

지금까지 시스템 모니터링을 알아볼 수 있는 명령어들을 살펴보았습니다. 이런 정보들을 통해 인프라에 대한 모니터링을 진행할 수 있습니다. 리눅스 장비에서 기본적으로 제공하는 명령어들이기 때문에 언제든지 사용할 수 있습니다.

그렇다면 와탭 서버 모니터링과 같은 모니터링 서비스는 언제 사용하는 것일까요. 와탭 서버 모니터링 서비스는 단말에 접근하지 않더라도 웹과 앱을 통해 원격에서 살펴볼 수 있으며 지난 과거의 데이터를 살펴볼 수 있습니다. 그리고 주기적으로 상태를 모니터링하다가 문제가 발생했을 때 메일, 앱, 문자 등을 통해 빠른 조치가 가능하도록 도와주는 역할을 합니다.

리눅스의 모니터링 명령어들을 익혀서 자신만의 모니터링 기법들을 만들어 보세요. 그리고 와탭 서버 모니터링과 같은 모니터링 서비스를 사용하여 다양한 인사이트를 얻길 바랍니다.

개발자와 운영자가 위치와 업무에 상관없이
볼 수 있는 멀티테넌트 기능을 가진 데브옵스 툴
와탭 무료로 시작하기
Becky[email protected]
Marketing TeamManager

지금 바로
와탭을 경험해 보세요.