Share via


Azure Spring Apps のマネージド コンポーネント ログをリアルタイムでストリームする

Note

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

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

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

Azure Spring Apps でのアプリケーションのストリーミング ログについては、「Azure Spring Apps のアプリケーション コンソール ログをリアルタイムでストリーミングする」を参照してください。

前提条件

  • Azure Spring Apps 拡張機能を備えた Azure CLI バージョン 1.19.0 以降。 この拡張機能をインストールするには、az extension add --name spring コマンドを使用します。

サポートされているマネージド コンポーネント

次の表に、現在サポートされているマネージド コンポーネントとそのサブコンポーネントを示します。

マネージド コンポーネント サブコンポーネント
アプリケーション構成サービス application-configuration-service
flux-source-controller (ACS Gen2 バージョンでサポート)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator

次のコマンドを使用すると、すべてのサブコンポーネントを一覧表示できます。

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

Azure portal を使用して Azure ロールを割り当てるには、次の手順に従います。

  1. Azure Portalを開きます。

  2. Azure Spring Apps サービス インスタンスを開きます。

  3. ナビゲーション ウィンドウで [アクセス制御 (IAM)] を選びます。

  4. [アクセス制御 (IAM)] ページで [追加] を選び、[ロールの割り当ての追加] を選びます。

    Azure portal の [アクセス制御 (IAM)] ページのスクリーンショット。[ロールの割り当て] オプションが強調表示されています。

  5. [ロールの割り当ての追加] ページの [名前] の一覧で、ターゲット ロールを検索して選び、[次へ] を選びます。

    Azure portal の [ロールの割り当ての追加] ページのスクリーンショット。[アプリケーション構成サービス ログ閲覧者ロール] 名が強調表示されています。

  6. [メンバー] を選び、自分のユーザー名を検索して選びます。

  7. [レビューと割り当て] を選択します。

コンポーネント内のすべてのインスタンスを一覧表示する

コンポーネント内のすべてのインスタンスを一覧表示するには、次のコマンドを使用します。

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)
...

すべてのインスタンスのログ末尾を 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 がご利用の仮想ネットワークに追加されます。 これが問題である場合は注意してください。

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

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

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

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

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

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

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

マネージド コンポーネントのログ ストリーミングでは、Azure RBAC を使用してコンポーネントへの接続の認証が行われます。 その結果、適切なロールを持つユーザーのみがログにアクセスできます。

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

Note

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

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

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

次のステップ