액세스 로그는 요청 기록이지만, 에러 로그는 서버 내부에서 발생한 문제를 기록합니다. 500 에러의 원인, PHP 오류, 파일 권한 문제 등 서비스 장애의 근본 원인은 에러 로그에서 찾을 수 있습니다.
| 웹 서버 | 로그 경로 | |
|---|---|---|
| -------- | ---------- | |
| Nginx | /var/log/nginx/error.log | |
| Apache (Ubuntu) | /var/log/apache2/error.log | |
| Apache (CentOS) | /var/log/httpd/error_log | |
| 필드 | 의미 | |
| ------ | ------ | |
| 날짜/시각 | 2024/10/10 14:05:22 | |
| 로그 레벨 | [error] (debug/info/notice/warn/error/crit/alert/emerg) | |
| 프로세스 ID | 12345#12345 (마스터#워커) | |
| 연결 ID | *678 | |
| 메시지 | open() failed... | |
| 클라이언트 IP | 192.0.2.100 | |
| 서버명 | example.com | |
| 요청 | GET /favicon.ico HTTP/1.1 | |
| 필드 | 의미 | |
| ------ | ------ | |
| 날짜/시각 | Fri Oct 10 14:05:22.123456 2024 | |
| 모듈:레벨 | [core:error] | |
| 프로세스 ID | [pid 12345] | |
| 클라이언트 | [client 192.0.2.100:54321] | |
| 메시지 | File does not exist... | |
| 레벨 | 심각도 | 의미 |
| ------ | -------- | ------ |
| emerg | 최고 | 시스템 사용 불가 |
| alert | 매우 높음 | 즉시 조치 필요 |
| crit | 높음 | 치명적 오류 |
| error | 중간 | 일반 오류 (기본 로깅) |
| warn | 낮음 | 경고 |
| notice | 매우 낮음 | 주목할 이벤트 |
| info | 정보 | 정보성 메시지 |
| debug | 디버그 | 개발 전용 |
레벨만 로깅하는 것이 일반적입니다.
에러 로그 분석 명령어
가장 많이 발생한 에러
`bash awk '{for(i=1;i<=NF;i++){if($i~/\[error\]/){print;break}}}' /var/log/nginx/error.log \ | sort | uniq -c | sort -rn | head -10 `
특정 시간대 에러
`bash grep '2024/10/10 14:' /var/log/nginx/error.log `
PHP Fatal Error 찾기
`bash grep -i 'fatal error' /var/log/nginx/error.log `
502/504 에러 원인
`bash grep -E '(upstream timed out|connect\(\) failed)' /var/log/nginx/error.log `
로그 레벨 조정
Nginx
/etc/nginx/nginx.conf:
`nginx error_log /var/log/nginx/error.log warn; # error → warn으로 변경 `
Apache
/etc/apache2/apache2.conf:
`apache LogLevel warn # error → warn `
재시작 필요:
`bash sudo systemctl restart nginx sudo systemctl restart apache2 `
에러 로그 로테이션
/etc/logrotate.d/nginx:
` /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 cat /var/run/nginx.pid endscript } ``
에러 로그는 500/502/504 에러의 실제 원인을 알려줍니다. 파일 권한, FastCGI 연결 실패, 타임아웃, 메모리 부족 등 액세스 로그만으로는 알 수 없는 서버 내부 문제를 진단할 수 있습니다.