Azure Spring Apps のマネージド コンポーネント ログをリアルタイムでストリームする
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 に移行する」を参照してください。
この記事の適用対象:❌ Basic または Standard ✔️ Enterprise
この記事では、Azure CLI を使用して、トラブルシューティングのためにマネージド コンポーネントのリアルタイム ログを取得する方法について説明します。 診断設定を使って、Azure Spring Apps で診断データを分析することもできます。 詳しくは、「診断設定でログとメトリックを分析する」をご覧ください。 ストリーミング ログの詳細については、「Azure Spring Apps のアプリケーション コンソール ログをリアルタイムでストリーミングする」と Azure Spring Apps ジョブのログをリアルタイムでストリーム配信する方法に関する記事を参照してください。
前提条件
- Azure Spring Apps 拡張機能を備えた Azure CLI バージョン 1.24.0 以降。 この拡張機能をインストールするには、
az extension add --name spring
コマンドを使用します。
サポートされているマネージド コンポーネント
次の表に、現在サポートされているマネージド コンポーネントとそのサブコンポーネントを示します。
マネージド コンポーネント | サブコンポーネント |
---|---|
アプリケーション構成サービス | application-configuration-service flux-source-controller (ACS Gen2 バージョンでサポート) |
Spring Cloud Gateway | spring-cloud-gateway spring-cloud-gateway-operator |
Spring Cloud Config Server | config-server |
次のコマンドを使用すると、すべてのサブコンポーネントを一覧表示できます。
az spring component list
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name>
Azure ロールを割り当てる
マネージド コンポーネントのログをストリームするには、関連する Azure ロールが割り当てられている必要があります。 次の表に、必要なロールと、これらのロールにアクセス許可が付与される操作を示します。
マネージド コンポーネント | 必要なロール | 操作 |
---|---|---|
アプリケーション構成サービス | Azure Spring Apps アプリケーション構成サービス ログ閲覧者ロール | Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action |
Spring Cloud Gateway | Azure Spring Apps Spring Cloud Gateway ログ閲覧者ロール | Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action |
Spring Cloud Config Server | Azure Spring Apps Spring Cloud Config Server ログ閲覧者ロール | Microsoft.AppPlatform/Spring/configService/logstream/action |
Azure portal を使用して Azure ロールを割り当てるには、次の手順に従います。
Azure Portalを開きます。
Azure Spring Apps サービス インスタンスを開きます。
ナビゲーション ウィンドウで [アクセス制御 (IAM)] を選びます。
[アクセス制御 (IAM)] ページで [追加] を選び、[ロールの割り当ての追加] を選びます。
[ロールの割り当ての追加] ページの [名前] の一覧で、ターゲット ロールを検索して選び、[次へ] を選びます。
[メンバー] を選び、自分のユーザー名を検索して選びます。
[レビューと割り当て] を選択します。
コンポーネント内のすべてのインスタンスを一覧表示する
コンポーネント内のすべてのインスタンスを一覧表示するには、次のコマンドを使用します。
az spring component instance list \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--component <component-name>
たとえば、ACS Gen2 バージョンの flux-source-controller
のすべてのインスタンスを一覧表示するには、次のコマンドを使用します。
az spring component instance list \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--component flux-source-controller
ログ末尾を表示する
このセクションでは、Azure CLI を使ってログ末尾を生成する例を示します。
特定のインスタンスのログ末尾を表示する
特定のインスタンスのログ末尾を表示するには、次のセクションに示すように、-i/--instance
引数を指定して az spring component logs
コマンドを使用します。
application-configuration-service のインスタンスのログ末尾を表示する
application-configuration-service
のログ末尾を表示するには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name application-configuration-service \
--instance <instance-name>
ACS Gen2 の場合、このコマンドは次の例のようなログを返します。
...
2023-12-18T07:09:54.020Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8090 (https)
2023-12-18T07:09:54.116Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting service [Tomcat]
2023-12-18T07:09:54.117Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:54.522Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:54.524Z INFO 16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 14100 ms
2023-12-18T07:09:56.920Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8090 (https) with context path ''
2023-12-18T07:09:57.528Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2023-12-18T07:09:57.529Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting service [Tomcat]
2023-12-18T07:09:57.529Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:57.629Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:57.629Z INFO 16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 603 ms
2023-12-18T07:09:57.824Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-18T07:09:58.127Z INFO 16715 --- [main] o.springframework.boot.StartupInfoLogger : Started ReconcilerApplication in 21.005 seconds (process running for 22.875)
...
flux-source-controller のインスタンスのログ末尾を表示する
flux-source-controller
のログ末尾を表示するには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name flux-source-controller \
--instance <instance-name>
このコマンドは、次の例のようなログを返します。
...
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","kind":"health probe","addr":"[::]:9440"}
{"level":"info","ts":"2023-12-18T07:07:54.817Z","logger":"runtime","msg":"attempting to acquire leader lease flux-system/source-controller-leader-election...\n"}
{"level":"info","ts":"2023-12-18T07:07:54.830Z","logger":"runtime","msg":"successfully acquired lease flux-system/source-controller-leader-election\n"}
...
spring-cloud-gateway のインスタンスのログ末尾を表示する
spring-cloud-gateway
のログ末尾を表示するには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name spring-cloud-gateway \
--instance <instance-name>
このコマンドは、次の例のようなログを返します。
...
2023-12-11T14:13:40.310Z INFO 1 --- [ main] i.p.s.c.g.s.SsoDeactivatedConfiguration : SSO is deactivated, setting up default security filters
2023-12-11T14:13:40.506Z INFO 1 --- [ main] .h.HazelcastReactiveSessionConfiguration : Configuring Hazelcast as a session management storage
2023-12-11T14:13:51.008Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8443
2023-12-11T14:13:51.810Z INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 7 endpoint(s) beneath base path '/actuator'
2023-12-11T14:13:52.410Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8090
2023-12-11T14:13:52.907Z INFO 1 --- [ main] i.p.s.c.g.r.h.HazelcastRateLimitsRemover : Removing Hazelcast map 'GLOBAL_RATE_LIMIT' with rate limit information
2023-12-11T14:13:52.912Z INFO 1 --- [ main] i.p.s.cloud.gateway.GatewayApplication : Started GatewayApplication in 36.084 seconds (process running for 38.651)
...
spring-cloud-gateway-operator のインスタンスのログ末尾を表示する
spring-cloud-gateway-operator
のログ末尾を表示するには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name spring-cloud-gateway-operator \
--instance <instance-name>
このコマンドは、次の例のようなログを返します。
...
2023-12-01T08:37:05.080Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : Starting OperatorApplication v2.0.6 using Java 17.0.7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2023-12-01T08:37:05.157Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : No active profile set, falling back to 1 default profile: "default"
2023-12-01T08:37:14.379Z INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-12-01T08:37:15.274Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080
2023-12-01T08:37:15.366Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : Started OperatorApplication in 11.489 seconds (process running for 12.467)
...
config-server のインスタンスのログ末尾を表示する
config-server
のログ末尾を表示するには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name config-server \
--instance <instance-name>
このコマンドは、次の例のようなログを返します。
...
{"app":"config-server","ts":"2024-05-08T05:38:29.44Z","logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","level":"INFO","class":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","method":"prepareWebApplicationContext","file":"ServletWebServerApplicationContext.java","line":291,"thread":"main","message":"Root WebApplicationContext: initialization completed in 3771 ms"}
{"app":"config-server","ts":"2024-05-08T05:38:31.058Z","logger":"com.microsoft.azure.spring.service.CloudConfigServerApplication","level":"INFO","class":"org.springframework.boot.StartupInfoLogger","method":"logStarted","file":"StartupInfoLogger.java","line":57,"thread":"main","message":"Started CloudConfigServerApplication in 6.888 seconds (process running for 8.986)"}
...
すべてのインスタンスのログ末尾を 1 つのコマンドで表示する
すべてのインスタンスのログ末尾を表示するには、次のコマンドに示すように、--all-instances
引数を使用します。 インスタンス名は、各ログ行のプレフィックスです。 複数のインスタンスがある場合、ログはインスタンスごとにバッチで出力されるため、あるインスタンスのログが別のインスタンスのログとインターリーブされることはありません。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--all-instances
新しいログを継続的にストリームする
既定では、az spring component logs
は、コンソールにストリームされた既存のログのみを出力して終了します。 新しいログをストリームする場合は、-f/--follow
引数を追加します。
-f/--follow
オプションを使ってインスタント ログの末尾を設定すると、Azure Spring Apps ログ ストリーミング サービスは、コンポーネントがログを常に書き込まない限り、クライアントにハートビート ログを 1 分ごとに送信します。 ハートビート ログ メッセージの形式は 2023-12-18 09:12:17.745: No log from server
です。
特定のインスタンスのログをストリームする
特定のインスタンスのログをストリームするには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--instance <instance-name> \
--follow
すべてのインスタンスのログをストリームする
すべてのインスタンスのログをストリームするには、次のコマンドを使用します。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--all-instances \
--follow
コンポーネント内の複数のインスタンスのログをストリームすると、あるインスタンスのログが別のインスタンスのログとインターリーブされます。
仮想ネットワーク インジェクション インスタンスのログをストリームする
カスタム仮想ネットワークにデプロイされた Azure Spring Apps インスタンスの場合、既定でプライベート ネットワークからログ ストリーミングにアクセスできます。 詳細については、「仮想ネットワークに Azure Spring Apps をデプロイする」を参照してください。
Azure Spring Apps を使用すると、公衆ネットワークからリアルタイムのマネージド コンポーネント ログにアクセスすることもできます。
Note
公衆ネットワークでログ ストリーミング エンドポイントを有効にすると、パブリック受信 IP がご利用の仮想ネットワークに追加されます。 これが問題である場合は注意してください。
公衆ネットワークでログ ストリーミング エンドポイントを有効にするには、次の手順に従います。
ログ ストリーム パブリック エンドポイントを有効にすると、通常のインスタンスにアクセスする場合と同様に、公衆ネットワークからマネージド コンポーネント ログにアクセスできます。
ログ ストリーミング パブリック エンドポイントへのトラフィックをセキュリティで保護する
マネージド コンポーネントのログ ストリーミングでは、Azure RBAC を使用してコンポーネントへの接続の認証が行われます。 その結果、適切なロールを持つユーザーのみがログにアクセスできます。
それらに対するパブリック エンドポイントを公開するときにマネージド コンポーネントのセキュリティを確保するには、ネットワーク セキュリティ グループを使って自分のサービスへのネットワーク トラフィックをフィルター処理して、エンドポイントをセキュリティで保護します。 詳細については、「Azure portal を使用してネットワーク セキュリティ グループでネットワーク トラフィックをフィルター処理する」を参照してください。 ネットワーク セキュリティ グループには、いくつかの種類の Azure リソースとの受信ネットワーク トラフィックまたは送信ネットワーク トラフィックを許可または拒否するセキュリティ規則が含まれています。 規則ごとに、送信元と宛先、ポート、プロトコルを指定できます。
Note
ログ ストリーム パブリック エンドポイントを有効にした後で、インターネットから仮想ネットワーク インジェクション インスタンスのマネージド コンポーネント ログにアクセスできない場合は、ネットワーク セキュリティ グループを調べて、そのような受信トラフィックが許可されているかどうかを確認します。
次の表は、Microsoft がお勧めする基本的なルールの例を示しています。 エンドポイント <service-name>.private.azuremicroservices.io
で nslookup
などのコマンドを使用して、サービスのターゲット IP アドレスを取得できます。
Priority | 名前 | [ポート] | プロトコル | ソース | Destination (公開先) | アクション |
---|---|---|---|---|---|---|
100 | ルール名 | 80 | TCP | インターネット | サービス IP アドレス | Allow |
110 | ルール名 | 443 | TCP | インターネット | サービス IP アドレス | Allow |