Azure Spring Apps のアプリケーション コンソール ログをリアルタイムでストリーミングする

Note

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

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

この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise

この記事では、Azure CLI でログ ストリーミングを有効にして、トラブルシューティングのためにリアルタイムのアプリケーション コンソール ログを取得する方法について説明します。 診断設定を使って、Azure Spring Apps で診断データを分析することもできます。 詳しくは、「診断設定でログとメトリックを分析する」をご覧ください。

Azure Spring Apps のマネージド コンポーネントのストリーミング ログについては、Azure Spring Apps のマネージド コンポーネント ログをリアルタイムでストリーミングする方法に関するページを参照してください

前提条件

Azure CLI を使用して末尾ログを生成する

このセクションでは、Azure CLI を使用してテール ログを生成する例を示します。 リソース グループとサービス インスタンス名を繰り返し指定するのを避けるには、次のコマンドを使って既定のリソース グループ名とクラスター名を設定します。

az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>

次の例では、リソース グループとサービス名は省略されています。

単一インスタンスのアプリのログ末尾を表示する

auth-service という名前のアプリのインスタンスが 1 つだけの場合は、次のコマンドを使ってアプリ インスタンスのログを表示できます。

az spring app logs --name <application-name>

このコマンドは、次の例のようなログ (アプリケーション auth-service 名) を返します。

...
2020-01-15 01:54:40.481  INFO [auth-service,,,] 1 --- [main] o.apache.catalina.core.StandardService  : Starting service [Tomcat]
2020-01-15 01:54:40.482  INFO [auth-service,,,] 1 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.22]
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/uaa]  : Initializing Spring embedded WebApplicationContext
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.s.web.context.ContextLoader  : Root WebApplicationContext: initialization completed in 7203 ms

...

複数インスタンスのアプリのログ末尾を表示する

auth-service という名前のアプリに対して複数のインスタンスが存在する場合は、-i/--instance オプションを使用してインスタンスのログを表示できます。

最初に、次のコマンドを実行して、アプリ インスタンスの名前を取得します。

az spring app show --name auth-service --query properties.activeDeployment.properties.instances --output table

このコマンドを実行すると、次のような結果が生成されます。

Name                                         Status    DiscoveryStatus
-------------------------------------------  --------  -----------------
auth-service-default-12-75cc4577fc-pw7hb  Running   UP
auth-service-default-12-75cc4577fc-8nt4m  Running   UP
auth-service-default-12-75cc4577fc-n25mh  Running   UP

次に、次のように、-i/--instance オプションを使って、アプリ インスタンスのログをストリーミングできます。

az spring app logs --name auth-service --instance auth-service-default-12-75cc4577fc-pw7hb

アプリ インスタンスの詳細は、Azure portal から取得することもできます。 Azure Spring Apps サービスの左側のナビゲーション ウィンドウで [アプリ] を選択した後、[アプリ インスタンス] を選択します。

新しいログを継続的にストリーミングする

既定では、az spring app logs は、アプリ コンソールにストリーミングされた既存のログのみを出力し、終了します。 新しいログをストリーミングする場合は、次の -f/--follow 例に示すように引数を追加します。

az spring app logs --name auth-service --follow

--follow 引数を使ってインスタント ログの末尾を設定すると、Azure Spring Apps ログ ストリーミング サービスは、アプリケーションがログを常に書き込まない限り、クライアントにハートビート ログを 1 分ごとに送信します。 ハートビート ログ メッセージの形式は 2020-01-15 04:27:13.473: No log from server です。

サポートされているすべてのログ オプションを確認するには、次のコマンドを使います。

az spring app logs --help

JSON の構造化されたログの書式設定

Note

JSON 構造化ログを書式設定するには、Spring 拡張機能バージョン 2.4.0 以降が必要です。

構造化されたアプリケーション ログは JSON 形式で表示され、読みにくい場合があります。 --format-json 引数を使うと、JSON 形式のログをさらに読みやすい形式に書式設定できます。 詳しくは、「Azure Spring Apps の構造化アプリケーション ログ」をご覧ください。

次の例は、--format-json 引数の使い方を示したものです。

# Raw JSON log
$ az spring app logs --name auth-service
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Disable delta property : false"}
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Single vip registry refresh property : null"}

# Formatted JSON log
$ az spring app logs --name auth-service --format-json
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Disable delta property : false
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Single vip registry refresh property : null

--format-json 引数は、書式設定文字列構文を使ってカスタマイズされたオプションの形式を受け取ることもできます。 詳しくは、「書式指定文字列の文法」をご覧ください。

次に示すのは、書式設定文字列構文の使い方の例です。

# Custom format
$ az spring app logs --name auth-service --format-json="{message}{n}"
Disable delta property : false
Single vip registry refresh property : null

使用されている既定の形式は次のとおりです。

{timestamp} {level:>5} [{thread:>15.15}] {logger{39}:<40.40}: {message}{n}{stackTrace}

仮想ネットワーク インジェクション インスタンスで Azure Spring Apps アプリ ログをストリーミングする

カスタム仮想ネットワークにデプロイされた Azure Spring Apps インスタンスの場合、既定でプライベート ネットワークからログ ストリーミングにアクセスできます。 詳細については、「仮想ネットワークに Azure Spring Apps をデプロイする」を参照してください。

Azure Spring Apps では、Azure portal または Azure CLI を使って、パブリック ネットワークからリアルタイムのアプリ ログにアクセスすることもできます。

Note

パブリック ネットワークでログ ストリーミング エンドポイントを有効にすると、パブリック受信 IP が仮想ネットワークに追加されます。 これが懸念される場合は、必ず注意してください。

パブリック ネットワークでログ ストリーミング エンドポイントを有効にするには、次の手順に従います。

  1. 仮想ネットワークにデプロイされている Azure Spring Apps サービス インスタンスを選択し、ナビゲーション メニューで [ネットワーク] を選択します。

  2. [VNet インジェクション] タブを選びます。

  3. パブリック ネットワーク上の Dataplane リソースの状態を切り替えて、パブリック ネットワークでログ ストリーミング エンドポイントを有効にします。 このプロセスには数分かかります。

    Screenshot of the Azure portal that shows the Networking page with the Vnet injection tab selected and the Troubleshooting section highlighted.

ログ ストリームのパブリック エンドポイントを有効にした後は、通常のインスタンスにアクセスする場合と同様に、パブリック ネットワークからアプリ ログにアクセスできます。

ログ ストリーミング パブリック エンドポイントへのトラフィックをセキュリティで保護する

ログ ストリーミングでは、「Azure Spring Apps でステージング環境を設定する」で説明されているテスト エンドポイントと同じキーを使って、デプロイへの接続の認証を行います。 その結果、テスト キーへの読み取りアクセス権を持つユーザーのみが、ログ ストリーミングにアクセスできます。

それらに対するパブリック エンドポイントを公開するときにアプリケーションのセキュリティを実現するには、ネットワーク セキュリティ グループを使って自分のサービスへのネットワーク トラフィックをフィルター処理することにより、エンドポイントをセキュリティで保護します。 詳細については、「Azure portal を使用してネットワーク セキュリティ グループでネットワーク トラフィックをフィルター処理する」を参照してください。 ネットワーク セキュリティ グループには、いくつかの種類の Azure リソースとの受信ネットワーク トラフィックまたは送信ネットワーク トラフィックを許可または拒否するセキュリティ規則が含まれています。 規則ごとに、送信元と宛先、ポート、プロトコルを指定できます。

Note

ログ ストリームパブリック エンドポイントを有効にした後、インターネットから仮想ネットワーク インジェクション インスタンスのアプリ ログにアクセスできない場合は、ネットワーク セキュリティ グループをチェックして、そのような受信トラフィックを許可したかどうかを確認します。

次の表は、推奨される基本的なルールの例を示しています。 エンドポイント<service-name>.private.azuremicroservices.ioと同様nslookupのコマンドを使用して、サービスのターゲット IP アドレスを取得できます。

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション
100 ルール名 80 TCP インターネット サービス IP アドレス 許可
110 ルール名 443 TCP インターネット サービス IP アドレス 許可

次のステップ