
로그 파일은 웹 애플리케이션 내의 문제를 디버깅할 때 개발자와 시스템 관리자에게 매우 유용한 도구입니다. 로그 파일은 웹사이트 오작동을 트러블슈팅할 때 주요 정보 소스로 활용되는 경우가 많습니다.
이러한 로그 중에서도 Apache HTTP 서버의 액세스 로그는 애플리케이션 디버깅과 방문자 활동에 대한 인사이트를 얻기 위한 핵심적인 리소스로서 특히 중요합니다.
Apache 액세스 로그의 기록 내용, 로그의 위치, 로그에 포함된 데이터 해석 방법 등 Apache 액세스 로그의 세부 사항을 이해하려면 이 글을 계속 읽어 보세요. 로그 데이터의 진정한 가치는 분석을 통해 얻는 인사이트에 있으므로, 이 블로그에서는 Sumo Logic과 같은 SaaS 로그 분석 플랫폼을 활용해 액세스 로그 데이터에서 실행 가능한 인사이트를 확보하는 방법과 그 이점을 탐구합니다.
Apache 액세스 로그란 무엇이며 웹 서버 모니터링에서 어떤 역할을 할까?
위에서 언급한 것처럼 Apache 액세스 로그 파일은 Apache 웹 서버가 생성하는 여러 로그 파일 중 하나입니다. 이 특정 로그 파일에는 Apache 서버에서 처리하는 모든 요청에 대한 데이터가 기록됩니다. 따라서 누군가가 귀 조직 사이트의 웹 페이지를 방문하면 액세스 로그 파일에 이 이벤트에 관한 세부 정보가 포함됩니다.
이 정보는 다양한 상황에서 유용합니다.
- 특정 웹 페이지에 접속하려는 모든 사람의 공통 요청이 실패하는 경우, 해당 링크가 더 이상 존재하지 않는 페이지를 가리키고 있을 수 있습니다.
- 사이트의 특정 페이지가 로드되는 데 예상보다 오래 걸리는 경우, 로그 항목에서 서버 성능을 향상시키기 위해 최적화가 필요한 SQL 쿼리가 강조 표시될 수 있습니다.
- 사이트의 특정 페이지에 접속량이 매우 많은 경우, 액세스 로그의 데이터를 집계하면 일반적으로 요청되는 리소스를 파악하여 기업에서 콘텐츠를 최적화하는 데 도움이 될 수 있습니다.
Apache 액세스 로그는 어디에서 찾을 수 있나?
Apache 액세스 로그의 위치는 Apache HTTP 서버를 실행하는 시스템에 따라 다릅니다. 대부분의 Apache 서버 인스턴스는 리눅스 배포판에서 실행되므로 리눅스 머신에서 Apache 액세스 로그를 찾는 방법을 집중적으로 살펴보겠습니다.
예를 들어 Ubuntu 리눅스 배포판에서는 액세스 로그 레코드가 기본적으로 다음 위치에 기록됩니다.
/var/log/apache2/access.log
다른 리눅스 배포판에서는 기본 위치가 약간 다를 수 있지만, 대부분의 경우 멀리서 찾지 않아도 됩니다. 궁극적으로 액세스 로그의 로그 위치와 형식(이에 대해서는 나중에 자세히 설명함)은 CustomLog 지시문으로 정의되며, 이는 Apache HTTP 서버 구성 내에서 확인하고 수정할 수 있습니다.
Apache 액세스 로그 해석
이제 Apache 액세스 로그가 무엇이고 어디에서 찾을 수 있는지 알게 되었으므로, 개발팀과 다른 IT 담당자들이 이를 최대한 활용할 수 있도록 항목을 해석할 준비가 되었습니다.
로그 항목을 이해하려면 Apache 로그 형식을 알아야 합니다. 액세스 로그의 형식은 CustomLog 지시문에 정의되어 있습니다. 다음은 Apache 액세스 로그에서 자주 사용되는 일반적인 두 가지 로그 형식입니다.
Common Log Format(공통 로그 형식, CLF)
Common Log Format은 다양한 웹 서버에서 서버 로그 파일을 생성하는 데 사용하는 표준화된 텍스트 파일 형식입니다. Apache HTTP 서버에서는 Common Log Format을 사용하여 개발자와 관리자가 쉽게 읽을 수 있는 액세스 로그를 생성할 수 있습니다. 또한 여러 웹 서버에서 사용하는 표준화된 형식이므로 다양한 로그 분석 플랫폼에서 CLF 형식의 로그 파일을 쉽게 사용할 수 있습니다.
Common Log Format으로 작성된 액세스 로그 레코드 예시는 다음과 같습니다.
127.0.0.1 - Scott [10/Dec/2019:13:55:36 -0700] "GET /server-status HTTP/1.1" 200 2326
각 필드는 다음을 나타냅니다.
- 127.0.0.1: 요청을 보낸 클라이언트의 IP 주소
- 하이픈: 클라이언트의 신원 정보. 이 필드는 하이픈으로 반환되는 경우가 많으며, Apache의 HTTP 서버 문서에서는 내부적으로 통제되는 네트워크 환경이 아닌 이상 이 특정 필드를 신뢰하지 말 것을 권장합니다.
- Scott: 요청자의 사용자 ID
- [10/Dec/2019:13:55:36 -0700]: 요청 날짜 및 시각
- “GET /server-status HTTP/1.1″: 요청 유형 및 요청된 리소스
- 200: HTTP 상태 코드
- 2326: 클라이언트에 반환된 객체의 크기
Combined Log Format(결합 로그 형식)
Combined Log Format은 Apache 액세스 로그에서 자주 사용되는 또 다른 형식입니다. 이 형식은 Common Log Format과 유사하지만, 로그 분석 및 디버깅 작업에 더 많은 정보를 제공하기 위해 몇 가지 추가 필드를 포함하고 있습니다. Combined Log Format으로 기록된 액세스 로그 레코드는 다음과 같습니다.
127.0.0.1 - Scott [10/Dec/2019:13:55:36 -0700] "GET /server-status HTTP/1.1" 200 2326 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
보시다시피 처음 일곱 개의 필드는 Common Log Format과 동일합니다. 나머지 필드는 다음과 같은 두 가지 추가 속성을 나타냅니다.
- “http://localhost/“: HTTP 리퍼러(referrer)로, 요청의 출처가 된 URL을 표시합니다.
- “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36”: 사용자 에이전트로, 클라이언트의 브라우저 세부 정보를 나타냅니다.
CustomLog 지시문
앞서 언급했듯이 Apache 액세스 로그는 Apache 구성 파일 내의 CustomLog 지시문을 통해 구성됩니다. CustomLog 지시문이 제공하는 유연성을 보여 주는 액세스 로그 설정 예시는 다음과 같습니다.
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/access.log combined
이 설정은 LogFormat 지시문을 사용하여 Combined log format을 정의한 뒤, CustomLog 지시문을 통해 액세스 로그의 위치와 형식을 지정합니다. 보시다시피 액세스 로그의 위치나 형식을 변경하는 과정은 매우 간단합니다. 또한 CustomLog 지시문은 이 외에도 여러 가지 기능을 제공합니다.
다중 액세스 로그
Apache HTTP 서버에서 다중 액세스 로그를 구성하려면 CustomLog 지시문을 추가로 사용하여 별도의 사용자 지정 액세스 로그 파일을 추가하면 됩니다.
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/access.log combined
CustomLog /var/log/apache2/agent_access.log agent
조건부 로그
또한 조건부로 액세스 로그를 기록할 수도 있습니다. 이는 특정 클라이언트와 관련된 기록을 제외하는 등 다양한 이유로 유용하게 사용할 수 있습니다. 일반적으로는 환경 변수(environment variable)를 설정하고 이를 ‘env’ 절을 통해 참조하는 방식으로 수행됩니다. 자세한 내용은 CustomLog 지시문에 대한 공식 문서를 참고하세요.
로그 로테이션과 파이프 로그
서버 로그는 저장 공간을 많이 차지하므로 보관된 로그 파일의 관리가 매우 중요합니다. 비교적 트래픽이 많은 Apache 서버에서는 로그 파일, 특히 액세스 로그가 빠르게 커질 수 있으므로 오래된 로그 파일을 정기적으로 이동하거나 삭제하는 절차를 마련하는 것이 중요합니다. 다행히 Apache HTTP 서버는 graceful restart와 piped log 프로세스를 사용하여 이를 수행할 수 있습니다.
Graceful restart를 사용하면 클라이언트 연결을 끊지 않고 새로운 액세스 로그 파일로 전환할 수 있습니다. 이 재시작 방식을 통해 Apache가 클라이언트 서비스 중단 없이 새 로그 파일을 열고 작성할 수 있으며, 오래된 로그 파일을 압축하거나 삭제하여 저장 공간을 절약할 수 있습니다.
반면 piped log 프로세스는 서버를 재시작하지 않고도 로그 로테이션을 수행할 수 있게 해줍니다. 예를 들어 Apache HTTP 서버에는 rotatelogs라는 프로그램이 포함되어 있습니다. 단순히 파일에 로그를 기록하는 대신, 파이프를 통해 액세스 로그 항목을 이 특정한 프로그램으로 전송할 수 있습니다. rotatelogs 프로그램은 시간 또는 파일 크기를 기준으로 로그를 조건부로 로테이션하는 옵션을 제공합니다.
Sumo Logic을 활용한 Apache 액세스 로그 분석
대량의 로그 데이터를 수집하는 것은 그 데이터를 효과적으로 관리하고 분석할 수 있을 때만 유용합니다. 적절히 수행할 경우 이러한 데이터로부터 웹 서버나 애플리케이션의 성능을 개선하는 데 활용할 수 있는 귀중한 인사이트를 확보할 수 있습니다.
Sumo Logic과의 통합을 통해 Apache 로그 파일 수집 과정을 간소화하고, Apache 액세스 로그를 기반으로 한 유용한 시각화 자료를 손쉽게 생성할 수 있습니다.
시작하기도 쉽습니다. Apache 액세스 로그에 대해 Sumo Logic 컬렉터와 로컬 파일 소스를 구성하면 몇 분 만에 설정을 완료하고 가동할 수 있습니다.
로그 관리 및 데이터 분석 프로세스를 개선해 보세요. 30일 무료 체험으로 지금 Sumo Logic을 경험해 보세요.



