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. [公衆ネットワークのデータプレーン リソース] の状態を [有効] に切り替えて、公衆ネットワークでのログ ストリーミング エンドポイントを有効にします。 このプロセスには数分かかります。

    Azure portal の [ネットワーク] ページのスクリーンショット。[Vnet インジェクション] タブが選択され、[トラブルシューティング] セクションが強調表示されています。

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

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

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

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

Note

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

次の表は、Microsoft がお勧めする基本的なルールの例を示しています。 エンドポイント <service-name>.private.azuremicroservices.ionslookup などのコマンドを使用して、サービスのターゲット IP アドレスを取得できます。

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

次のステップ