診断設定でログとメトリックを分析する

注意

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Java ✔️ C#

この記事の適用対象: ✔️ Basic レベルおよび Standard レベル ✔️ Enterprise レベル

この記事では、診断データを Azure Spring Apps で分析する方法について説明します。

Azure Spring Apps の診断機能を使用することで、次のいずれかのサービスを使用してログとメトリックを分析できます。

  • データが Azure Storage に書き込まれる Azure Log Analytics を使用する。 Log Analytics にログをエクスポートするときに遅延が発生します。
  • 監査や手動での検査に使用するために、ログをストレージ アカウントに保存する。 保持期間を指定できます (日数)。
  • サード パーティのサービスやカスタム分析ソリューションで取り込むために、ログをイベント ハブにストリーム配信する。

監視するログ カテゴリとメトリック カテゴリを選択します。

ヒント

ログをストリーミングするだけの場合は、 こちらの Azure CLI コマンドを確認してください。

ログ

ログ 説明
ApplicationConsole すべての顧客アプリケーションのコンソール ログ。
SystemLogs 現在、このカテゴリーでは Spring Cloud Config Server ログのみ。
IngressLogs すべての顧客のアプリケーションのイングレス ログ。アクセス ログのみ。
BuildLogs 各ビルド ステージのすべての顧客のアプリケーションのログを作成します

メトリック

メトリックの完全な一覧については、Azure Spring Apps のメトリックの「ユーザー メトリック オプション」セクションをご覧ください。

まず、これらのサービスのいずれかを有効にしてデータを受信します。 Log Analytics の構成については、「Azure Monitor で Log Analytics の使用を開始する」を参照してください。

診断設定の構成

  1. Azure portal で Azure Spring Apps インスタンスに移動します。

  2. [診断設定] オプションを選択し、 [診断設定の追加] を選択します。

  3. 設定の名前を入力してから、ログを送信する場所を選択します。 次の 3 つのオプションを自由に組み合わせて選択できます。

    • ストレージ アカウントへのアーカイブ
    • イベント ハブへのストリーム
    • Log Analytics への送信
  4. 監視するログ カテゴリとメトリック カテゴリを選択してから、保持期間 (日数) を指定します。 保持期間はストレージ アカウントにのみ適用されます。

  5. [保存] を選択します。

注意

ログまたはメトリックが生成されてから、ストレージ アカウント、イベント ハブ、または Log Analytics に表示されるまでに、最大 15 分のギャップがある場合があります。 Azure Spring Apps インスタンスが削除または移動された場合、この操作は診断設定リソースには連鎖しません。 診断設定リソースは、その親 (つまり、Azure Spring Apps インスタンス) に対して操作を行う前に手動で削除する必要があります。 そうしないと、新しい Azure Spring Apps インスタンスが、削除されたものと同じリソース ID でプロビジョニングされる場合、または Azure Spring Apps インスタンスが戻った場合は、以前の診断設定リソースが引き続きそれを拡張します。

ログとメトリックの表示

次の見出しで説明しているように、ログとメトリックを表示するにはさまざまな方法があります。

ログ ブレードの使用

  1. Azure portal で Azure Spring Apps インスタンスに移動します。

  2. [ログ検索] ウィンドウを開くには、 [ログ] を選択します。

  3. [テーブル] 検索ボックスでは、以下を行うことができます

    • ログを表示するには、次のような単純なクエリを入力します。
    AppPlatformLogsforSpring
    | limit 50
    
    • メトリックを表示するには、次のような単純なクエリを入力します。
    AzureMetrics
    | limit 50
    
  4. 検索結果を表示するには、 [実行] を選択します。

Log Analytics の使用

  1. Azure portal の左ウィンドウで、 [Log Analytics] を選択します。

  2. 診断設定を追加したときに選択した Log Analytics ワークスペースを選択します。

  3. [ログ検索] ウィンドウを開くには、 [ログ] を選択します。

  4. [テーブル] 検索ボックスでは、以下を行うことができます。

    • ログを表示するには、次のような単純なクエリを入力します。
    AppPlatformLogsforSpring
    | limit 50
    
    • メトリックを表示するには、次のような単純なクエリを入力します。
    AzureMetrics
    | limit 50
    
  5. 検索結果を表示するには、 [実行] を選択します。

  6. フィルター条件を設定することで、特定のアプリケーションまたはインスタンスのログを検索できます。

    AppPlatformLogsforSpring
    | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName"
    | limit 50
    

    Note

    == では大文字と小文字が区別されますが、=~ では区別されません。

Log Analytics で使用されるクエリ言語の詳細については、「Azure Monitor ログ クエリ」を参照してください。 一元化されたクライアントからすべての Log Analytics ログのクエリを実行する場合には、Azure Data Explorerに関するページを確認してください。

ストレージ アカウントを使用する

  1. Azure portal で、左側のナビゲーション パネルまたは検索ボックスからストレージ アカウントを検索します。
  2. 診断設定を追加したときに選択したストレージ アカウントを選択します。
  3. [BLOB コンテナー] ウィンドウを開くには、 [BLOB] を選択します。
  4. アプリケーション ログを確認するには、insights-logs-applicationconsole という名前のコンテナーを検索します。
  5. アプリケーション メトリックを確認するには、insights-metrics-pt1m という名前のコンテナーを検索します。

ストレージ アカウントへの診断情報の送信の詳細については、「Azure Storage への診断データの保存と表示」を参照してください。

イベント ハブを使用する

  1. Azure portal で、左側のナビゲーション パネルまたは検索ボックスから [Event Hubs] を検索します。

  2. 診断設定を追加したときに選択したイベント ハブを検索し、選択します。

  3. [イベント ハブの一覧] ウィンドウを開くには、 [イベント ハブ] を選択します。

  4. アプリケーション ログを確認するには、insights-logs-applicationconsole という名前のイベント ハブを検索します。

  5. アプリケーション メトリックを確認するには、insights-metrics-pt1m という名前のイベント ハブを検索します。

イベント ハブへの診断情報の送信の詳細については、「Event Hubs を利用してホット パスの Azure Diagnostics データをストリーム配信する」を参照してください。

ログの分析

Azure Log Analytics は Kusto エンジンを使用して実行されているので、ログに対してクエリを実行して分析することができます。 Kusto を使用したログのクエリの簡単な概要については、Log Analytics チュートリアルを確認してください。

アプリケーション ログには、アプリケーションの正常性やパフォーマンスなどに関する重要な情報と詳細ログが記載されています。 次のセクションでは、アプリケーションの現在の状態と過去の状態を理解するのに役立つ単純なクエリを示します。

Azure Spring Apps からアプリケーション ログを表示する

Azure Spring Apps からアプリケーション ログの一覧 (時間順に並べ替え、最新のログを最初に表示) を確認するには、次のクエリを実行します。

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| sort by TimeGenerated desc

エラーまたは例外を含むログ エントリを表示する

エラーまたは例外を示す並べ替えられていないログ エントリを確認するには、次のクエリを実行します。

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| where Log contains "error" or Log contains "exception"

このクエリを使用してエラーを検出するか、クエリ用語を変更して特定のエラー コードまたは例外を検索します。

過去 1 時間にアプリケーションから報告されたエラーと例外の数を表示する

過去 1 時間にアプリケーションによってログに記録されたエラーと例外の数を表示する円グラフを作成するには、次のクエリを実行します。

AppPlatformLogsforSpring
| where TimeGenerated > ago(1h)
| where Log contains "error" or Log contains "exception"
| summarize count_per_app = count() by AppName
| sort by count_per_app desc
| render piechart

特定のホストが含まれるイングレス ログ エントリを表示する

特定のホストによって生成されたログ エントリを確認するには、次のクエリを実行します。

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and Host == "ingress-asc.test.azuremicroservices.io" 
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

このクエリを使用して、この特定のホストのイングレス ログの応答 StatusRequestTime、および他のプロパティを検索します。

特定の requestId のイングレス ログ エントリを表示する

特定の requestId<request_ID> のログ エントリを確認するには、次のクエリを実行します。

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and ReqId == "<request_ID>" 
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

特定のアプリのビルド ログ エントリを表示する

ビルド処理中に特定のアプリのログ エントリを確認するには、次のクエリを実行します。

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>"
| sort by TimeGenerated

特定のビルド ステージで特定のアプリのビルド ログ エントリを表示する

特定のビルド ステージで特定のアプリのログ エントリを確認するには、次のクエリを実行します。 <app-name> のプレースホルダーはアプリケーションの名前に置き換えます。 <build-stage> プレースホルダーを preparedetectrestoreanalyzebuildexportcompletion のいずれかの値に置き換えます。これらは各ビルド プロセスのステージを表します。

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>" and ContainerName == "<build-stage>"
| sort by TimeGenerated

アプリケーション ログのクエリについての詳細情報

Azure Monitor では、Log Analytics を使用したアプリケーション ログのクエリが広範にサポートされています。 このサービスについて詳しくは、「Azure Monitor でログ クエリの使用を開始する」を参照してください。 アプリケーション ログを分析するクエリの作成の詳細については、「Azure Monitor のログ クエリの概要」を参照してください。

よく寄せられる質問 (FAQ)

複数行の Java スタック トレースを 1 行に変換するにはどうすればよいですか?

複数行のスタック トレースを 1 行に変換する回避策があります。 Java ログ出力を変更してスタック トレース メッセージを再フォーマットし、改行文字をトークンで置換できます。 Java Logback ライブラリを使用する場合、次のように %replace(%ex){'[\r\n]+', '\\n'}%nopex を追加することでスタック トレース メッセージを再フォーマットできます。

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                level: %level, message: "%logger{36}: %msg", exceptions: "%replace(%ex){'[\r\n]+', '\\n'}%nopex"%n
            </pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

その後、次のように、Log Analytics でトークンを改行文字に置き換えることができます。

AppPlatformLogsforSpring
| extend Log = array_strcat(split(Log, '\\n'), '\n')

場合によっては、他の Java ログ ライブラリに同じ方法を利用することもできます。

次の手順