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 拡張機能バージョン 1.0.0 以降の Azure CLI 。 この拡張機能をインストールするには、
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
ログ ストリームパブリック エンドポイントを有効にした後、インターネットから仮想ネットワーク インジェクション インスタンスのアプリ ログにアクセスできない場合は、ネットワーク セキュリティ グループをチェックして、そのような受信トラフィックを許可したかどうかを確認します。
次の表は、推奨される基本的なルールの例を示しています。 エンドポイント<service-name>.private.azuremicroservices.io
と同様nslookup
のコマンドを使用して、サービスのターゲット IP アドレスを取得できます。
Priority | 名前 | [ポート] | プロトコル | ソース | Destination (公開先) | アクション |
---|---|---|---|---|---|---|
100 | ルール名 | 80 | TCP | インターネット | サービス IP アドレス | 許可 |
110 | ルール名 | 443 | TCP | インターネット | サービス IP アドレス | 許可 |