웹사이트 검색

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


상태: 더 이상 사용되지 않음

이 문서에서는 더 이상 지원되지 않는 Ubuntu 버전에 대해 설명합니다. 현재 Ubuntu 12.04를 실행하는 서버를 운영 중인 경우 지원되는 Ubuntu 버전으로 업그레이드하거나 마이그레이션하는 것이 좋습니다.

  • Ubuntu 14.04로 업그레이드합니다.
  • Ubuntu 14.04에서 Ubuntu 16.04로 업그레이드
  • 서버 데이터를 지원되는 버전으로 마이그레이션

이유:

대신 참조:

소개

Apache 웹 서버는 서버 관리자에게 작동 방식과 해결해야 할 문제(있는 경우)에 대한 중요한 정보를 제공하도록 구성할 수 있습니다.

관리자에게 피드백을 제공하는 주요 방법은 로그 파일을 사용하는 것입니다. Apache에는 지침에 따라 다른 위치에 메시지를 출력하는 데 사용할 수 있는 매우 구성 가능한 로깅 메커니즘이 있습니다.

이 가이드에서는 구조화되고 구문 분석하기 쉬운 로그를 설정하기 위해 Apache의 로깅 기능을 활용하는 방법을 살펴봅니다. Ubuntu 12.04 VPS에서 기본 Apache2 설치를 사용합니다. 다른 배포판도 비슷한 방식으로 작동해야 합니다.

Apache 로그 수준

Apache는 정보를 고려하는 중요도에 따라 모든 정보 메시지를 범주로 구분합니다.

예를 들어 긴급 상황으로 간주되는 가장 중요한 메시지의 경우 Apache는 로그 수준을 "emerg"로 지정합니다. 반면에 "info" 태그는 가끔 보면 유용할 수 있는 유용한 정보를 보여줍니다.

다음은 Apache가 인식하는 로그 수준입니다(가장 중요한 것부터 가장 낮은 것까지).

  • emerg: 시스템을 사용할 수 없는 비상 상황
  • 경고: 즉각적인 조치가 필요한 심각한 상황입니다.
  • 비판: 해결해야 할 중요한 문제
  • 오류: 오류가 발생했습니다. 뭔가 실패했습니다.
  • 경고: 비정상적인 일이 발생했지만 걱정할 필요는 없습니다.
  • 알림: 정상적이지만 주목할 가치가 있는 일이 발생했습니다.
  • 정보: 알아두면 좋을 정보 메시지입니다.
  • 디버그: 문제가 발생한 위치를 정확히 찾아내는 데 유용할 수 있는 디버깅 정보입니다.
  • trace[1-8]: 많은 양의 정보를 생성하는 다양한 수준의 자세한 정보를 추적합니다.

로그 수준을 지정할 때 해당 범주에 레이블이 지정된 메시지를 기록하도록 선택하는 것이 아니라 기록하려는 가장 중요하지 않은 수준을 선택하는 것입니다.

즉, 선택한 수준 위의 모든 수준도 기록됩니다. 예를 들어 "warn" 로그 수준을 선택하면 warn, error, crit, alert 및 emerg 태그가 지정된 메시지가 모두 기록됩니다.

"LogLevel" 지시문으로 원하는 로깅 수준을 지정합니다. 기본 구성 파일에서 기본 로그 수준을 볼 수 있습니다.

sudo nano /etc/apache2/apache2.conf
. . .
LogLevel warn
. . .

보시다시피 기본적으로 Apache는 "경고" 이상의 우선 순위로 메시지를 기록하도록 구성되어 있습니다. 다음 섹션에서 Apache가 메시지를 기록하는 위치를 알아봅니다.

Apache는 로그를 어디에 보관합니까?

Apache는 서버 전체의 로깅 사양을 사용하여 로그를 저장할 위치를 알 수 있습니다. 각각의 개별 가상 호스트에 대해 개별적으로 로깅을 구성할 수도 있습니다.

서버 전체 로깅

서버가 기본적으로 정보를 기록하는 위치를 찾기 위해 기본 구성 파일을 열 수 있습니다. 우분투에서 이것은 \/etc/apache2/apache2.conf\입니다:

sudo nano /etc/apache2/apache2.conf

파일을 검색하면 다음과 같은 줄을 찾을 수 있습니다.

ErrorLog ${APACHE_LOG_DIR}/error.log

이 지시문은 Apache가 오류 메시지를 보관할 파일의 이름을 지정합니다. 보시다시피 "APACHE_LOG_DIR"이라는 환경 변수를 사용하여 디렉토리 경로의 접두사를 가져옵니다.

다른 파일인 적절한 이름의 "envvars" 파일을 검사하여 "APACHE_LOG_DIR"이 무엇으로 설정되어 있는지 확인할 수 있습니다.

sudo nano /etc/apache2/envvars
. . .
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
. . .

이 줄에서 \APACHE_LOG_DIR\ 변수가 \/var/log/apache2\ 디렉토리로 설정되었음을 볼 수 있습니다. 이는 "apache2.conf" 파일의 지시문과 결합될 때 Apache가 "/var/log/apache2/error.log"라는 파일에 로그인함을 의미합니다.

sudo ls /var/log/apache2
access.log  error.log  other_vhosts_access.log

error.log 파일과 일부 다른 로그 파일도 볼 수 있습니다.

가상 호스트 로깅

이전 섹션 끝에 있는 \access.log\ 파일은 \apache2.conf\ 파일에 구성되어 있지 않습니다. 대신 패키지 관리자는 가상 호스트 정의 내에서 용도를 지정하는 지시문을 배치하기로 결정했습니다.

기본 가상 호스트 정의를 검사하여 액세스 로그 선언을 확인하십시오.

sudo nano /etc/apache2/sites-available/default

파일을 스크롤하면 로깅과 관련된 세 가지 개별 값을 볼 수 있습니다.

. . .
ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
. . .

ErrorLog 정의는 기본 구성 파일의 정의와 일치합니다. 두 위치 모두에 해당 라인이 있을 필요는 없지만 한 위치 또는 다른 위치에서 위치를 변경할 경우 구체적으로 지정하는 것이 문제가 되지는 않습니다.

사용자 지정 로그 정의

이전 섹션에서 "access.log" 파일을 설명하는 줄은 이전 로그 줄과 다른 지시문을 사용합니다. "CustomLog"를 사용하여 access.log 위치를 지정합니다.

CustomLog ${APACHE_LOG_DIR}/access.log combined

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

CustomLog log_location log_format

이 예에서 로그 형식은 "결합"입니다. 이것은 내부 Apache 사양이 아닙니다. 대신 기본 구성 파일에 정의된 사용자 정의 형식에 대한 레이블입니다.

기본 구성 파일을 다시 열면 "결합" 로그 형식을 정의하는 행을 볼 수 있습니다.

sudo nano /etc/apache2/apache2.conf
. . .
LogFormat "%h %l %u %t \"%r\" %>s %O \"{Referer}i\" \"%{User-Agent}i\"" combined
. . .

"LogFormat" 명령은 가상 호스트 정의에서 본 것처럼 "CustomLog" 지시문을 사용하여 호출할 수 있는 로그에 대한 사용자 지정 형식을 정의합니다.

이 로그 형식은 "결합" 형식으로 알려진 형식을 지정합니다. 여기로 이동하여 사용 가능한 형식 문자열 변수에 대해 자세히 알아보세요.

보시다시피 가상 호스트 정의 내에서 사용하기 위해 생성된 몇 가지 다른 공통 형식이 있습니다. 앞에서 CustomLog 선언을 본 것과 똑같이 사용할 수 있습니다. 고유한 사용자 지정 로그 형식을 만들 수도 있습니다.

Apache 로그 파일 회전

Apache는 클라이언트의 요청을 처리하는 과정에서 많은 양의 정보를 기록할 수 있기 때문에 로그를 회전시키는 시스템을 설정해야 합니다.

로그 회전은 로그가 너무 커지면 로그를 전환하는 것처럼 간단할 수도 있고 나중에 참조할 수 있도록 오래된 복사본을 보관하고 저장하는 시스템일 수도 있습니다. 이는 구성에 따라 다릅니다.

아래에서는 이를 달성하는 몇 가지 다른 방법에 대해 설명합니다.

수동으로 로그 회전

Apache가 실행 중인 동안에는 로그 파일을 이동할 수 없으므로 기존 로그를 새 로그로 교체하려면 서버를 다시 시작해야 합니다.

이 작업은 파일을 이동한 다음 Apache를 소프트 재시작하여 새 연결에 새 로그를 사용할 수 있도록 수동으로 수행할 수 있습니다.

Apache 설명서에 사용된 예제는 여기에 있습니다. 적절한 권한을 얻으려면 이러한 명령 앞에 "sudo"를 추가해야 할 수 있습니다.

mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
[post-processing of log files]

이렇게 하면 파일이 이동되고 서버가 다시 로드되며 600초 동안 기다립니다. 이렇게 하면 Apache가 이전 로그 파일을 계속 사용하여 이전 요청에서 로깅을 완료할 수 있습니다. 이 시간 동안 새 요청은 새로 고쳐진 새 파일에 기록됩니다.

이 작업을 수동으로 수행하는 방법을 아는 것이 좋지만 대규모 서버 환경에서는 지속 불가능합니다.

Logrotate를 사용하여 로그 회전 관리

기본적으로 Ubuntu는 logrotate를 사용하여 자체 로그 회전 계획을 설정합니다.

이 프로그램은 특정 기준이 충족되면 매개변수를 사용하고 로그를 회전할 수 있습니다. "/etc/logrotate.d/apache2"를 보면 어떤 이벤트로 인해 logrotate가 Apache 로그를 스왑하는지 확인할 수 있습니다.

sudo nano /etc/logrotate.d/apache2

여기에서 logrotate에 지정된 일부 매개변수를 볼 수 있습니다. 우선, 첫 번째 줄은 다음과 같습니다.

/var/log/apache2/*.log {

즉, logrotate는 "/var/log/apache2"에 있는 로그에서만 작동합니다. Apache 구성에서 로그에 대해 다른 디렉토리를 선택한 경우 이를 염두에 두십시오.

로그가 매주 순환되고 기본적으로 1년 분량의 로그가 저장되는 것을 볼 수 있습니다. 또한 회전 후 Apache를 다시 로드하는 섹션이 있음을 알 수 있습니다.

postrotate
	/etc/init.d/apache2 reload > /dev/null
endscript

이 줄은 회전이 완료될 때마다 Apache가 자동으로 다시 로드되도록 합니다. 이 파일 내의 매개변수는 마음대로 변경할 수 있지만 구성은 이 문서의 범위를 벗어납니다.

파이프를 사용한 로깅

파일 대신 파이프를 사용하면 별도의 로깅 프로그램이 출력을 처리할 수 있는 쉬운 방법입니다. 이렇게 하면 Apache 자체가 아닌 백엔드 로깅 프로그램에서 처리할 수 있기 때문에 로그 회전 문제도 해결됩니다.

표준 입력을 허용하는 로깅 프로그램에서 액세스 로그를 처리하려면 다음과 같이 줄을 변경할 수 있습니다.

CustomLog "| logging_program logging_program_parameters" combined

Apache는 시작할 때 로깅 프로그램을 시작하고 어떤 이유로 로깅 프로세스가 실패하면 다시 시작합니다.

로그를 회전하도록 여러 프로그램을 구성할 수 있지만 Apache에는 기본적으로 "rotatelogs"라는 프로그램이 포함되어 있습니다. 다음과 같이 구성할 수 있습니다.

CustomLog "| /path/to/rotatelog /path/of/log/to/rotate number_of_seconds_between_rotations" log_level

다른 로깅 유틸리티를 사용하여 유사한 구성을 달성할 수 있습니다.

결론

서버를 올바르게 관리하는 데 필요한 모든 것을 기록하고 파일이 너무 커지는 것을 방지하기 위해 적절한 로그 회전 메커니즘을 갖추는 것이 중요합니다.

이제 Apache에 대한 로깅을 만들고 구성하는 방법을 이해해야 합니다. 기록된 정보는 문제를 해결하고 조치를 취해야 할 시기를 예측하는 데 사용할 수 있습니다.