로그
Nginx의 기능중 누가 접속했는지, 그리고 에러가 났다면 어떠한 에러가 났는지 확인할 수 있는 로그를 남기는 기능이 있습니다.
기본적으로 `nginx.conf'파일 http블록에 전역 로그설정이 켜져있습니다.
이는 nginx에서 가동중인 모든 server의 로그를 남깁니다.
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
전역로그 설정 변경
전역로그 기능을 끄거나 변경할 수 있습니다.
access_log off; # 접속로그 끄기
error_log <경로> crit; # 크리티컬 에러만 로그
error_log off; # 에러로그 끄기
개별서버 로그
개별 server마다 로그를 남길 수 있습니다.
전역 설정을 끄고, 개별 서버마다 로그하는것이 좋습니다.
server
블록 안에 다음을 추가하면 됩니다.
access_log <경로>;
error_log <경로>;
보통 경로는 다음처럼 설정하면 좋습니다.
access_log /var/log/nginx/<server 이름>/access.log
error_log /var/log/nginx/<server 이름>/error.log
그리고 로그가 저장될 폴더를 만듭니다.
sudo mkdir /var/log/nginx/<server 이름>
ex)
server {
server_name vompressor.com www.vompressor.com;
#### 로그 설정 ####
access_log /var/log/nginx/vompressor/access.log;
error_log /var/log/nginx/vompressor/error.log;
location / {
## 생략 ##
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
## 생략 ##
}
Access 로그 포맷
nginx.conf
파일에 다음처럼 로그 포맷이 만들어져 있습니다. (없을수도 추가하면 됩니다.)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
포맷을 사용하려면 다음처럼 사용합니다.
access_log <경로> main
로그 포맷 양식 만들기
$remote_user HTTP Authorization 접속시 접속한 유저
$remote_addr 방문자 IP
$time_local 요청을 처리한 서버 시간
$status HTTP 응답코드
$request 클라이언트 요청
$http_user_agent 클라이언트가 사용한 브라우저
$http_referer 해당 페이지 이전에 거쳐온 URL
$body_bytes_sent 보낸 데이터 크기 (byte)
$http_x_forwarded_for 프록시 서버를 거치기 전의 접속 IP
$request_time 요청을 처리하는데 걸린시간
$connection 로그를 남길 당시의 커넥션 수
log_format 구문은 nginx.conf의 http블록안 혹은 각 서버 설정파일 최상단에 적어주세요.
log_format [포맷 이름] '포맷'
'포맷';
포맷을 사용하려면 access_log
끝에 포맷 이름을 적습니다.
access_log <로그 경로> <포맷 이름>;
ex)
log_format vomp_log '[$time_local] - $remote_addr | '
'$http_x_forwarded_for - "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"'; # 필요에따라 수정해서 사용
server {
server_name vompressor.com www.vompressor.com;
#### 로그 설정 ####
access_log /var/log/nginx/vompressor/access.log vomp_log;
error_log /var/log/nginx/vompressor/error.log;
location / {
## 생략 ##
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
## 생략 ##
}
결과)
[21/Feb/2021:02:54:45 +0000] - *.*.*.* | *.*.*.* - "GET / HTTP/1.1" 200 6180 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
error 로그 레벨
에러로그를 레벨에따라 로그를 남길수 있습니다.
info - 정보
notice - 정상
warn - 경고
error - 프로세스 처리 에러
crit - 프로새스에 영향을 주는 오류
alert - 프로새스에 심각한 영향을 주는 오류
emerg 서비스 불가 수준 오류 - 설정, syntax등이 잘못된 경우
debug 디버그 정보
사용법
error_log <에러로그 경로> <에러로그 레벨>
ex)
error_log /var/log/nginx/vompressor/error.log crit
Json으로 log 출력하기
다음처럼 포맷을 만들면 됩니다.
log_format <포맷 이름> escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';