[Nginx] 설정 log - logrotate
- 로그 파일을 관리 안해주면 무한정 쌓이게 된다.
- 날짜 별로 로그 파일을 새로 생성해주고, 특정 기간이 지난 것은 지워주도록 만드는 logrotate 설정에 대해서 기술한다.
[Nginx] 설정 log - logrotate Configuration File
- nginx_logrotate
/NGINX LOG PATH/*.log {
su USER-NAME USER-NAME
daily
dateformat .%Y-%m-%d
dateext
missingok
rotate 52
compress
delaycompress
notifempty
create 640 USER-NAME USER-NAME
sharedscripts
postrotate
if [ -f /NGINX PID PATH/nginx.pid ]; then
kill -USR1 `cat /NGINX PID PATH/nginx.pid`
fi
endscript
}
- NGINX PID PATH, USER-NAME, NGINX PID PATH 은 서버 환경에 맡게끔 수정해서 사용해야 한다.
- kill -USR1 명령어는 log 파일을 다시 open 하라는 명령어이다.
[Nginx] 설정 log - logrotate crontab 에 등록
- 기본 설정이 아닌 사용자 crontab 사용.
- 대부분의 설정 가이드에 보면 /etc/logrotate.d/ 위치에 두라고한다. 그 곳에 두면 /etc/logrotate.conf 에서 include 하여 자동으로 날마다 갱신된다.
- log rotate 과정은 *.log 파일들을 찾아서 rotate 할 필요가 있는지 확인 한 뒤, rename, create, relopen log file 과정을 거치게 되는대
- 아주 잠시나마 순단이 생기게 된다. 만약 서비스의 특성상 새벽 0시 쯤 사용자가 많다면 순단은 서비스에 악영향을 끼친다.
- 보통 사용자가 가장 적은 시간은 새벽 3시로 알려져있기 때문에 이 글에서는 새벽 3시에 log rotate 하는 방법을 기술한다.
- 만약 load balancing 을 통해서 여러 대의 서버를 구동중이라면 각각의 서버에서 log rotate 시간을 다르게 설정하여 순단의 피해를 거의 없다시피 만들 수 있다.
- crontab -e 명령어를 통해서 crontab 설정을 open 한 뒤 새벽 3시 0분에 log rotate 가 되도록 설정한다.
0 3 * * * /usr/sbin/logrotate -s LOG_ROTATE_STATUS_FILE_PATH/nginx_logrotate.status LOG_ROTATE_CONFIGURE_FILE_PATH/nginx_logrotate
- LOG_ROTATE_STATUS_FILE_PATH, LOG_ROTATE_CONFIGURE_FILE_PATH 은 서버 환경에 맡게끔 수정해서 사용해야 한다.
- LOG_ROTATE_STATUS_FILE_PATH/nginx_logrotate.status 파일은 log 파일이 언제 rotate 되었는지를 기록하는 곳으로 만약 없다면 생성되며 최초 생성시에는 log 파일이 rotate 되지 않는다.
- /usr/sbin/logrotate 에 관해서는 링크(https://linux.die.net/man/8/logrotate)를 참고바라며 간략하게 몇 가지 옵션에 대해서만 설명한다.
- -s : status 가 저장될 파일
- -d : debug 모드. 반영 되는 것이 아니므로 주의가 필요하다.
- -f : 강제모드. status 에 기록된 내용과 상관 없이 log rotate를 시킨다.
- crontab -l 명령어를 통해서 등록한 명령어가 잘 기록되었는지 확인할 수 있다.
- log rotation configuration 파일이 정상적으로 동작하는지 확인하기 위해서는 /usr/sbin/logrotate 명령어의 -f 옵션으로 확인 할 수 있다.
$> /usr/sbin/logrotate -s LOG_ROTATE_STATUS_FILE_PATH/nginx_logrotate.status -f LOG_ROTATE_CONFIGURE_FILE_PATH/nginx_logrotate
[Nginx] 설정 log - header 로그에 찍기.
log_format 을 통해서 nginx log 에 남길 format을 결정한다.
- direction : log_format
- context : http
- example :
log_format custom '$upstream_http_custom_header';
server {
...
access_log /path custom;
...
}
response 에서 header에 custom-header 라고 넣어주면 nginx log에 해당 값(value)가 찍힌다.(대시, 언더바 주의)
그런데 말입니다. log 에는 찍고 싶은대 사용자에게는 response 하기 싫다면 말입니다...
- log 에는 찍어야하나 사용자 response header 에서는 빼야하는 경우도 있다.
- 이런 경우에는 proxy_hide_header를 통해서 가능하다.
log_format custom '$upstream_http_custom_header';
server {
proxy_hide_header custom-header;
...
access_log /path custom;
...
}
- access.log 파일에는 서버의 response header 에 넣은 custom-header 값이 남으나 http request를 통해 리턴되는 response 에서는 사라진다.
'환경' 카테고리의 다른 글
[NGINX] 에러 - [error] 76899#0: *5007 upstream sent too big header while reading response header from upstream (13) | 2019.01.11 |
---|---|
[Nginx] 설정 Cache (12) | 2019.01.09 |
[NGINX] 컴파일 설치 - download 와 build script (13) | 2019.01.09 |
docker compose 사용법 간단 정리. (13) | 2018.02.23 |
Jenkins 배포시 broken pipe 문제 (13) | 2016.12.15 |
댓글