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