Profile picture

[Linux] 리눅스(Linux) 서버 운영에 필요한 CLI 모니터링 도구 알아보기

JaehyoJJAng2024년 01월 27일

개요

리눅스 서버를 안정적으로 운영하기 위해서는 다양한 모니터링이 필수적이다!


여러 대의 서버를 운영 중이라면

해당 서버들을 모니터링할 수 있는 솔루션을 도입하는게 좋고
(ELK Stack, Zabbix 등 ..)


단일 서버를 운영 중이라면 모니터링 솔루션 보다는,

모니터링용 CLI 도구들을 적극 활용해보는 것을 추천한다.


CPU 온도 모니터링 도구 (lm-sensors)


lm-sensors는 CPU를 포함한 모든 센서 칩의 현재 판독값을 표시하는 명령어이다. 기본적으로 Ubuntu와 같은 일부 배포판에 사전 설치되어 제공된다. 설치 방법은 아래와 같다.

sudo apt-get install -y lm-sensors

아래 명령을 실행하여 시스템의 모든 센서를 감지할 수 있다.

sudo sensors-detect

image


감지되면 다음 명령을 실행하여 CPU 온도, GPU 온도, 팬 속도, 전압 등을 확인할 수 있다.

sensors

image


각 항목이 의미하는 바는 다음과 같다.

  • amdgpu (AMD GPU)
    • edge: 25.0°C
  • nvme (NVMe SSD)
    • Composite: 26.9°C (최대 허용 온도 = 76.8°C, 임계치 = 79.8°C)
  • CPU (k10temp, AMD CPU)
    • Tctl: 27.8°C

온도를 봤을 때 정상 온도 범위 내에 있는 것을 확인할 수 있었다.

비정상적인 온도는 70°C ~ 80°C 라고 하니 온도가 높다면 서버에서 동작 중인 애플리케이션이나 시스템의 하드웨어를 점검해보자.


또한, watch 명령을 이용하여 주기적인 확인도 가능하다.

watch sensors

네트워크 트래픽 모니터링 도구 (nethog, iftop)

개요

이번 게시글에서는 서버 네트워크 상태를 모니터링 할 수 있는 도구인 nethogiftop 사용법에 대해 기록해보려고 한다.


nethog는 서버에서 구동 중인 데몬이나 프로세스 레벨에서 트래픽을 모니터링 할 수 있는 도구이며,

iftop은 NIC(Network Interface Card) 레벨에서 트래픽을 모니터링 할 수 있는 도구다.


이 두 유틸리티를 적절하게 활용하면 서버에서 발생하는 네트워크 장애 상황을 모니터링 할 수 있고,

과도하게 네트워크 리소스를 먹고있는 프로세스를 잡아낼 수 있을 것이다.


nethogs

nethogs 유틸리티는 리눅스 배포판에 거의 포함되지 않는다고 보면 된다.

그래서 수동으로 설치해야 한다.

yum 이나 apt-get 같은 패키지 관리 도구를 이용하여 설치하면 된다


nethogs 설치

# CentOs
$ sudo yum install nethogs

# Ubuntu
$ sudo apt-get install -y nethogs

nethogs 사용법

nethogs를 사용하기 위해서는 현재 접속 중인 계정에 sudo 사용 권한이 있어야 한다.

$ sudo nethogs {인터페이스 이름}

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

$ sudo nethogs eth0

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


iftop

nethogs와 마찬가지로 iftop 역시 리눅스 배포판에 거의 포함되지 않는다.

수동으로 설치하자


iftop 설치

# CentOS
$ sudo yum install -y iftop

# Ubuntu
$ sudo apt-get install -y iftop

iftop 사용법

$ sudo iftop

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


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

각 라인에서 첫 번째 항목은 현재 접속중인 호스트의 이름 혹은 IP 주소를 의미한다. 위 사진에서 'docker-virtual-machine' 라는 정보로 표시되고 있는 것이 현재 접속 중인 머신의 호스트 정보이다.

그 다음 화살표 옆에 나타나는 정보가 현재 호스트가 통신하고 있는 대상 호스트 정보이다. 현재 접속해있는 호스트가 서버라면 서버와 통신하고 있는 다른 서버 혹은 클라이언트의 정보가 이 곳에 표시된다.

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


화면 하단에는 또 다른 정보 통계들이 표시된다. 각각의 의미는 다음과 같다

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

각 항목들은 다음과 같은 서브 항목들로 세분화 되고 있다

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

iftop 옵션

  • iftop -i {interface} : -i 옵션으로 모니터링 할 네트워크 인터페이스 이름 명시
$ sudo iftop -i eth0

  • iftop -f {filter} : pcap-filter 형식의 필터링 문자열을 명시하여 모니터링하고 싶은 항목 제한 가능
    • dst host XXXX
    • src host XXXX
    • dst net XXXX
    • src net XXXX
    • dst port XXXX
    • src port XXXX
    • ip proto protocol
    • gateway XXXX
$ sudo iftop -i eth0 -f "dst host google.com"
$ sudo iftop -i eth0 -f "dst port 22"

포트 필터링

만약 실시간으로 들어오는 트래픽에서 포트번호를 표시하고 싶다면

실행 중에 p를 눌러 포트 번호 표시를 활성화하면 된다.


1. iftop 실행

sudo iftop -i <인터페이스 이름>

2. 실행 중 p를 눌러 포트 번호 표시 활성화
image


watch 명령어로 특정 커맨드 주기적 실행하기

watch는 원하는 명령어의 결과를 원하는 시간(초) 주기로 refresh 하여 결과를 보여주는 명령어이다.


시스템의 자원 사용량을 모니터링 하거나,

특정 명령어를 반복적으로 입력하여 결과를 확인해야할 때 매우 유용하게 사용할 수 있다.


사용법

watch [-d] [-n seconds] 'command'
  • -d: 이전 출력결과와 변경된 부분을 표시해주는 기능
  • -n: 입력한 명령어의 결과를 원하는 초단위 간격으로 출력해주는 기능 (default: 2초)

예제

1. 시스템의 uptime 값을 화면에 출력

$ watch uptime

command에 띄어쓰기가 들어갈 경우 ''으로 묶어줌. uptime 값을 5초 간격으로 화면에 계속 출력

$ watch -d -n 5 'cat /proc/uptime'

2. 10초 간격으로 iostat 모니터링

$ watch -n 10 iostat

3. 5초 간격으로 vmstat 모니터링

$ watch -n 5 vmstat

4. 1초 간격으로 apache 프로세스 모니터링

$ watch -d -n 1 'ps -ef | grep httpd | grep -v grep'

5. 여러가지 명령 조합

  • w 명령어를 통한 현재 접속자, loadaverage, uptime 확인
  • df 명령어를 통한 디스크 사용량 감시
  • free 명령어를 통한 memory 사용량 감시
$ watch -d 'w; echo; df -h; echo; free -m'

6. k8s pod describe 모니터링

$ watch "kubectl describe pod pod-readiness-exec1 | grep -A20 Events"

로그 볼 때 유용한 도구

tail

  • tail 커맨드는 파일을 실시간으로 표시하는 가장 일반적인 솔루션이다.

1. -f 인수 사용

$ tail -f /var/log/messages

2. tailf 커맨드에 -f 인수가 함께 내장되어 있으므로 -f 옵션을 사용할 필요가 없음

$ tailf /var/log/messages

3. 로그 파일의 마지막 두 줄만 실시간으로 보기

$ tail -n2 -f /var/log/messages

Multitail

  • 실시간으로 여러 로그 파일 모니터링

1. multitail 유틸리티 설치

$ yum -y install epel-release
$ apt-get install -y multitail

$ multitail /var/log/messages /var/log/apache2/error.log

  • multitail 명령과 유사함

1. lnav 유틸리티 설치

$ yum -y install epel-release
$ yum install -y lnav

$ lnab /var/log/messages /var/log/apache2/error.log

less

$ less +F /var/log/messages

Loading script...