웹사이트 검색

Ubuntu VPS의 Nginx에서 로깅 및 로그 회전을 구성하는 방법


소개

웹 서버 문제를 해결하기 위해 로깅을 구성할 수 있습니다. 서버에 정보를 기록하면 상황이 발생할 때 문제를 해결하고 평가하는 데 도움이 되는 데이터에 액세스할 수 있습니다.

이 튜토리얼에서는 Nginx의 로깅 기능을 살펴보고 필요에 가장 잘 맞도록 이러한 도구를 구성하는 방법을 알아봅니다. 예를 들어 Ubuntu 22.04 가상 사설 서버를 사용하지만 모든 최신 배포판은 유사하게 작동해야 합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 방화벽이 있는 루트가 아닌 sudo 사용 사용자가 있는 Ubuntu 22.04 서버 1대. 시작하려면 초기 서버 설정을 따르십시오.
  • Nginx가 서버에 설치되었습니다. Ubuntu 22.04에 Nginx를 설치하는 방법 자습서를 따라 설치하세요.

Ubuntu 22.04 서버에서 Nginx를 실행하면 시작할 준비가 된 것입니다.

Error_log 지시문 이해

Nginx는 몇 가지 지시문을 사용하여 시스템 로깅을 제어합니다. 코어 모듈에 포함된 것은 error_log입니다.

error_log 구문

error_log 지시문은 로깅 일반 오류 메시지를 처리하는 데 사용됩니다. Apache에 익숙하다면 이것은 Apache의 ErrorLog 지시문과 매우 유사합니다.

error_log 지시문은 다음 구문을 적용합니다.

error_log log_file log_level

log_file은 로그가 기록될 파일을 지정합니다. log_level은 기록하려는 가장 낮은 로깅 수준을 지정합니다.

로깅 수준

error_log 지시문은 필요에 따라 더 많거나 적은 정보를 기록하도록 구성할 수 있습니다. 로깅 수준은 다음 중 하나일 수 있습니다.

  • emerg: 시스템이 사용할 수 없는 상태인 긴급 상황.
  • 경고: 즉각적인 조치가 필요한 심각한 상황
  • crit: 해결해야 할 중요한 문제입니다.
  • 오류: 오류가 발생했으며 무언가 실패했습니다.
  • 경고: 비정상적인 일이 발생했지만 걱정할 필요는 없습니다.
  • 통지: 정상적이지만 일어난 일에 주목할 가치가 있습니다.
  • 정보: 알아두면 좋을 정보 메시지입니다.
  • debug: 문제가 발생하는 위치를 정확히 찾아내는 데 유용할 수 있는 디버깅 정보입니다.

목록에서 더 높은 수준은 더 높은 우선 순위로 간주됩니다. 수준을 지정하면 로그는 해당 수준과 지정된 수준보다 높은 모든 수준을 캡처합니다.

예를 들어 error를 지정하면 로그는 error, crit, alert 및 < 코드>비상.

사용 중인 이 지시문의 예는 기본 구성 파일 내부에 있습니다. 선호하는 텍스트 편집기를 사용하여 다음 구성 파일에 액세스하십시오. 이 예에서는 nano를 사용합니다.

  1. sudo nano /etc/nginx/nginx.conf

파일을 # Logging Settings 섹션까지 아래로 스크롤하고 다음 지시문을 확인합니다.

. . .
##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
. . .

error_log에 아무 것도 기록하지 않으려면 출력을 /dev/null로 보내야 합니다.

. . .
error_log /dev/null crit;
. . .

다른 로깅 지시문인 access_log는 다음 섹션에서 설명합니다.

HttpLogModule 로깅 지시문 이해

error_log 지시문은 코어 모듈의 일부인 반면 access_log 지시문은 HttpLogModule의 일부입니다. 이것은 로그를 사용자 정의하는 기능을 제공합니다.

이 모듈에는 사용자 지정 로그 구성을 지원하는 몇 가지 다른 지시문이 포함되어 있습니다.

log_format 지시어

log_format 지시문은 일반 텍스트와 변수를 사용하여 로그 항목의 형식을 설명하는 데 사용됩니다.

combined라는 Nginx로 미리 정의된 형식이 하나 있습니다. 이것은 많은 서버에서 사용되는 일반적인 형식입니다.

다음은 내부적으로 정의되지 않았고 log_format 지시문을 사용하여 지정해야 하는 경우 결합된 형식의 예입니다.

log_format combined '$remote_addr - $remote_user [$time_local]  '
		    '"$request" $status $body_bytes_sent '
		    '"$http_referer" "$http_user_agent"';

이 정의는 세미콜론(;)을 찾을 때까지 여러 줄에 걸쳐 있습니다.

달러 기호($)로 시작하는 줄은 변수를 나타내고 -, []와 같은 문자는 변수를 나타냅니다. 문자 그대로 해석됩니다.

지시문의 일반 구문은 다음과 같습니다.

log_format format_name string_describing_formatting;

핵심 모듈에서 지원하는 변수를 사용하여 로깅 문자열을 공식화할 수 있습니다.

access_log 지시문 이해

access_log 지시문은 error_log 지시문과 유사한 구문을 사용하지만 더 유연합니다. 사용자 지정 로깅을 구성하는 데 사용됩니다.

access_log 지시문은 다음 구문을 사용합니다.

access_log /path/to/log/location [ format_of_log buffer_size ];

access_log의 기본값은 log_format 섹션에서 언급한 결합 형식입니다. log_format 정의로 정의된 모든 형식을 사용할 수 있습니다.

버퍼 크기는 Nginx가 모든 데이터를 로그에 쓰기 전에 보유할 최대 데이터 크기입니다. 정의에 gzip을 추가하여 로그 파일의 압축을 지정할 수도 있습니다.

access_log /path/to/log/location format_of_log gzip;

error_log 지시문과 달리 로깅을 원하지 않는 경우 구성 파일에서 업데이트하여 끌 수 있습니다.

. . .
##
# Logging Settings
##

access_log off;
error_log /var/log/nginx/error.log;

. . .

이 경우 /dev/null에 쓸 필요가 없습니다.

로그 순환 관리

로그 파일이 커짐에 따라 디스크 공간이 가득 차지 않도록 로깅 메커니즘을 관리해야 합니다. 로그 회전은 로그 파일을 전환하고 일정 시간 동안 오래된 파일을 보관하는 프로세스입니다.

Nginx는 로그 파일을 관리하는 도구를 제공하지 않지만 로그 회전을 지원하는 메커니즘을 포함합니다.

수동 로그 회전

로그를 수동으로 회전하려면 로그를 회전하는 스크립트를 만들 수 있습니다. 예를 들어, 보관을 위해 현재 로그를 새 파일로 이동합니다. 일반적인 체계는 가장 최근 로그 파일의 이름을 .0 접미사로 지정한 다음 이전 파일의 이름을 .1로 지정하는 방식입니다.

  1. mv /path/to/access.log /path/to/access.log.0

실제로 로그를 회전시키는 명령은 kill -USR1 /var/run/nginx.pid입니다. 이는 Nginx 프로세스를 종료하지 않고 대신 로그 파일을 다시 로드하도록 하는 신호를 보냅니다. 이렇게 하면 새 요청이 새로 고쳐진 로그 파일에 기록됩니다.

  1. kill -USR1 `cat /var/run/nginx.pid`

/var/run/nginx.pid 파일은 Nginx가 마스터 프로세스의 PID를 저장하는 위치입니다. pid로 시작하는 줄과 함께 /etc/nginx/nginx.conf 구성 파일의 맨 위에 지정됩니다.

  1. sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
...

회전 후 프로세스가 전송을 완료할 수 있도록 sleep 1을 실행합니다. 그런 다음 이전 파일을 압축하거나 원하는 사후 회전 프로세스를 수행할 수 있습니다.

  1. sleep 1
  2. [ post-rotation processing of old log file ]

logrotate를 사용한 로그 회전

logrotate 애플리케이션은 로그를 회전시키는 데 사용되는 프로그램입니다. 기본적으로 Ubuntu에 설치되며 Ubuntu의 Nginx는 사용자 지정 logrotate 스크립트와 함께 제공됩니다.

선호하는 텍스트 편집기를 사용하여 회전 스크립트에 액세스하십시오. 이 예에서는 nano를 사용합니다.

  1. sudo nano /etc/logrotate.d/nginx

파일의 첫 번째 행은 후속 행이 적용될 위치를 지정합니다. Nginx 구성 파일에서 로그인 위치를 전환하는 경우 이를 염두에 두십시오.

파일의 나머지 부분은 로그가 매일 교체되고 52개의 이전 사본이 보존됨을 지정합니다.

postrotate 섹션에는 이전에 사용된 수동 회전 메커니즘과 유사한 명령이 포함되어 있습니다.

. . .
postrotate
	[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
. . .

이 섹션은 회전이 완료되면 Nginx에게 로그 파일을 다시 로드하도록 지시합니다.

결론

적절한 로그 구성 및 관리는 서버에 문제가 발생할 경우 시간과 에너지를 절약할 수 있습니다. 문제를 진단하는 데 도움이 되는 정보에 액세스하는 것은 사소한 수정과 지속적인 두통의 차이가 될 수 있습니다.

기능적인 사이트를 유지하고 중요한 정보를 노출하지 않도록 하려면 서버 로그를 주시하는 것이 중요합니다. 이 가이드는 로깅 경험에 대한 소개 역할만 합니다. 일반적인 Nginx 오류를 해결하는 방법에 대한 자습서에서 더 일반적인 팁을 배울 수 있습니다.