ログを使用した AEM as a Cloud Service のデバッグ

ログは、AEM as a Cloud Service で AEM アプリケーションをデバッグする最前線として機能しますが、デプロイされる AEM アプリケーションでの適切なログ記録に依存します。

特定の環境の AEM サービス(オーサー、パブリッシュ/パブリッシュ Dispatcher)のすべてのログアクティビティは、そのサービス内の別のポッドがログステートメントを生成する場合でも、1 つのログファイルに統合されます。

ポッド ID は各ログステートメントに提供され、ログステートメントのフィルタリングや照合を可能にします。ポッド ID の形式は次のとおりです。

  • cm-p<PROGRAM ID>-e<ENVIRONMENT ID>-aem-<author|publish>-<POD NAME>
  • 例:cm-p12345-e56789-aem-author-abcdefabde-98765

カスタムログファイル

AEM as a Cloud Services はカスタムログファイルをサポートしていませんが、カスタムログはサポートしています。

Java ログを AEM as a Cloud Service で(Cloud Manager または Adobe I/O CLI 経由で)使用できるようにするには、カスタムログステートメントに error.log を書き込む必要があります。example.log などのカスタム名のログに書き込まれたログは、AEM as a Cloud Service からアクセスできません。

ログは、アプリケーションの org.apache.sling.commons.log.LogManager.factory.config~example.cfg.json ファイルの Sling LogManager OSGi 設定プロパティを使用して、error.log に書き込むことができます。

{
   ...
   "org.apache.sling.commons.log.file": "logs/error.log"
   ...
}

AEM オーサーとパブリッシュサービスのログ

AEM オーサーサービスとパブリッシュサービスの両方で、AEM ランタイムサーバーログが提供されています。

  • aemerror は Java エラーログです(AEM SDK ローカルクイックスタートの /crx-quickstart/logs/error.log にあります)。以下は、環境タイプごとのカスタムロガーの推奨ログレベルです。

    • 開発:DEBUG
    • ステージ:WARN
    • 実稼動:ERROR
  • aemaccess で、AEM サービスへの HTTP リクエストと詳細を表示します

  • aemrequest で、AEM サービスに対して行われた HTTP リクエストと、それに対応する HTTP 応答を表示します

AEM パブリッシュの Dispatcher ログ

Apache web サーバーと Dispatcher ログは AEM パブリッシュ層にのみ存在し、AEM オーサー層には存在しないので、AEM パブリッシュの Dispatcher でのみ提供されます。

  • httpdaccess で、AEM サービスの Apache web サーバー/Dispatcher に対して行われた HTTP リクエストを表示します。

  • httperror で、Apache web サーバーからのログメッセージを表示し、mod_rewrite などのサポートされている Apache モジュールのデバッグに活用できます。

    • 開発:DEBUG
    • ステージ:WARN
    • 実稼動:ERROR
  • aemdispatcher で、キャッシュメッセージからのフィルタリングや処理を含む、Dispatcher モジュールからのログメッセージを表示します。

    • 開発:DEBUG
    • ステージ:WARN
    • 実稼動:ERROR

Cloud Manager cloud-manager

Adobe Cloud Manager では、環境の「ログをダウンロード」アクションを使用して、日別にログをダウンロードできます。

Cloud Manager - ログをダウンロード

これらのログは、任意のログ分析ツールを使用してダウンロードし、調査できます。

Adobe I/O CLI と Cloud Manager プラグイン aio

Adobe Cloud Manager では、Adobe I/O CLI 用の Cloud Manager プラグインを使用して、Adobe I/O CLI 経由で AEM as a Cloud Service ログにアクセスすることができます。

まず、Cloud Manager プラグインを使用して Adobe I/O を設定します

関連するプログラム ID と環境 ID が識別されていることを確認し、list-available-log-options を使用して、ログのテールまたはダウンロードに使用するログオプションを表示します。

$ aio cloudmanager:list-programs
Program Id Name      Enabled
14304      Program 1 true
11454      Program 2 true
11502      Program 3 true

$ aio config:set cloudmanager_programid <PROGRAM ID>

$ aio cloudmanager:list-environments
Environment Id Name            Type  Description
22295          program-3-dev   dev
22310          program-3-prod  prod
22294          program-3-stage stage

$ aio cloudmanager:list-available-log-options <ENVIRONMENT ID>
Environment Id Service    Name
22295          author     aemaccess
22295          author     aemerror
22295          author     aemrequest
22295          publish    aemaccess
22295          publish    aemerror
22295          publish    aemrequest
22295          dispatcher httpdaccess
22295          dispatcher httpderror
22295          dispatcher aemdispatcher

ログのテール aio-cli-tail-logs

Adobe I/O CLI では、tail-logs コマンドを使用して、AEM as a Cloud Service からリアルタイムでログをテールすることができます。追跡は、AEM as a Cloud Service 環境でアクションが実行されるときに、リアルタイムのログアクティビティを監視するのに役立ちます。

$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:tail-logs <ENVIRONMENT ID> <SERVICE> <NAME>

grep などのその他のコマンドラインツールは、tail-logs と組み合わせて使用することができ、関心のあるログステートメントの分離に役立ちます。次に例を示します。

$ aio cloudmanager:tail-logs 12345 author | grep com.example.MySlingModel

com.example.MySlingModel から生成されたログステートメント、またはその文字列を含むログステートメントのみを表示します。

ログのダウンロード aio-cli-download-logs

Adobe I/O CLI では、download-logs コマンドを使用して AEM as a Cloud Service からログをダウンロードすることができます。これにより、Cloud Manager web UI からログをダウンロードした場合と同じ結果が得られますが、download-logs コマンドは、要求されたログの日数に基づいて、日をまたいでログを統合します。

$ aio config:set cloudmanager_programid <PROGRAM ID>
$ aio cloudmanager:download-logs <ENVIRONMENT> <SERVICE> <NAME> <DAYS>

ログについて

AEM as a Cloud Service のログには、ログステートメントを書き込む複数のポッドがあります。複数の AEM インスタンスが同じログファイルに書き込むため、分析方法を理解し、デバッグ中のノイズを減らす必要があります。説明のために、次の aemerror ログスニペットを使用します。

01.01.2020 12:00:00.000 [cm-p12345-e56789-aem-author-abcdefg-1111] *DEBUG* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Preparing to collect resources
01.01.2020 12:00:01.002 [cm-p12345-e56789-aem-author-abcdefg-2222] *WARN*  [qtp40782847611-87] com.example.services.impl.ExampleServiceImpl Unable to resolve resource [ /content/example ] to a resource. Aborting.
01.01.2020 12:00:02.003 [cm-p12345-e56789-aem-author-abcdefg-1111] *ERROR* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Unable to collect any resources

日時の後のデータポイントであるポッド ID を使用して、ログをサービス内のポッドまたは AEM インスタンスで照合し、コードの実行を容易にトレースして理解できます。

Pod cm-p12345-e56789-aem-author-abcdefg-1111

01.01.2020 12:00:00.000 [cm-p12345-e56789-aem-author-abcdefg-1111] *DEBUG* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Preparing to collect resources
01.01.2020 12:00:02.003 [cm-p12345-e56789-aem-author-abcdefg-1111] *ERROR* [qtp2078364989-269] com.example.components.impl.ExampleModelImpl Unable to collect any resources

Pod cm-p12345-e56789-aem-author-abcdefg-2222

01.01.2020 12:00:01.002 [cm-p12345-e56789-aem-author-abcdefg-2222] *WARN*  [qtp2078364989-269] com.example.services.impl.ExampleServiceImpl Unable to resolve resource [ /content/example ] to a resource. Aborting.

推奨ログレベル log-levels

AEM as a Cloud Service 環境ごとのログレベルに関するアドビの一般的なガイダンスは次のとおりです。

  • ローカル開発(AEM SDK):DEBUG
  • 開発:DEBUG
  • ステージ:WARN
  • 実稼動:ERROR

環境のタイプごとに最適なログレベルの設定は AEM as a Cloud Service で行われ、ログレベルはコードで維持管理されます。

  • Java ログの設定は、OSGi 設定で維持管理されます。
  • Dispatcher プロジェクト内の Apache web サーバーおよび Dispatcher ログレベル

そのため、変更するにはデプロイメントが必要です。

Java ログレベルを設定する環境固有の変数

環境ごとに静的な既知の Java ログレベルを設定する代わりに、AEM as Cloud Service の環境固有の変数を使用してログレベルをパラメーター化し、Adobe I/O CLI と Cloud Manager プラグインから値を動的に変更することができます。

これには、環境固有の変数プレースホルダーを使用するようにログ OSGi 設定を更新する必要があります。 ログレベルのデフォルト値は、アドビのレコメンデーション値に従って設定する必要があります。次に例を示します。

/apps/example/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": "$[env:LOG_LEVEL;default=DEBUG]"
    ...
}

このアプローチでは、次のマイナス面を考慮する必要があります。

  • 使用できる環境変数の数は限られており、ログレベルを管理する変数を作成すると、その変数が使用されます。
  • 環境変数は、プログラムで Cloud ManagerAdobe I/O CLICloud Manager HTTP API を介して管理できます。
  • 環境変数の変更は、サポートされているツールで手動でリセットする必要があります。実稼動などのトラフィックが多い環境を詳細度の低いログレベルにリセットし忘れると、ログが氾濫し、AEM のパフォーマンスに影響を与える可能性があります。

環境固有の変数は Apache web サーバーや Dispatcher のログ設定には機能しません。これらが OSGi 設定を通して行われないからです。

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69