AEM as a Cloud Service的記錄 logging-for-aem-as-a-cloud-service
AEM as a Cloud Service是客戶納入自訂程式碼的平台,可為他們的客戶群建立獨特的體驗。 有鑑於此,記錄服務對於在本機開發和雲端環境(尤其是AEM as a Cloud Service的開發環境)上除錯和瞭解程式碼執行至關重要。
AEM as a Cloud Service記錄設定和記錄層級是在組態檔中進行管理,這些組態檔會儲存為Git中AEM專案的一部分,並透過Cloud Manager部署為AEM專案的一部分。 登入AEM as a Cloud Service可分為三個邏輯集:
- AEM記錄,可在AEM應用程式層級執行記錄
- Apache HTTPD網頁伺服器/Dispatcher記錄,可在Publish層級上執行網頁伺服器和Dispatcher的記錄。
- CDN記錄(如其名稱所示)會在CDN上執行記錄。 此功能將於9月初逐步向客戶推出。
AEM記錄 aem-logging
AEM應用程式層級的記錄由三個記錄檔處理:
- AEM Java記錄,可呈現AEM應用程式的Java記錄陳述式。
- HTTP請求記錄,會記錄有關AEM所服務的HTTP請求及其回應的資訊
- HTTP存取記錄檔,會記錄摘要資訊和AEM所服務的HTTP要求
AEM Java記錄 aem-java-logging
AEM as a Cloud Service可讓您存取Java記錄陳述式。 AEM應用程式的開發人員應遵循一般Java記錄最佳實務,在下列記錄層級記錄有關自訂程式碼執行的相關陳述:
雖然Java記錄支援數個其他層級的記錄粒度,但AEM as a Cloud Service建議使用上述三個層級。
AEM記錄層級是透過OSGi設定根據環境型別設定,而這些設定又會提交至Git,並透過Cloud Manager部署至AEM as a Cloud Service。 因此,最好讓記錄陳述一致且為環境型別所熟知,以確保透過AEM作為Cloud Service提供的記錄可在最佳記錄層級使用,而不需要以更新的記錄層級設定重新部署應用程式。
範例記錄輸出
22.06.2020 18:33:30.120 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *ERROR* [qtp501076283-1809] io.prometheus.client.dropwizard.DropwizardExports Failed to get value from Gauge
22.06.2020 18:33:30.229 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [qtp501076283-1805] org.apache.sling.auth.core.impl.SlingAuthenticator getAnonymousResolver: Anonymous access not allowed by configuration - requesting credentials
22.06.2020 18:33:30.370 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [73.91.59.34 [1592850810364] GET /libs/granite/core/content/login.html HTTP/1.1] org.apache.sling.i18n.impl.JcrResourceBundle Finished loading 0 entries for 'en_US' (basename: <none>) in 4ms
22.06.2020 18:33:30.372 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *INFO* [FelixLogListener] org.apache.sling.i18n Service [5126, [java.util.ResourceBundle]] ServiceEvent REGISTERED
22.06.2020 18:33:30.372 [cm-p12345-e6789-aem-author-86657cbb55-xrnzq] *WARN* [73.91.59.34 [1592850810364] GET /libs/granite/core/content/login.html HTTP/1.1] libs.granite.core.components.login.login$jsp j_reason param value 'unknown' cannot be mapped to a valid reason message: ignoring
記錄格式
設定記錄器 configuration-loggers
AEM Java記錄檔會定義為OSGi設定,因此可使用執行模式資料夾鎖定特定AEM as a Cloud Service環境。
透過Sling LogManager Factory的OSGi設定為自訂Java套件設定Java記錄。 有三個支援的組態屬性:
org.apache.sling.commons.log.names
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套件)。
開發 development
/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"
}
測試 stage
/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"
}
生產 productiomn
/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-http-request-logging
AEM as a Cloud Service的HTTP請求記錄可讓您依時間順序深入分析向AEM發出的HTTP請求及其HTTP回應。 此記錄有助於瞭解向AEM發出的HTTP請求,以及這些請求被處理和回應的順序。
瞭解此記錄的關鍵在於透過其ID (以方括弧中的數值表示)對應HTTP請求和回應配對。 通常請求及其對應的回應會在記錄中於其他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]
記錄格式
設定記錄 configuring-the-log
無法在AEM as a Cloud Service中設定AEM HTTP請求記錄檔。
AEM HTTP存取記錄 aem-http-access-logging
AEM as a 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"
/libs/granite/ui/references/clientlibs/references.lc-5188e85840c529149e6cd29d94e74ad5-lc.min.css
"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存取記錄檔 configuring-the-http-access-log
無法在AEM as a Cloud Service中設定HTTP存取記錄檔。
Apache Web Server和Dispatcher記錄 apache-web-server-and-dispatcher-logging
AEM as a Cloud Service為Publish上的Apache Web Server和Dispatcher層提供三個記錄:
- Apache HTTPD Web Server存取記錄
- Apache HTTPD Web Server錯誤記錄
- Dispatcher記錄
這些記錄檔僅適用於Publish階層。
這組記錄提供存取AEM應用程式之前,AEM as a Cloud Service Publish層級的HTTP請求深入分析。 請務必瞭解這點,因為理想情況下,對Publish層級伺服器的大部分HTTP請求都是由Apache HTTPD Web Server和AEM Dispatcher快取的內容所提供,而且絕對不會連線至AEM應用程式本身。 因此,AEM的Java、要求或存取記錄檔中並沒有這些要求的記錄陳述式。
Apache HTTPD Web Server存取記錄檔 apache-httpd-web-server-access-log
Apache HTTP Web Server存取記錄檔會針對每個到Publish層級的Web伺服器/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 Web Server存取記錄檔 configuring-the-apache-httpd-webs-server-access-log
此記錄檔無法在AEM as a Cloud Service中設定。
Apache HTTPD Web Server錯誤記錄 apache-httpd-web-server-error-log
Apache HTTP Web Server錯誤記錄針對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 Web Server錯誤記錄 configuring-the-apache-httpd-web-server-error-log
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記錄檔 dispatcher-log
範例
[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錯誤記錄檔 configuring-the-dispatcher-error-log
Dispatcher記錄層級是由檔案conf.d/variables/global.var
中的變數DISP_LOG_LEVEL所定義。
它可以設定為error、warn、info、debug和trace1,預設值為warn。
雖然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記錄 cdn-log
AEM as a Cloud Service提供對CDN記錄的存取權,這些記錄可用於快取命中比率最佳化等使用案例。 無法自訂CDN記錄格式,且沒有將其設定為不同模式(例如info、warn或error)的概念。
範例
{
"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格式。
如何存取記錄檔 how-to-access-logs
雲端環境 cloud-environments
雲端服務的AEM as a Cloud Service記錄檔可透過以下方式存取:透過Cloud Manager介面下載,或使用Adobe I/O命令列介面在命令列追蹤記錄檔。 如需詳細資訊,請參閱Cloud Manager記錄檔案。
其他Publish地區的記錄 logs-for-additional-publish-regions
如果針對特定環境啟用了其他發佈區域,則可以從Cloud Manager下載每個區域的記錄,如上所述。
其他發佈區域的AEM記錄檔和Dispatcher記錄檔會在環境ID之後的前3個字母中指定區域,以下範例中的 nld2 即代表位於荷蘭的其他AEM發佈執行個體:
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 local-sdk
AEM as a Cloud Service SDK提供記錄檔以支援本機開發。
AEM記錄檔位於crx-quickstart/logs
資料夾,您可在此檢視下列記錄檔:
- AEM Java記錄檔:
error.log
- AEM HTTP要求記錄:
request.log
- AEM HTTP存取記錄檔:
access.log
Apache層記錄檔(包括Dispatcher)位於儲存Dispatcher的Docker容器中。 如需如何啟動Dispatcher的詳細資訊,請參閱Dispatcher檔案。
擷取記錄檔:
-
在命令列中,輸入
docker ps
以列出您的容器 -
若要登入容器,請輸入"
docker exec -it <container> /bin/sh
",其中<container>
是上一步驟的Dispatcher容器ID -
瀏覽至
/mnt/var/www/html
下的快取根目錄 -
記錄檔在
/etc/httpd/logs
之下 -
Inspect記錄:可在XYZ資料夾下存取記錄,您可在此檢視以下記錄:
- Apache HTTPD Web伺服器存取記錄檔 —
httpd_access.log
- Apache HTTPD Web伺服器錯誤記錄檔 —
httpd_error.log
- Dispatcher記錄 —
dispatcher.log
- Apache HTTPD Web伺服器存取記錄檔 —
記錄也直接列印到終端機輸出。 大多數情況下,這些記錄應為DEBUG,可通過在執行Docker時作為引數傳入Debug級別來完成。 例如:
DISP_LOG_LEVEL=Debug ./bin/docker_run.sh out docker.for.mac.localhost:4503 8080
偵錯生產和中繼 debugging-production-and-stage
在例外情況下,記錄層級需要變更以在中繼或生產環境中的更精細精細記錄。
雖然這是可能的,但需要變更Git中設定檔案的記錄層級(從Warn和Error到Debug),並執行部署至AEM as a Cloud Service以向環境註冊這些設定變更。
根據Debug所寫入的流量和記錄陳述式數量,這可能會導致對環境的效能造成不良影響,因此,建議對「中繼」和「生產」偵錯層級的變更如下:
- 謹慎行事,並且只在絕對必要時進行
- 已恢復至適當層級,並儘快重新部署
記錄轉送 log-forwarding
雖然可從Cloud Manager下載記錄檔,但有些組織認為將這些記錄檔轉送至偏好的記錄目的地較為有利。 AEM支援將記錄串流至以下目的地:
- Azure Blob儲存體
- Datadog
- HTTPD
- Elasticsearch (和OpenSearch)
- Splunk
如需有關如何設定此功能的詳細資訊,請參閱記錄轉送文章。