일본 서버를 운영할 때 로그는 문제 발생 시 원인을 추적하고, 보안 이벤트를 감지하며, 서비스 성능을 분석하는 핵심 데이터입니다. 이 글에서는 일본 서버의 주요 로그 파일 위치와 분석 방법, 자동 로테이션 설정을 안내합니다.

주요 로그 파일 위치

로그 종류 파일 경로
시스템 로그 /var/log/syslog
커널 로그 /var/log/kern.log
인증 로그 /var/log/auth.log
Nginx 접속 로그 /var/log/nginx/access.log
Nginx 에러 로그 /var/log/nginx/error.log
MySQL 에러 로그 /var/log/mysql/error.log
MySQL 슬로우 쿼리 /var/log/mysql/slow.log
PHP-FPM 로그 /var/log/php8.1-fpm.log
Fail2Ban 로그 /var/log/fail2ban.log

시스템 로그 분석

실시간 로그 확인

# 실시간 시스템 로그 모니터링
journalctl -f

# 특정 서비스 로그
journalctl -u nginx -f
journalctl -u mariadb -f

# 최근 N줄 확인
journalctl -u nginx --lines=50

부팅 오류 확인

# 마지막 부팅의 커널 로그
dmesg | grep -i error
dmesg | grep -i fail

# 시스템 부팅 로그
journalctl -b

Nginx 로그 분석

접속 통계 분석

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

# HTTP 상태 코드 분포
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# 404 에러 URL 목록
awk '$9 == "404" {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# 500 에러 발생 시각
grep ' 500 ' /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1-2

# 가장 많이 요청된 URL TOP 10
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

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

봇 트래픽 감지

# 비정상 User-Agent 확인
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# 스캐너·봇 IP 확인 (단시간 다수 요청)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | awk '$1 > 1000 {print}'

인증 로그 보안 분석

# SSH 로그인 실패 IP 목록
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -20

# 성공적인 SSH 로그인 기록
grep "Accepted" /var/log/auth.log | tail -20

# sudo 사용 기록
grep "sudo" /var/log/auth.log | tail -20

# 무차별 공격 감지 (분당 10회 이상 실패)
grep "Failed password" /var/log/auth.log | awk '{print $1,$2,$3}' | sort | uniq -c | sort -rn | head -10

logrotate로 로그 자동 관리

로그 파일이 계속 쌓이면 디스크가 가득 찹니다. logrotate로 자동으로 압축·삭제합니다.

기본 설정 확인

cat /etc/logrotate.conf
ls /etc/logrotate.d/

커스텀 로그 로테이션 설정

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily           # 매일 로테이션
    rotate 30       # 30개 보관
    compress        # gzip 압축
    delaycompress   # 최신 1개는 압축 보류
    missingok       # 파일 없어도 에러 없음
    notifempty      # 빈 파일은 로테이션 건너뜀
    create 0640 www-data adm  # 새 파일 권한
    postrotate
        nginx -s reopen  # Nginx에 로그 파일 재열기 신호
    endscript
}

logrotate 즉시 실행 (테스트)

logrotate -d /etc/logrotate.d/nginx  # dry-run
logrotate -f /etc/logrotate.d/nginx  # 강제 실행

디스크 용량 모니터링

로그가 디스크를 가득 채우지 않도록 정기적으로 확인합니다.

# 디스크 사용량
df -h

# 가장 큰 파일 찾기
du -sh /var/log/* | sort -rh | head -10

# 큰 로그 파일 즉시 비우기 (파일 삭제 X, 내용만 비움)
> /var/log/nginx/access.log

중앙화 로그 관리 (선택)

여러 서버를 운영하거나 로그 분석을 고도화하려면 중앙화 로그 시스템을 도입합니다:

  • rsyslog: 로그를 원격 서버로 전송
  • ELK Stack: Elasticsearch + Logstash + Kibana로 대용량 로그 분석
  • Loki + Grafana: 경량 로그 집계 및 시각화

마치며

로그는 서버 운영의 블랙박스입니다. 평소에 로그를 점검하는 습관을 들이면 장애 발생 시 원인을 빠르게 파악하고, 보안 침해를 사전에 감지할 수 있습니다. 일본 서버 로그 설정에 대한 문의는 TCP-80.NET 텔레그램 @tcp80net으로 주세요.