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 Spring Apps 拡張機能を備えた Azure CLI バージョン 1.0.0 以降。 この拡張機能をインストールするには、
az extension add --name spring
コマンドを使用します。 - 実行中のアプリケーションを含む 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 がご利用の仮想ネットワークに追加されます。 これが問題である場合は注意してください。
公衆ネットワークでログ ストリーミング エンドポイントを有効にするには、次の手順に従います。
ログ ストリーム パブリック エンドポイントを有効にした後は、通常のインスタンスにアクセスする場合と同様に、パブリック ネットワークからアプリ ログにアクセスできます。
ログ ストリーミング パブリック エンドポイントへのトラフィックをセキュリティで保護する
ログ ストリーミングでは、「Azure Spring Apps でステージング環境を設定する」で説明されているテスト エンドポイントと同じキーを使って、デプロイへの接続の認証を行います。 その結果、テスト キーへの読み取りアクセス権を持つユーザーのみが、ログ ストリーミングにアクセスできます。
それらに対するパブリック エンドポイントを公開するときにアプリケーションのセキュリティを実現するには、ネットワーク セキュリティ グループを使って自分のサービスへのネットワーク トラフィックをフィルター処理することにより、エンドポイントをセキュリティで保護します。 詳細については、「Azure portal を使用してネットワーク セキュリティ グループでネットワーク トラフィックをフィルター処理する」を参照してください。 ネットワーク セキュリティ グループには、いくつかの種類の Azure リソースとの受信ネットワーク トラフィックまたは送信ネットワーク トラフィックを許可または拒否するセキュリティ規則が含まれています。 規則ごとに、送信元と宛先、ポート、プロトコルを指定できます。
Note
ログ ストリーム パブリック エンドポイントを有効にした後で、インターネットから仮想ネットワーク インジェクション インスタンスのアプリ ログにアクセスできない場合は、ネットワーク セキュリティ グループを調べて、そのような受信トラフィックが許可されているかどうかを確認します。
次の表は、Microsoft がお勧めする基本的なルールの例を示しています。 エンドポイント <service-name>.private.azuremicroservices.io
で nslookup
などのコマンドを使用して、サービスのターゲット IP アドレスを取得できます。
Priority | 名前 | [ポート] | プロトコル | ソース | Destination (公開先) | アクション |
---|---|---|---|---|---|---|
100 | ルール名 | 80 | TCP | インターネット | サービス IP アドレス | Allow |
110 | ルール名 | 443 | TCP | インターネット | サービス IP アドレス | Allow |