서버를 운영하다 보면 "지금 CPU 점유율이 얼마지?", "어제 밤에 트래픽이 얼마나 몰렸을까?"와 같은 질문에 답해야 할 때가 많습니다. 매번 터미널에 접속해 htop을 입력하는 것은 번거로울 뿐만 아니라 과거의 데이터를 추적하기도 어렵습니다.

오늘은 오픈소스 모니터링의 표준이라 불리는 Prometheus(프로메테우스)와 시각화 도구인 Grafana(그라파나)를 연동하여, 누구나 한눈에 이해할 수 있는 멋진 서버 대시보드를 만드는 방법을 알아보겠습니다.


1. 모니터링 시스템의 두 주인공

1.1 Prometheus (데이터 수집기)

서버의 메트릭(Metric, 수치 데이터)을 수집하고 저장하는 역할을 합니다. "서버의 현재 CPU는 20%다"라는 정보를 일정 시간마다 가져와서 자신의 데이터베이스에 쌓아둡니다.

1.2 Grafana (데이터 시각화)

Prometheus가 수집한 딱딱한 숫자 데이터를 가져와 예쁜 그래프, 게이지, 차트로 그려주는 도구입니다. 커스터마이징이 매우 자유로워 나만의 관제 센터를 만들 수 있습니다.


2. 데이터의 원천: Node Exporter 설치

Prometheus가 서버의 하드웨어 정보를 읽어가려면, 서버 안에 정보를 내보내 주는 Node Exporter라는 작은 프로그램이 떠 있어야 합니다.

  1. Node Exporter 설치:
  2. Bash
     
    sudo apt update
    sudo apt install prometheus-node-exporter -y
    
  3. 이제 9100번 포트를 통해 서버의 실시간 상태가 텍스트 형태로 출력되기 시작합니다.

3. Prometheus 및 Grafana 구축 (Docker 활용)

설치 과정을 단순화하기 위해 Docker Compose를 사용하는 것이 가장 효율적입니다.

3.1 docker-compose.yml 설정 예시

YAML
 
version: '3.8'
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus

4. Grafana에서 대시보드 구성하기

설치가 완료되었다면 http://서버IP:3000으로 접속합니다. (기본 계정: admin / admin)

4.1 데이터 소스 연결

  • Configuration > Data Sources에서 Prometheus를 선택합니다.
  • URL에 http://prometheus:9090을 입력하고 저장합니다.

4.2 대시보드 템플릿 가져오기 (꿀팁)

처음부터 그래프를 하나씩 그리는 것은 매우 어렵습니다. Grafana 커뮤니티에는 이미 잘 만들어진 템플릿이 많습니다.

  1. Create > Import로 이동합니다.
  2. 유명한 Linux 모니터링 템플릿 번호인 1860을 입력하고 로드합니다.
  3. 순식간에 CPU 사용량, 메모리, 디스크 I/O, 네트워크 트래픽이 포함된 전문가용 대시보드가 완성됩니다!

5. 모니터링 시스템 도입의 효과

  • 장애 선제 대응: 트래픽 증가 추이를 보고 서버 증설 시점을 미리 파악할 수 있습니다.
  • 원인 분석: 장애가 발생했던 시점의 그래프를 되돌려 보며 무엇이 문제였는지 명확히 짚어낼 수 있습니다.
  • 보고 및 공유: 복잡한 로그 대신 시각화된 그래프를 통해 팀원이나 클라이언트에게 시스템 상태를 직관적으로 설명할 수 있습니다.

6. 결론: 데이터 기반의 서버 운영

"측정할 수 없으면 관리할 수 없다"는 경영학의 격언은 서버 운영에도 그대로 적용됩니다. Prometheus와 Grafana는 여러분의 서버를 투명하게 들여다볼 수 있는 강력한 돋보기가 되어줄 것입니다.

서버를 운영하다 보면 갑자기 웹사이트 응답이 느려지거나, 특정 프로세스가 CPU를 100% 점유하여 시스템이 멈추는 상황을 겪게 됩니다. 이때 가장 먼저 해야 할 일은 "지금 내 서버에서 무슨 일이 벌어지고 있는가?"를 파악하는 것입니다.

오늘은 리눅스 서버 모니터링의 핵심 도구인 top과 그 상위 호환 버전인 htop을 활용하여 시스템 부하의 원인을 진단하는 방법을 상세히 알아보겠습니다.


1. 리눅스 기본 모니터링: top 명령어

top은 모든 리눅스 배포판에 기본으로 내장된 실시간 프로세스 모니터링 도구입니다.

1.1 top 실행 및 화면 읽기

터미널에 top을 입력하면 상단에 시스템 전체 요약 정보가 나타납니다.

  • load average: 최근 1분, 5분, 15분 동안의 평균 작업 대기 수입니다. 코어 수보다 높다면 서버가 과부하 상태임을 의미합니다.
  • %CPU(s): us(사용자), sy(시스템), id(유휴) 등의 상태를 보여줍니다. id값이 낮을수록 서버가 바쁘게 돌아가고 있다는 뜻입니다.
  • KiB Mem: 전체 메모리 사용량과 여유 공간을 보여줍니다.

1.2 유용한 단축키

  • P: CPU 사용량이 높은 순으로 정렬
  • M: 메모리 사용량이 높은 순으로 정렬
  • k: 특정 프로세스 종료 (PID 입력 필요)
  • q: 프로그램 종료

2. 시각화된 강력한 도구: htop

top이 텍스트 위주라 가독성이 떨어진다면, **htop**은 컬러풀한 그래프와 직관적인 인터페이스를 제공하는 상위 호환 도구입니다.

2.1 htop 설치하기

대부분의 서버에는 기본 설치되어 있지 않으므로 별도로 설치해야 합니다.

Bash
 
sudo apt update
sudo apt install htop -y

2.2 htop의 장점

  • 직관적인 바(Bar) 그래프: 각 CPU 코어별 점유율과 메모리 사용량을 시각적으로 보여줍니다.
  • 마우스 지원: 터미널 환경에서도 마우스 클릭으로 프로세스를 선택하고 정렬할 수 있습니다.
  • 트리 보기 (F5): 프로세스 간의 부모-자식 관계를 한눈에 파악하여 어떤 서비스가 리소스를 잡아먹는지 쉽게 알 수 있습니다.

3. 서버 부하의 3대 원인 진단법

상태 창을 열었을 때, 무엇을 중점적으로 봐야 할까요?

3.1 CPU 사용량이 너무 높을 때 (High CPU)

특정 프로세스가 연산 처리를 과도하게 하고 있는 경우입니다. 보통 무한 루프에 빠진 스크립트나 복잡한 계산 작업이 원인입니다. htop에서 %CPU 열을 확인하여 해당 프로세스를 최적화하거나 종료해야 합니다.

3.2 메모리 스왑 발생 (High Memory & Swap)

물리 메모리(RAM)가 부족하여 디스크의 일부를 메모리처럼 사용하는 '스왑(Swap)' 현상이 발생하면 서버 속도가 급격히 저하됩니다. htop 상단의 Swp 게이지가 차오르고 있다면 메모리 증설이나 캐시 정리(예: Redis 데이터 정리)가 필요합니다.

3.3 I/O Wait (Wait 상태)

CPU 점유율은 낮은데 서버가 느리다면 디스크 읽기/쓰기 속도가 병목 현상을 일으키는 것입니다. top의 %wa 수치가 높다면 데이터베이스 쿼리 최적화나 디스크 성능 점검이 우선입니다.


4. 실무 꿀팁: 특정 사용자 프로세스만 보기

서버에 여러 사용자가 접속해 있다면, 내 계정이 실행한 프로세스만 필터링해서 보는 것이 효율적입니다.

Bash
 
# htop 실행 후 'u'를 누르거나 아래 명령어로 실행
htop -u [사용자이름]

# 예시
htop -u yumina

5. 결론: 상시 모니터링의 중요성

서버 장애는 예고 없이 찾아오지만, top과 htop을 활용하는 습관을 들이면 사고를 미연에 방지할 수 있습니다. 서버가 평소보다 조금이라도 무겁게 느껴진다면 바로 htop을 켜서 리소스 흐름을 체크해 보세요.

+ Recent posts