홈서버 워드프레스 운영 로그와 모니터링 – 문제를 사전에 감지하는 방법

홈서버 워드프레스 운영 로그와 모니터링 – 문제를 사전에 감지하는 방법

홈서버로 워드프레스를 운영한다는 건
서버 관리까지 직접 책임지는 것을 의미한다.

웹사이트가 갑자기 느려지거나 접속이 되지 않을 때,
원인을 빠르게 파악하고 조치하지 않으면 방문자 이탈 + 수익 손실로 이어진다.

이번 글에서는 홈서버 워드프레스의 운영 상태를 실시간으로 파악하고
문제를 사전에 감지할 수 있는 실전 모니터링 방법
을 정리한다.

📊 장애 발생 시 손실 규모

다운타임과 손실의 관계

다운타임방문자 손실수익 손실SEO 영향
1시간100명$5~$10없음
6시간600명$30~$60⚠️ 경고
24시간2,400명$120~$240❌ 순위 하락
1주일17,000명$850~$1,700❌❌ 심각한 하락

장애 원인별 발생 빈도

원인빈도감지 시간복구 시간
디스크 용량 부족⭐⭐⭐⭐⭐즉시10분
메모리 부족 (OOM)⭐⭐⭐⭐즉시5분
컨테이너 다운⭐⭐⭐1분2분
네트워크 장애⭐⭐⭐5분30분+
정전⭐⭐즉시변동
DDoS 공격5분1시간+

핵심: 모니터링은 서버의 건강검진, 조기 발견이 손실 최소화

🖥️ Level 1: 시스템 리소스 모니터링

기본 명령어

# 1. htop - 실시간 프로세스 모니터링
sudo apt install htop -y
htop

확인 사항:
- CPU 사용률 (80% 이상 주의)
- 메모리 사용률 (90% 이상 주의)
- Load Average (CPU 코어 수보다 높으면 과부하)
- 프로세스별 리소스 사용

단축키:
F3: 프로세스 검색
F9: 프로세스 종료
q: 종료

# 2. df - 디스크 사용량
df -h

확인:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   85G   15G  85% /

→ 90% 이상 시 정리 필요

# 3. free - 메모리 상태
free -h

              total        used        free      shared  buff/cache   available
Mem:           8.0G        3.2G        1.5G        100M        3.3G        4.5G
Swap:          2.0G        500M        1.5G

→ available < 500MB 시 주의

# 4. uptime - 시스템 부하
uptime

 10:30:01 up 15 days,  3:42,  1 user,  load average: 0.52, 0.58, 0.59

→ Load Average가 CPU 코어 수보다 높으면 과부하

# 5. iotop - 디스크 I/O 모니터링
sudo apt install iotop -y
sudo iotop

→ 디스크 읽기/쓰기가 많은 프로세스 확인

Docker 컨테이너 리소스 모니터링

# 실시간 모니터링
docker stats

CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O
abc123def456   wordpress-app     2.34%     245MiB / 512MiB      47.85%    1.2MB / 3.4MB
def789ghi012   wordpress-db      5.67%     890MiB / 1GiB        86.91%    800KB / 2.1MB
ghi012jkl345   nginx-proxy       0.12%     25MiB / 256MiB       9.77%     5.6MB / 12MB

확인 사항:
- CPU %: 80% 이상 지속 시 문제
- MEM %: 90% 이상 시 OOM 위험
- NET I/O: 급격한 증가 시 공격 의심

# 특정 컨테이너 상세 정보
docker inspect wordpress-app | grep -A 10 "Memory"

# 컨테이너별 로그 크기 확인
docker ps -aq | xargs -I {} sh -c 'echo "Container: {}"; docker inspect {} | grep LogPath | cut -d\" -f4 | xargs ls -lh'

자동 알림 스크립트

#!/bin/bash
# ~/monitoring/resource-check.sh

# 설정
DISK_THRESHOLD=85
MEM_THRESHOLD=90
EMAIL="[email protected]"

# 디스크 체크
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
    echo "⚠️ Disk usage: ${DISK_USAGE}%" | mail -s "Disk Alert" $EMAIL
fi

# 메모리 체크
MEM_USAGE=$(free | awk 'NR==2 {printf "%.0f", $3/$2 * 100}')
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
    echo "⚠️ Memory usage: ${MEM_USAGE}%" | mail -s "Memory Alert" $EMAIL
fi

# Docker 컨테이너 체크
CONTAINERS=$(docker ps -q)
for container in $CONTAINERS; do
    if ! docker ps | grep -q $container; then
        CONTAINER_NAME=$(docker ps -a | grep $container | awk '{print $NF}')
        echo "⚠️ Container down: $CONTAINER_NAME" | mail -s "Container Alert" $EMAIL
    fi
done

# 실행 권한
chmod +x ~/monitoring/resource-check.sh

# Cron 자동화 (5분마다)
crontab -e
*/5 * * * * ~/monitoring/resource-check.sh

📝 Level 2: WordPress 로그 관리

디버그 로그 활성화

# wp-config.php 편집
docker exec wordpress-app nano /var/www/html/wp-config.php

# 추가 (/* That's all, stop editing! */ 위에)
// 개발 환경
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// 로그 파일 위치
define( 'WP_DEBUG_LOG', '/var/www/html/wp-content/debug.log' );

저장 → Ctrl+X → Y → Enter

# 로그 확인
docker exec wordpress-app tail -f /var/www/html/wp-content/debug.log

# 로그 크기 제한 (Cron)
0 0 * * * docker exec wordpress-app sh -c 'echo "" > /var/www/html/wp-content/debug.log'

일반적인 WordPress 에러

에러원인해결
Fatal error: Maximum execution timePHP 타임아웃max_execution_time 증가
Fatal error: Allowed memory size메모리 부족WP_MEMORY_LIMIT 증가
Error establishing database connectionDB 연결 실패DB 컨테이너 재시작
Warning: Cannot modify header출력 전 헤더공백/BOM 제거
404 on all pages except homepage퍼머링크 오류.htaccess 재생성

Query Monitor 플러그인

# 설치
플러그인 → "Query Monitor" 검색 → 설치 → 활성화

# 기능
- 느린 DB 쿼리 식별
- PHP 에러 실시간 표시
- HTTP 요청 추적
- Hook 실행 순서
- 플러그인 성능 분석

# 사용
사이트 방문 → 상단 바 "Query Monitor" 클릭
→ Queries by Component 확인
→ 느린 쿼리 최적화

🌐 Level 3: 웹서버 로그 분석

Nginx 로그 위치 및 분석

# Access 로그 (접속 기록)
docker exec nginx-proxy tail -f /var/log/nginx/access.log

# 로그 형식
192.168.0.100 - - [11/Nov/2025:10:30:01 +0000] "GET /wordpress-setup HTTP/1.1" 200 15234 "https://google.com" "Mozilla/5.0..."

분석:
- IP: 192.168.0.100
- 시간: 11/Nov/2025:10:30:01
- 요청: GET /wordpress-setup
- 상태: 200 (성공)
- 크기: 15234 bytes
- Referer: https://google.com
- User Agent: Mozilla/5.0

# Error 로그 (오류 기록)
docker exec nginx-proxy tail -f /var/log/nginx/error.log

# 일반적인 에러
- 404: 파일 없음 (봇 탐색 시도 의심)
- 502: Bad Gateway (WordPress 다운)
- 504: Gateway Timeout (응답 느림)

# 로그 분석 명령어

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

# 2. 가장 많이 접속한 페이지
docker exec nginx-proxy awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 3. 404 에러가 많은 URL
docker exec nginx-proxy awk '$9 == "404" {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# 4. User Agent 분석 (봇 확인)
docker exec nginx-proxy awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# 5. 시간대별 트래픽
docker exec nginx-proxy awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | sort | uniq -c

# 6. 느린 요청 (응답 시간)
docker exec nginx-proxy awk '$NF > 1 {print $0}' /var/log/nginx/access.log | tail -20

GoAccess 실시간 로그 분석

# 설치
sudo apt install goaccess -y

# 실시간 터미널 분석
docker exec nginx-proxy cat /var/log/nginx/access.log | goaccess --log-format=COMBINED -

# HTML 리포트 생성
docker exec nginx-proxy cat /var/log/nginx/access.log | \
  goaccess --log-format=COMBINED -o /tmp/report.html

# 웹으로 확인
docker cp nginx-proxy:/tmp/report.html ~/report.html
# 브라우저에서 file:///home/user/report.html 열기

# 실시간 HTML 업데이트
docker exec nginx-proxy goaccess /var/log/nginx/access.log \
  --log-format=COMBINED \
  --output=/usr/share/nginx/html/stats.html \
  --real-time-html \
  --daemon

# 접속
https://yourdomain.com/stats.html

📦 Level 4: Docker 로그 관리

컨테이너 로그 확인

# 로그 확인 (최근 100줄)
docker logs wordpress-app --tail 100

# 실시간 로그
docker logs wordpress-app -f

# 시간 범위 지정
docker logs wordpress-app --since 1h
docker logs wordpress-app --since "2025-11-11T10:00:00"
docker logs wordpress-app --until "2025-11-11T12:00:00"

# 타임스탬프 포함
docker logs wordpress-app -t

# 에러만 필터링
docker logs wordpress-app 2>&1 | grep -i error
docker logs wordpress-app 2>&1 | grep -i warning

로그 크기 제한

# docker-compose.yml 수정
services:
  wordpress:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
  
  db:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

# 또는 /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

# Docker 재시작
sudo systemctl restart docker

# 기존 로그 정리
docker system prune -a --volumes

🔔 Level 5: Uptime 모니터링 (외부)

UptimeRobot 설정 (무료)

# 1. 가입
https://uptimerobot.com/

# 2. 모니터 추가
Dashboard → Add New Monitor

Monitor Type: HTTP(s)
Friendly Name: My WordPress Blog
URL: https://yourdomain.com
Monitoring Interval: 5 minutes (무료)

# 3. 알림 설정
Alert Contacts → Add Alert Contact

Type: Email
Email: [email protected]

또는:
- Slack
- Discord
- Telegram
- Webhook

# 4. 고급 설정
Keyword Monitoring: "WordPress" (페이지에 특정 단어 있는지 확인)
Alert Threshold: Down for 5 minutes

# 5. 모니터 확인
Status: Up (녹색)
Uptime: 99.98%
Response Time: 342ms

# 결과
- 다운 시 즉시 이메일 수신
- 월간 리포트 제공
- 공개 Status Page 생성 가능

Better Uptime 설정 (대안)

# 사이트: https://betterstack.com/better-uptime

장점:
- 더 빠른 체크 (30초 간격, 무료)
- 예쁜 UI
- Incident Management
- Status Page 포함

설정:
1. 사이트 추가
2. 알림 채널 연결
3. 팀원 초대 (선택)

→ UptimeRobot보다 빠르고 직관적

📊 Level 6: 종합 모니터링 대시보드

Uptime Kuma (자체 호스팅)

# Docker Compose에 추가
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./uptime-kuma:/app/data
    ports:
      - "3001:3001"
    restart: unless-stopped

# 시작
docker compose up -d

# 접속
http://서버IP:3001

# 초기 설정
1. 관리자 계정 생성
2. 모니터 추가
   - HTTP(s): https://yourdomain.com
   - Heartbeat: 60초
3. 알림 설정
   - Email / Slack / Discord
4. 대시보드 확인

# 기능
✅ 다중 사이트 모니터링
✅ 응답 시간 그래프
✅ 다운타임 히스토리
✅ Public Status Page
✅ Docker / Port / Ping 모니터링

Grafana + Prometheus (고급)

# docker-compose.yml에 추가
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    restart: unless-stopped

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter
    ports:
      - "9100:9100"
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:

# prometheus.yml 생성
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

# 시작
docker compose up -d

# Grafana 접속
http://서버IP:3000
admin / admin

# 대시보드 import
Dashboard → Import
ID: 1860 (Node Exporter Full)

# 결과
- CPU, 메모리, 디스크 실시간 그래프
- 네트워크 트래픽
- 알림 설정 (임계값 초과 시)

✅ 주간 운영 체크리스트

항목주기확인 방법
디스크 용량매일df -h → 85% 이하
메모리 사용률매일free -h → available > 500MB
컨테이너 상태매일docker ps → 모두 Up
WordPress 에러주 1회debug.log 확인
접속 로그주 1회nginx access.log 분석
Uptime실시간UptimeRobot 대시보드
백업 확인주 1회백업 파일 존재 및 크기
보안 로그주 1회fail2ban 차단 IP 확인

📝 정리하며

핵심 요약

  • Level 1: htop, df, free로 시스템 리소스 모니터링
  • Level 2: WordPress debug.log + Query Monitor
  • Level 3: Nginx 로그 + GoAccess 분석
  • Level 4: Docker 로그 + 크기 제한
  • Level 5: UptimeRobot 외부 모니터링
  • Level 6: Uptime Kuma 또는 Grafana 대시보드

모니터링 자동화 스택

최소 구성 (무료):
- htop (시스템 리소스)
- docker stats (컨테이너)
- UptimeRobot (외부 모니터링)

권장 구성:
+ Uptime Kuma (자체 대시보드)
+ GoAccess (로그 분석)
+ 리소스 알림 스크립트

고급 구성:
+ Grafana + Prometheus (시각화)
+ ELK Stack (로그 집계)
+ PagerDuty (알림 관리)

다음 단계

다음 글에서는 홈서버 워드프레스 트래픽 분석을 다룬다:

  • Google Analytics 4 고급 설정
  • 방문자 행동 패턴 분석
  • 유입 경로 추적
  • 전환율 최적화
  • 데이터 기반 콘텐츠 전략

모니터링으로 서버 안정성을 확보했다면,
이제 방문자 데이터를 수익으로 전환할 차례다. 📈

댓글 남기기

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.