일본 서버에서 서비스를 운영할 때 모니터링은 장애를 사전에 예방하고, 문제 발생 시 빠르게 대응하기 위한 핵심 도구입니다. 이 글에서는 일본 서버 모니터링을 위한 CLI 도구부터 웹 기반 모니터링 솔루션, 외부 업타임 모니터링까지 단계별로 안내합니다.

모니터링이 필요한 이유

  • CPU 과부하 사전 감지: 서버 다운 전에 알림 수신
  • 메모리 부족 대응: OOM(Out of Memory) 킬러 발동 전 조치
  • 디스크 용량 관리: 디스크 풀로 인한 서비스 중단 방지
  • 서비스 다운 감지: 웹서버, DB 장애를 즉시 알림

1. 기본 CLI 모니터링 도구

htop — CPU·메모리 실시간 확인

apt install htop -y
htop
  • F2: 설정 (CPU 표시 방식 등)
  • F3: 프로세스 검색
  • F9: 프로세스 종료 신호 전송

iostat — 디스크 I/O 모니터링

apt install sysstat -y
iostat -x 1    # 1초마다 갱신
  • %util 항목이 90% 이상이면 디스크 I/O 병목

nethogs — 프로세스별 네트워크 사용량

apt install nethogs -y
nethogs eth0

특정 프로세스가 비정상적으로 많은 네트워크 대역폭을 사용하는지 확인할 수 있습니다.

ss — 네트워크 연결 상태

# ESTABLISHED 연결 수 확인
ss -s

# 특정 포트 연결 확인
ss -tnp | grep :80
ss -tnp | grep :3306

2. Netdata — 실시간 웹 기반 모니터링

Netdata는 설치가 간단하고 실시간으로 CPU, 메모리, 디스크, 네트워크, Nginx, MySQL 등 다양한 메트릭을 시각화합니다.

# 설치
wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh --non-interactive

설치 후 http://서버IP:19999에서 실시간 대시보드 확인이 가능합니다.

외부 접근 시 보안 설정

Netdata 포트는 외부에 노출되지 않도록 로컬 바인딩 후 Nginx로 프록시하거나, IP 제한을 설정하세요:

# UFW로 19999 포트 접근 제한
ufw allow from 내IP주소 to any port 19999

3. 알림 설정 — 문제 발생 시 즉시 통보

간단한 서버 상태 확인 스크립트

#!/bin/bash
# /usr/local/bin/check-server.sh

CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
MEM=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
DISK=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)

# 임계값 초과 시 알림 (텔레그램 봇 예시)
THRESHOLD_CPU=80
THRESHOLD_MEM=85
THRESHOLD_DISK=90

if [ "$CPU" -gt "$THRESHOLD_CPU" ]; then
    echo "경고: CPU 사용률 ${CPU}% 초과" | mail -s "서버 경고" admin@example.com
fi

웹 서비스 업타임 확인

#!/bin/bash
# 웹 서비스 응답 확인
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com)

if [ "$HTTP_CODE" != "200" ]; then
    echo "사이트 다운! HTTP 코드: $HTTP_CODE" | mail -s "장애 알림" admin@example.com
fi

crontab에 등록:

*/5 * * * * /usr/local/bin/check-server.sh
*/5 * * * * /usr/local/bin/check-uptime.sh

4. 외부 업타임 모니터링 서비스

서버 자체의 모니터링 스크립트는 서버가 다운되면 알림을 보낼 수 없습니다. 외부 모니터링 서비스를 병행하세요.

추천 무료 서비스:

  • UptimeRobot: 5분 간격으로 서비스 상태 확인, 이메일/텔레그램 알림
  • Freshping: 1분 간격 모니터링, 여러 위치에서 확인
  • HetrixTools: IP·도메인 블랙리스트 모니터링 포함

UptimeRobot 설정 방법

  1. uptimerobot.com 가입
  2. Add New Monitor → HTTP(s) 선택
  3. URL 입력 및 알림 설정 (텔레그램 또는 이메일)
  4. 5분 간격 자동 확인 시작

5. 로그 분석으로 문제 패턴 파악

# 최근 Nginx 에러 로그 확인
tail -100 /var/log/nginx/error.log

# 가장 많이 접속한 IP TOP 10
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 500 에러 발생 URL
awk '$9 == "500" {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# 오늘의 접속 수
grep "$(date '+%d/%b/%Y')" /var/log/nginx/access.log | wc -l

서버 상태 한눈에 보기

# 시스템 요약 정보
echo "=== CPU ===" && top -bn1 | grep "Cpu(s)"
echo "=== Memory ===" && free -h
echo "=== Disk ===" && df -h /
echo "=== Load ===" && uptime
echo "=== Services ===" && systemctl is-active nginx mariadb

마치며

일본 서버를 24시간 안정적으로 운영하려면 모니터링은 필수입니다. Netdata로 실시간 상태를 확인하고, UptimeRobot으로 외부에서 업타임을 감시하면 대부분의 장애를 사전에 대응할 수 있습니다. 서버 모니터링 설정에 대한 문의는 텔레그램 @tcp80net으로 주세요.