診断設定でログとメトリックを分析する
Note
Basic、Standard、Enterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象: ✔️ Java ✔️ C#
この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise
この記事では、診断データを Azure Spring Apps で分析する方法について説明します。
Azure Spring Apps の診断機能を使用することで、次のいずれかのサービスを使用してログとメトリックを分析できます。
- Azure Log Analytics を使用します。 Log Analytics にログをエクスポートするときに遅延が発生します。
- 監査や手動での検査に使用するために、ログをストレージ アカウントに保存する。 保持期間を指定できます (日数)。
- サード パーティのサービスやカスタム分析ソリューションで取り込むために、ログをイベント ハブにストリーム配信する。
監視するログ カテゴリとメトリック カテゴリを選択します。
ヒント
ログをストリーミングするだけの場合は、Azure CLI コマンドである az spring app logs を使用できます。
ログ
ログ | 説明 |
---|---|
ApplicationConsole | すべての顧客アプリケーションのコンソール ログ。 |
SystemLogs | 使用可能な LogType 値は、ConfigServer (Basic/Standard のみ)、ServiceRegistry (すべてのプラン)、ApiPortal (Enterprise プランのみ)、ApplicationConfigurationService (Enterprise プランのみ)、SpringCloudGateway (Enterprise プランのみ)、SpringCloudGatewayOperator (Enterprise プランのみ) です |
IngressLogs | すべての顧客のアプリケーションのイングレス ログ。アクセス ログのみ。 |
BuildLogs | 各ビルド ステージのすべての顧客のアプリケーションのログを作成します。 |
Note
潜在的な資格情報リークからアプリケーションを保護するには、資格情報またはその他の機密情報を含むすべてのログ コンテンツを ***
でマスクします。 たとえば、次のパターンを含むログ コンテンツは機密情報として処理され、対応する値はマスクされます。
- 後ろに
:
または=
が続くdbpass
、password
、key
、secret
、sig
、signature
。 これらのパターンは通常、URL パラメーターとペイロード ダンプ似に出現します。 たとえば、https://somestorage.blob.core.windows.net?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=xxxxxxxxxxxxxx
はhttps://somestorage.blob.core.windows.net?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=***
になります - 次の形式でエンコードされた文字列のような JWT トークン:
eyJxxxxxx.eyJxxxxxx
ログ内にマスクされた値がある場合は、資格情報リークを排除するためにアプリケーション コードを必ず更新してください。
メトリック
メトリックの完全な一覧については、Azure Spring Apps のメトリックの「ユーザー メトリック オプション」セクションをご覧ください。
まず、これらのサービスのいずれかを有効にしてデータを受信します。 Log Analytics の構成については、「Azure Monitor で Log Analytics の使用を開始する」を参照してください。
診断設定の構成
Azure portal で Azure Spring Apps インスタンスに移動します。
[診断設定] オプションを選択し、[診断設定の追加] を選択します。
設定の名前を入力してから、ログを送信する場所を選択します。 次のオプションを任意の組み合わせで選択できます。
- ストレージ アカウントへのアーカイブ
- イベント ハブへのストリーム
- Log Analytics への送信
- パートナー ソリューションへの送信
監視するログ カテゴリとメトリック カテゴリを選択してから、保持期間 (日数) を指定します。 保持期間はストレージ アカウントにのみ適用されます。
[保存] を選択します。
Note
ログまたはメトリックが生成されてから、ストレージ アカウント、イベント ハブ、または Log Analytics に表示されるまでに、最大 15 分のギャップがある場合があります。 Azure Spring Apps インスタンスが削除または移動された場合、この操作は診断設定リソースには連鎖しません。 診断設定リソースは、その親 (つまり、Azure Spring Apps インスタンス) に対して操作を行う前に手動で削除する必要があります。 そうしないと、新しい Azure Spring Apps インスタンスが、削除されたものと同じリソース ID でプロビジョニングされる場合、または Azure Spring Apps インスタンスが戻った場合は、以前の診断設定リソースが引き続きそれを拡張します。
ログとメトリックの表示
次の見出しで説明しているように、ログとメトリックを表示するにはさまざまな方法があります。
[ログ] ペインを使用する
Azure portal で Azure Spring Apps インスタンスに移動します。
[ログ検索] ウィンドウを開くには、 [ログ] を選択します。
[テーブル] 検索ボックスでは、次のクエリのいずれかを使用します。
ログを表示するには、次の例のようなクエリを入力します。
AppPlatformLogsforSpring | limit 50
メトリックを表示するには、次の例のようなクエリを入力します。
AzureMetrics | limit 50
検索結果を表示するには、 [実行] を選択します。
Log Analytics の使用
Azure portal の左ウィンドウで、[Log Analytics] を選択します。
診断設定を追加したときに選択した Log Analytics ワークスペースを選択します。
[ログ検索] ウィンドウを開くには、 [ログ] を選択します。
[テーブル] 検索ボックスでは、次のクエリのいずれかを使用します。
ログを表示するには、次の例のようなクエリを入力します。
AppPlatformLogsforSpring | limit 50
メトリックを表示するには、次の例のようなクエリを入力します。
AzureMetrics | limit 50
検索結果を表示するには、 [実行] を選択します。
次の例に示すように、フィルター条件を設定すると、特定のアプリケーションまたはインスタンスのログを検索できます。
AppPlatformLogsforSpring | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName" | limit 50
Note
==
では大文字と小文字が区別されますが、=~
では区別されません。
Log Analytics で使用されるクエリ言語の詳細については、「Azure Monitor ログ クエリ」を参照してください。 一元化されたクライアントからすべての Log Analytics ログのクエリを実行する場合には、Azure Data Explorerに関するページを確認してください。
ストレージ アカウントを使用する
- Azure portal で、左側のナビゲーション パネルまたは検索ボックスからストレージ アカウントを検索します。
- 診断設定を追加したときに選択したストレージ アカウントを選択します。
- [BLOB コンテナー] ウィンドウを開くには、[BLOB] を選択します。
- アプリケーション ログを確認するには、insights-logs-applicationconsole という名前のコンテナーを検索します。
- アプリケーション メトリックを確認するには、insights-metrics-pt1m という名前のコンテナーを検索します。
ストレージ アカウントへの診断情報の送信の詳細については、「Azure Storage への診断データの保存と表示」を参照してください。
イベント ハブを使用する
Azure portal で、左側のナビゲーション パネルまたは検索ボックスから [Event Hubs] を検索します。
診断設定を追加したときに選択したイベント ハブを検索し、選択します。
[イベント ハブの一覧] ウィンドウを開くには、[イベント ハブ] を選択します。
アプリケーション ログを確認するには、insights-logs-applicationconsole という名前のイベント ハブを検索します。
アプリケーション メトリックを確認するには、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
このクエリを使用して、この特定のホストのイングレス ログの応答 Status
、RequestTime
、および他のプロパティを検索します。
特定の 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>
プレースホルダーを prepare
、detect
、restore
、analyze
、build
、export
、completion
のいずれかの値に置き換えます。これらは各ビルド プロセスのステージを表します。
AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>" and ContainerName == "<build-stage>"
| sort by TimeGenerated
Enterprise プランで VMware Spring Cloud Gateway ログを表示する
Enterprise プランの VMware Spring Cloud Gateway ログのログ エントリを確認するには、次のクエリを実行します。
AppPlatformSystemLogs
| where LogType == "SpringCloudGateway"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId
| limit 100
Spring Cloud Gateway Operator という名前の別のコンポーネントは、Spring Cloud Gateway とルートのライフサイクルを制御します。 ルートが有効にならない問題が発生した場合は、このコンポーネントのログを確認してください。 Enterprise プランの VMware Spring Cloud Gateway Operator のログ エントリを確認するには、次のクエリを実行します。
AppPlatformSystemLogs
| where LogType == "SpringCloudGatewayOperator"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId
| limit 100
Enterprise プランで Tanzu ログのアプリケーション構成サービスを表示する
Enterprise プランで Application Configuration Service for Tanzu ログのログ エントリを確認するには、次のクエリを実行します。
AppPlatformSystemLogs
| where LogType == "ApplicationConfigurationService"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId
| limit 100
Enterprise プランで Tanzu Service Registry ログを表示する
Enterprise プランの Tanzu Service Registry ログのログ エントリを確認するには、次のクエリを実行します。
AppPlatformSystemLogs
| where LogType == "ServiceRegistry"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId
| limit 100
Enterprise プランで VMware Tanzu ログの API ポータルを表示する
Enterprise プランの VMware Tanzu ログの API ポータルのログ エントリを確認するには、次のクエリを実行します。
AppPlatformSystemLogs
| where LogType == "ApiPortal"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId
| limit 100
アプリケーション ログのクエリについての詳細情報
Azure Monitor では、Log Analytics を使用したアプリケーション ログのクエリが広範にサポートされています。 このサービスについて詳しくは、「Azure Monitor でログ クエリの使用を開始する」を参照してください。 アプリケーション ログを分析するクエリの作成の詳細については、「Azure Monitor のログ クエリの概要」を参照してください。
Azure portal の便利なエントリ ポイント
次の手順を使用して、定義済みのクエリを含む [ログ分析] ペインに移動します。
Azure Spring Apps サービス インスタンスの [概要] ページに移動し、ナビゲーション ペインの [アプリ] を選択します。
ターゲット アプリを見つけ、コンテキスト メニューを選択します。
ポップアップ コンテキスト メニューで、[ログを表示する] を選択します。
このアクションでは、定義済みのクエリを含む [ログ分析] ペインに移動します。
ログを表示するためのエントリ ポイントは他にもあります。 また、ビルド サービスやサービス レジストリなどのマネージド コンポーネントの [ログを表示する] ボタンもあります。
よく寄せられる質問 (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 ログ ライブラリに同じ方法を利用することもできます。