개요
리눅스 서버를 안정적으로 운영하기 위해서는 다양한 모니터링이 필수적이다!
여러 대의 서버를 운영 중이라면
해당 서버들을 모니터링할 수 있는 솔루션을 도입하는게 좋고
(ELK Stack, Zabbix 등 ..)
단일 서버를 운영 중이라면 모니터링 솔루션 보다는,
모니터링용 CLI 도구들을 적극 활용해보는 것을 추천한다.
CPU 온도 모니터링 도구 (lm-sensors)
lm-sensors는 CPU를 포함한 모든 센서 칩의 현재 판독값을 표시하는 명령어이다. 기본적으로 Ubuntu와 같은 일부 배포판에 사전 설치되어 제공된다. 설치 방법은 아래와 같다.
sudo apt-get install -y lm-sensors아래 명령을 실행하여 시스템의 모든 센서를 감지할 수 있다.
sudo sensors-detect감지되면 다음 명령을 실행하여 CPU 온도, GPU 온도, 팬 속도, 전압 등을 확인할 수 있다.
sensors각 항목이 의미하는 바는 다음과 같다.
- 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)
개요
이번 게시글에서는 서버 네트워크 상태를 모니터링 할 수 있는 도구인 nethog와 iftop 사용법에 대해 기록해보려고 한다.
nethog는 서버에서 구동 중인 데몬이나 프로세스 레벨에서 트래픽을 모니터링 할 수 있는 도구이며,
iftop은 NIC(Network Interface Card) 레벨에서 트래픽을 모니터링 할 수 있는 도구다.
이 두 유틸리티를 적절하게 활용하면 서버에서 발생하는 네트워크 장애 상황을 모니터링 할 수 있고,
과도하게 네트워크 리소스를 먹고있는 프로세스를 잡아낼 수 있을 것이다.
nethogs
nethogs 유틸리티는 리눅스 배포판에 거의 포함되지 않는다고 보면 된다.
그래서 수동으로 설치해야 한다.
yum 이나 apt-get 같은 패키지 관리 도구를 이용하여 설치하면 된다
nethogs 설치
# CentOs
$ sudo yum install nethogs
# Ubuntu
$ sudo apt-get install -y nethogsnethogs 사용법
nethogs를 사용하기 위해서는 현재 접속 중인 계정에 sudo 사용 권한이 있어야 한다.
$ sudo nethogs {인터페이스 이름}sudo를 이용하여 nethogs 명령을 실행하면 된다. 인자로 아무것도 입력하지 않으면 해당 호스트의 첫 번쨰 네트워크 인터페이스에 대한 모니터링을 시작한다. 만약 특정 인터페이스를 모니터링 하고 싶다면 (ex. eth0) 다음처럼 인자로 넘겨주면 된다
$ sudo nethogs eth0
nethogs는 선택한 인터페이스를 이용하고 있는 프로세스들의 네트워크 트래픽 정보를 확인할 수 있다. 클러스터에서 네트워크 트래픽을 과도하게 점유하고 있는 데몬을 찾아내는데 유용하게 사용 가능하다
iftop
nethogs와 마찬가지로 iftop 역시 리눅스 배포판에 거의 포함되지 않는다.
수동으로 설치하자
iftop 설치
# CentOS
$ sudo yum install -y iftop
# Ubuntu
$ sudo apt-get install -y iftopiftop 사용법
$ sudo iftop별도의 인자를 명시하지 않으면 첫 번쨰 네트워크 인터페이스를 기준으로 모니터링이 수행된다.
현재 접속중인 호스트를 기준으로 다른 호스트들과의 통신에 대한 통계 정보 확인 가능
각 라인에서 첫 번째 항목은 현재 접속중인 호스트의 이름 혹은 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 eth0iftop -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를 눌러 포트 번호 표시 활성화
watch 명령어로 특정 커맨드 주기적 실행하기
watch는 원하는 명령어의 결과를 원하는 시간(초) 주기로 refresh 하여 결과를 보여주는 명령어이다.
시스템의 자원 사용량을 모니터링 하거나,
특정 명령어를 반복적으로 입력하여 결과를 확인해야할 때 매우 유용하게 사용할 수 있다.
사용법
watch [-d] [-n seconds] 'command'-d: 이전 출력결과와 변경된 부분을 표시해주는 기능-n: 입력한 명령어의 결과를 원하는 초단위 간격으로 출력해주는 기능 (default: 2초)
예제
1. 시스템의 uptime 값을 화면에 출력
$ watch uptimecommand에 띄어쓰기가 들어갈 경우 ''으로 묶어줌. uptime 값을 5초 간격으로 화면에 계속 출력
$ watch -d -n 5 'cat /proc/uptime'2. 10초 간격으로 iostat 모니터링
$ watch -n 10 iostat3. 5초 간격으로 vmstat 모니터링
$ watch -n 5 vmstat4. 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/messages2. tailf 커맨드에 -f 인수가 함께 내장되어 있으므로 -f 옵션을 사용할 필요가 없음
$ tailf /var/log/messages3. 로그 파일의 마지막 두 줄만 실시간으로 보기
$ tail -n2 -f /var/log/messagesMultitail
- 실시간으로 여러 로그 파일 모니터링
1. multitail 유틸리티 설치
$ yum -y install epel-release
$ apt-get install -y multitail$ multitail /var/log/messages /var/log/apache2/error.loglnav
- multitail 명령과 유사함
1. lnav 유틸리티 설치
$ yum -y install epel-release
$ yum install -y lnav$ lnab /var/log/messages /var/log/apache2/error.logless
$ less +F /var/log/messages