구성 로거
AEM Java 로그는 OSGi 구성으로 정의되므로 실행 모드 폴더를 사용하여 특정 AEM as a Cloud Service 환경을 타깃팅합니다.
Sling LogManager 팩토리에 대한 OSGi 구성을 통해 사용자 지정 Java 패키지에 대한 Java 로깅을 구성합니다. 지원되는 구성 속성에는 세 가지가 있습니다.
OSGi 구성 속성 | 설명 |
---|---|
org.apache.sling.commons.log.names | 로그 문을 수집할 Java 패키지입니다. |
org.apache.sling.commons.log.level | org.apache.sling.commons.log.names 에서 지정한 Java 패키지를 기록할 로그 수준입니다. |
org.apache.sling.commons.log.file | 출력의 대상 지정: logs/error.log |
다른 LogManager OSGi 구성 속성을 변경하면 AEM as a Cloud Service에서 가용성 문제가 발생할 수 있습니다.
다음은 세 가지 AEM as a Cloud Service 환경 유형에 대한 권장 로깅 구성(com.example
의 자리 표시자 Java 패키지 사용)의 예입니다.
개발
/apps/my-app/config/org.apache.sling.commons.log.LogManager.factory.config-example.cfg.json
{
"org.apache.sling.commons.log.names": ["com.example"],
"org.apache.sling.commons.log.level": "debug"
"org.apache.sling.commons.log.file": "logs/error.log"
}
스테이지
/apps/my-app/config.stage/org.apache.sling.commons.log.LogManager.factory.config-example.cfg.json
{
"org.apache.sling.commons.log.names": ["com.example"],
"org.apache.sling.commons.log.level": "warn"
"org.apache.sling.commons.log.file": "logs/error.log"
}
프로덕션
/apps/my-app/config.prod/org.apache.sling.commons.log.LogManager.factory.config-example.cfg.json
{
"org.apache.sling.commons.log.names": ["com.example"],
"org.apache.sling.commons.log.level": "error"
"org.apache.sling.commons.log.file": "logs/error.log"
}
AEM HTTP 요청 로깅
AEM as a Cloud Service의 HTTP 요청 로깅을 통해 AEM에 수행된 HTTP 요청과 그 HTTP 응답을 시간 순서대로 파악할 수 있습니다. 이 로그는 AEM에 대한 HTTP 요청과 이 요청이 처리되고 응답하는 순서를 이해하는 데 유용합니다.
이 로그를 이해하는 핵심은 HTTP 요청 및 응답 쌍을 해당 ID로 매핑하는 것입니다(대괄호의 숫자 값으로 표시됨). 종종 요청 및 해당 응답에는 다른 HTTP 요청과 응답이 로그에 있는 요청 사이에 끼어있습니다.
예제 로그
29/Apr/2020:19:14:21 +0000 [137] > POST /conf/global/settings/dam/adminui-extension/metadataprofile/ HTTP/1.1 [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:22 +0000 [139] > GET /mnt/overlay/dam/gui/content/processingprofilepage/metadataprofiles/editor.html/conf/global/settings/dam/adminui-extension/metadataprofile/main HTTP/1.1 [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:21 +0000 [137] <- 201 text/html 111ms [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
...
29/Apr/2020:19:14:22 +0000 [139] <- 200 text/html;charset=utf-8 637ms [cm-p1234-e5678-aem-author-59555cb5b8-q7l9s]
로그 형식
로그 구성
AEM HTTP 요청 로그는 AEM as a Cloud Service에서 구성할 수 없습니다.
AEM HTTP 액세스 로깅
AEM as Cloud Service HTTP 액세스 로깅은 HTTP 요청을 시간 순서로 표시합니다. 각 로그 항목은 AEM에 액세스하는 HTTP 요청을 나타냅니다.
이 로그는 AEM에 대해 수행 중인 HTTP 요청, 함께 제공되는 HTTP 응답 상태 코드를 보고 성공하는 경우 및 HTTP 요청이 완료되는 데 걸린 시간을 빠르게 이해하는 데 유용합니다. 이 로그는 사용자별로 로그 항목을 필터링하여 특정 사용자의 활동을 디버깅하는 데에도 도움이 될 수 있습니다.
로그 출력 예
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/granite/ui/references/clientlibs/references.lc-5188e85840c529149e6cd29d94e74ad5-lc.min.css HTTP/1.1" 200 1141 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/dam/gui/coral/components/admin/customthumb/clientlibs.lc-60e4443805c37afa0c74b674b141f1df-lc.min.css HTTP/1.1" 200 809 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
cm-p1234-e26813-aem-author-59555cb5b8-8kgr2 - example@adobe.com 30/Apr/2020:17:37:14 +0000 "GET /libs/dam/gui/coral/components/admin/metadataeditor/clientlibs/metadataeditor.lc-4a2226d8232f8b7ab27d24820b9ddd64-lc.min.js HTTP/1.1" 200 7965 "https://author-p10711-e26813.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/en/images/example.jpeg&_charset_=utf8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
AEM as a Cloud Service 노드 ID | cm-p1235-e2644-aem-author-59555cb5b8-8kgr2 |
---|---|
클라이언트의 IP 주소 | - |
사용자 | myuser@adobe.com |
날짜 및 시간 | 2020년 4월 30일:17:37:14 +0000 |
HTTP 메서드 | GET |
URL | /libs/granite/ui/references/clientlibs/references.lc-5188e85840c529149e6cd29d94e74ad5-lc.min.css |
프로토콜 | HTTP/1.1 |
HTTP 응답 상태 | 200 |
응답 본문 크기(바이트) | 1141 |
레퍼러 | "https://author-p1234-e4444.adobeaemcloud.com/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html?item=/content/dam/wknd/en/adventures/surf-camp-in-costa-rica/adobestock_266405335.jpeg&_charset_=utf8" |
사용자 에이전트 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" |
HTTP 액세스 로그 구성
AEM as a Cloud Service에서는 HTTP 액세스 로그를 구성할 수 없습니다.
Apache 웹 서버 및 Dispatcher 로깅
AEM as a Cloud Service은 Publish에 Apache 웹 서버 및 Dispatcher 계층에 대해 세 개의 로그를 제공합니다.
- Apache HTTPD 웹 서버 액세스 로그
- Apache HTTPD 웹 서버 오류 로그
- Dispatcher 로그
이러한 로그는 Publish 계층에서만 사용할 수 있습니다.
이 로그 세트는 해당 요청이 AEM 애플리케이션에 도달하기 전에 AEM as a Cloud Service Publish 계층에 대한 HTTP 요청에 대한 통찰력을 제공합니다. 이는 이상적으로 Publish 계층 서버에 대한 대부분의 HTTP 요청이 Apache HTTPD 웹 서버 및 AEM Dispatcher에 의해 캐시된 콘텐츠에서 제공되므로 AEM 애플리케이션 자체에는 절대 도달하지 않는다는 것을 이해하는 데 중요합니다. 따라서 AEM의 Java, 요청 또는 액세스 로그에는 이러한 요청에 대한 로그 구문이 없습니다.
Apache HTTPD 웹 서버 액세스 로그
Apache HTTP 웹 서버 액세스 로그는 Publish 계층의 웹 서버/Dispatcher에 도달하는 각 HTTP 요청에 대한 문을 제공합니다. 업스트림 CDN에서 제공되는 요청은 이러한 로그에 반영되지 않습니다.
공식 Apache 설명서에서 오류 로그 형식에 대한 정보를 참조하십시오.
로그 출력 예
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:41 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/favicons/favicon-32.png HTTP/1.1" 200 715 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:41 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/favicons/favicon-512.png HTTP/1.1" 200 9631 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
cm-p1234-e5678-aem-publish-b86c6b466-qpfvp - - 17/Jul/2020:09:14:42 +0000 "GET /etc.clientlibs/wknd/clientlibs/clientlib-site/resources/images/country-flags/US.svg HTTP/1.1" 200 810 "https://publish-p6902-e30226.adobeaemcloud.com/content/wknd/us/en.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0"
로그 형식
Apache HTTPD 웹 서버 액세스 로그 구성
이 로그는 AEM as a Cloud Service에서 구성할 수 없습니다.
Apache HTTPD 웹 서버 오류 로그
Apache HTTP 웹 서버 오류 로그는 Publish 계층의 웹 서버/Dispatcher에 있는 각 오류에 대한 문을 제공합니다.
공식 Apache 설명서에서 오류 로그 형식에 대한 정보를 참조하십시오.
로그 출력 예
Fri Jul 17 02:19:48.093820 2020 [mpm_worker:notice] [pid 1:tid 140272153361288] [cm-p1234-e30226-aem-publish-b86c6b466-b9427] AH00292: Apache/2.4.43 (Unix) Communique/4.3.4-20200424 mod_qos/11.63 configured -- resuming normal operations
Fri Jul 17 02:19:48.093874 2020 [core:notice] [pid 1:tid 140272153361288] [cm-p1234-e30226-aem-publish-b86c6b466-b9427] AH00094: Command line: 'httpd -d /etc/httpd -f /etc/httpd/conf/httpd.conf -D FOREGROUND -D ENVIRONMENT_PROD'
Fri Jul 17 02:29:34.517189 2020 [mpm_worker:notice] [pid 1:tid 140293638175624] [cm-p1234-e30226-aem-publish-b496f64bf-5vckp] AH00295: caught SIGTERM, shutting down
로그 형식
Apache HTTPD 웹 서버 오류 로그 구성
mod_rewrite 로그 수준은 conf.d/variables/global.var
파일의 REWRITE_LOG_LEVEL 변수에 의해 정의됩니다.
error, warn, info, debug 및 trace1 - trace8로 설정할 수 있으며 기본값은 warn입니다. RewriteRules를 디버깅하려면 로그 수준을 trace2로 높이는 것이 좋습니다. Dispatcher SDK를 사용하여 규칙 다시 작성을 디버깅하는 것이 좋습니다. AEM as a Cloud Service의 최대 로그 수준은 debug
입니다. 따라서 현재 클라우드에서 재작성 규칙을 디버깅하는 것이 효과적으로 불가능합니다.
자세한 내용은 mod_rewrite 모듈 설명서를 참조하세요.
환경당 로그 수준을 설정하려면 아래에 설명된 대로 global.var 파일에서 적절한 조건부 분기를 사용합니다.
Define REWRITE_LOG_LEVEL debug
<IfDefine ENVIRONMENT_STAGE>
...
Define REWRITE_LOG_LEVEL warn
...
</IfDefine>
<IfDefine ENVIRONMENT_PROD>
...
Define REWRITE_LOG_LEVEL error
...
</IfDefine>
Dispatcher 로그
예
[17/Jul/2020:23:48:06 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures.html" - 475ms [publishfarm/0] [action miss] "publish-p12904-e25628.adobeaemcloud.com"
[17/Jul/2020:23:48:07 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures/climbing-new-zealand/_jcr_content/root/responsivegrid/carousel/item_1571266094599.coreimg.jpeg/1473680817282/sport-climbing.jpeg" 302 10ms [publishfarm/0] [action none] "publish-p12904-e25628.adobeaemcloud.com"
[17/Jul/2020:23:48:07 +0000] [I] [cm-p12904-e25628-aem-publish-6c5f7c9dbd-mzcvr] "GET /content/wknd/us/en/adventures/ski-touring-mont-blanc/_jcr_content/root/responsivegrid/carousel/item_1571168419252.coreimg.jpeg/1572047288089/adobestock-238230356.jpeg" 302 11ms [publishfarm/0] [action none] "publish-p12904-e25628.adobeaemcloud.com"
로그 형식
Dispatcher 오류 로그 구성
Dispatcher 로그 수준은 conf.d/variables/global.var
파일의 DISP_LOG_LEVEL 변수로 정의됩니다.
기본값이 warn인 error, warn, info, debug 및 trace1로 설정할 수 있습니다.
Dispatcher AEM as a Cloud Service 로깅은 다른 여러 수준의 로깅 세부기간을 지원하지만 아래에 설명된 수준을 사용하는 것이 좋습니다.
환경별로 로그 수준을 설정하려면 아래 설명된 대로 global.var
파일에서 적절한 조건부 분기를 사용하십시오.
Define DISP_LOG_LEVEL debug
<IfDefine ENVIRONMENT_STAGE>
...
Define DISP_LOG_LEVEL warn
...
</IfDefine>
<IfDefine ENVIRONMENT_PROD>
...
Define DISP_LOG_LEVEL error
...
</IfDefine>
CDN 로그
AEM as a Cloud Service은 캐시 적중률 최적화를 포함한 사용 사례에 유용한 CDN 로그에 대한 액세스를 제공합니다. CDN 로그 형식은 사용자 지정할 수 없으며 정보, 경고 또는 오류와 같은 다양한 모드로 설정하는 개념이 없습니다.
예
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/content/hello.png",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 200,
"res_age": 0,
"pop": "PAR",
"rules": "match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked"
}
로그 형식
CDN 로그는 json 형식을 준수한다는 점에서 다른 로그와 구별됩니다.
필드 이름 | 설명 |
---|---|
timestamp | TLS 종료 후 요청이 시작된 시간입니다. |
ttfb | Time To First Byte(첫 번째 바이트까지의 시간) 의 약어입니다. 요청이 시작된 후 응답 본문의 스트리밍이 시작되기까지의 시간 간격입니다. |
cli_ip | 클라이언트 IP 주소입니다. |
cli_country | 클라이언트 국가의 2글자 ISO 3166-1 Alpha-2 국가 코드입니다. |
rid | 요청을 고유하게 식별하는 데 사용되는 요청 헤더의 값입니다. |
req_ua | 해당 HTTP 요청을 담당하는 사용자 에이전트입니다. |
host | 요청이 의도한 대상 기관입니다. |
url | 쿼리 매개변수를 포함한 전체 경로입니다. |
메서드 | “GET” 또는 “POST”와 같은 클라이언트에서 전송한 HTTP 메서드입니다. |
res_ctype | 리소스의 원래 미디어 유형을 나타내는 데 사용되는 콘텐츠 유형입니다. |
cache | 캐시의 상태입니다. 가능한 값은 HIT, MISS 또는 PASS입니다. |
상태 | HTTP 상태 코드입니다(정수 값). |
res_age | 모든 노드에서 응답이 캐시되는 데 소요되는 시간(초)입니다. |
pop | CDN 캐시 서버의 데이터센터입니다. |
rules | 일치하는 트래픽 필터 규칙 및 WAF 플래그의 이름으로, 일치하는 결과 차단 여부도 나타냅니다. 일치하는 규칙이 없으면 비어 있습니다. |
로그 액세스 방법
클라우드 환경
클라우드 서비스용 AEM as a Cloud Service 로그는 Cloud Manager 인터페이스를 통해 다운로드하거나 Adobe I/O 명령줄 인터페이스를 사용하여 명령줄에서 로그를 테일링하여 액세스할 수 있습니다. 자세한 내용은 Cloud Manager 로깅 설명서를 참조하십시오.
추가 Publish 지역 로그
특정 환경에 대해 추가 게시 영역이 활성화된 경우 위에서 언급한 대로 Cloud Manager에서 각 영역에 대한 로그를 다운로드할 수 있습니다.
추가 게시 영역에 대한 AEM 로그 및 Dispatcher 로그는 아래 샘플에서 nld2(네덜란드에 있는 추가 AEM 게시 인스턴스 참조)로 예시된 대로 환경 ID 다음의 처음 3문자로 영역을 지정합니다.
cm-p7613-e12700-nld2-aem-publish-bcbb77549-5qmmt 127.0.0.1 - 07/Nov/2023:23:57:11 +0000 "HEAD /libs/granite/security/currentuser.json HTTP/1.1" 200 - "-" "Java/11.0.19"
로컬 SDK
AEM as a Cloud Service SDK는 로컬 개발을 지원하기 위해 로그 파일을 제공합니다.
AEM 로그는 다음 로그를 볼 수 있는 crx-quickstart/logs
폴더에 있습니다.
- AEM Java 로그:
error.log
- AEM HTTP 요청 로그:
request.log
- AEM HTTP 액세스 로그:
access.log
Dispatcher를 포함한 Apache 계층 로그는 Dispatcher이 보관된 도커 컨테이너에 있습니다. Dispatcher 시작 방법에 대한 자세한 내용은 Dispatcher 설명서를 참조하세요.
로그를 검색하려면 다음을 수행하십시오.
-
명령줄에
docker ps
을(를) 입력하여 컨테이너를 나열합니다. -
컨테이너에 로그인하려면 "
docker exec -it <container> /bin/sh
"을(를) 입력하십시오. 여기서<container>
은(는) 이전 단계의 Dispatcher 컨테이너 ID입니다. -
/mnt/var/www/html
아래의 캐시 루트로 이동 -
로그가
/etc/httpd/logs
아래에 있습니다. -
Inspect 로그: XYZ 폴더 아래에서 액세스할 수 있으며 여기에서 다음 로그를 볼 수 있습니다.
- Apache HTTPD 웹 서버 액세스 로그 -
httpd_access.log
- Apache HTTPD 웹 서버 오류 로그 -
httpd_error.log
- Dispatcher 로그 -
dispatcher.log
- Apache HTTPD 웹 서버 액세스 로그 -
로그 또한 터미널 출력으로 직접 인쇄됩니다. 대부분의 경우 이러한 로그는 DEBUG여야 하며, 이는 Docker를 실행할 때 디버그 수준을 매개 변수로 전달하여 수행할 수 있습니다. 예:
DISP_LOG_LEVEL=Debug ./bin/docker_run.sh out docker.for.mac.localhost:4503 8080
프로덕션 및 스테이지 디버깅
예외적인 경우 스테이지 또는 프로덕션 환경에서 더 세분화된 단위로 기록하려면 로그 수준을 변경해야 합니다.
이 작업은 가능하지만 Git의 구성 파일에 있는 로그 수준을 경고 및 오류에서 디버그로 변경하고, 이러한 구성 변경 사항을 환경에 등록하기 위해 AEM as a Cloud Service에 배포를 수행해야 합니다.
트래픽과 Debug에서 작성한 로그 구문의 양에 따라 환경에 부정적인 성능 영향을 줄 수 있으므로 스테이지 및 프로덕션 디버그 수준의 변경 사항은 다음과 같은 것이 좋습니다.
- 신중하게, 그리고 절대적으로 필요한 경우에만 수행
- 적절한 수준으로 되돌리고 가능한 한 빨리 다시 배포합니다.
로그 전달
Cloud Manager에서 로그를 다운로드할 수 있지만 일부 조직에서는 이러한 로그를 기본 로깅 대상에 전달하는 것이 좋습니다. AEM은 다음 대상에 대한 스트리밍 로그를 지원합니다.
- Azure Blob 저장소
- Datadog
- HTTPD
- Elasticsearch(및 OpenSearch)
- 스플렁크
이 기능을 구성하는 방법에 대한 자세한 내용은 로그 전달 문서를 참조하십시오.