실시간으로 Azure Spring Apps 관리형 구성 요소 로그 스트리밍

참고 항목

기본, 표준엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.

표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.

이 문서의 적용 대상:❌ 기본/표준 ✔️ 엔터프라이즈

이 문서에서는 Azure CLI를 사용하여 문제 해결을 위해 관리형 구성 요소의 실시간 로그를 가져오는 방법을 설명합니다. 진단 설정을 사용하여 Azure Spring Apps에서 진단 데이터를 분석할 수도 있습니다. 자세한 내용은 진단 설정을 사용하여 로그 및 메트릭 분석을 참조하세요. 로그 스트리밍에 대한 자세한 내용은 Azure Spring Apps 애플리케이션 콘솔 로그를 실시간으로 스트리밍Azure Spring Apps 작업 로그를 실시간으로 스트리밍을 참조하세요.

필수 조건

  • Azure Spring Apps 확장 버전 1.24.0 이상이 포함된 Azure CLI 다음 명령을 사용하여 확장을 설치할 수 있습니다. az extension add --name spring.

지원되는 관리형 구성 요소

다음 표에서는 하위 구성 요소와 함께 현재 지원되는 관리형 구성 요소를 나열합니다.

관리형 구성 요소 하위 구성 요소
Application Configuration Service application-configuration-service
flux-source-controller(ACS Gen2 버전에서 지원됨)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator
Spring Cloud 구성 서버 config-server

다음 명령을 사용하여 모든 하위 구성 요소를 나열할 수 있습니다.

az spring component list
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name>

Azure 역할 할당

관리형 구성 요소의 로그를 스트리밍하려면 관련 Azure 역할이 할당되어 있어야 합니다. 다음 표에는 필요한 역할 및 해당 역할에 권한이 부여된 작업이 나와 있습니다.

관리형 구성 요소 필수 역할 작업
Application Configuration Service Azure Spring Apps Application Configuration Service 로그 읽기 권한자 역할 Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Azure Spring Apps Spring Cloud Gateway 로그 읽기 권한자 역할 Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Spring Cloud 구성 서버 Azure Spring 앱 Spring Cloud Config Server 로그 읽기 권한자 역할 Microsoft.AppPlatform/Spring/configService/logstream/action

다음 단계를 통해 Azure Portal을 사용하여 Azure 역할을 할당합니다.

  1. Azure Portal을 엽니다.

  2. Azure Spring Apps 서비스 인스턴스를 엽니다.

  3. 탐색 창에서 액세스 제어(IAM)를 선택합니다.

  4. 액세스 제어(IAM) 페이지에서 추가를 선택한 다음, 역할 할당 추가를 선택합니다.

    역할 할당 추가 옵션이 강조 표시된 액세스 제어(IAM) 페이지를 보여 주는 Azure Portal의 스크린샷.

  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를 사용하여 비상 로그를 생성하는 예를 제공합니다.

특정 인스턴스에 대한 비상 로그 보기

특정 인스턴스에 대한 비상 로그를 보려면 다음 섹션과 같이 az spring component logs 명령을 -i/--instance 인수와 함께 사용합니다.

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

하나의 명령으로 모든 인스턴스에 대한 비상 로그 보기

모든 인스턴스에 대한 비상 로그를 보려면 다음 명령과 같이 --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 옵션을 사용하여 인스턴트 로그를 tail하는 경우 구성 요소가 로그를 지속적으로 작성하지 않는 한 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를 사용하면 공용 네트워크에서 실시간 관리형 구성 요소 로그에 액세스할 수 있습니다.

참고 항목

공용 네트워크에서 로그 스트리밍 엔드포인트를 사용하도록 설정하면 가상 네트워크에 공용 인바운드 IP가 추가됩니다. 이 문제가 있는 경우 주의해야 합니다.

다음 단계를 사용하여 공용 네트워크에서 로그 스트리밍 엔드포인트를 사용하도록 설정합니다.

  1. 가상 네트워크에 배포된 Azure Spring Apps 서비스 인스턴스를 선택한 다음, 탐색 메뉴에서 네트워킹을 선택합니다.

  2. VNet 주입 탭을 선택합니다.

  3. 공용 네트워크의 Dataplane 리소스 상태를 사용으로 전환하여 공용 네트워크에서 로그 스트리밍 엔드포인트를 사용하도록 설정합니다. 이 작업에는 몇 분이 소요됩니다.

    VNet 삽입 탭이 선택되고 문제 해결 섹션이 강조 표시된 네트워킹 페이지를 보여 주는 Azure Portal의 스크린샷.

로그 스트림 공용 엔드포인트를 사용하도록 설정한 후 일반 인스턴스에 액세스하는 것처럼 공용 네트워크에서 관리형 구성 요소 로그에 액세스할 수 있습니다.

로그 스트리밍 공용 엔드포인트에 대한 보안 트래픽

관리형 구성 요소에 대한 로그 스트리밍은 Azure RBAC를 사용하여 구성 요소에 대한 연결을 인증합니다. 따라서 적절한 역할이 있는 사용자만 로그에 액세스할 수 있습니다.

공용 엔드포인트를 노출할 때 관리형 구성 요소의 보안을 보장하려면 네트워크 보안 그룹을 사용하여 서비스에 대한 네트워크 트래픽을 필터링하여 엔드포인트를 보호합니다. 자세한 내용은 자습서: Azure Portal을 사용하여 네트워크 보안 그룹으로 네트워크 트래픽 필터링을 참조하세요. 네트워크 보안 그룹에는 여러 종류의 Azure 리소스에서 오는 인바운드 트래픽 또는 이러한 리소스로 나가는 아웃바운드 네트워크 트래픽을 허용하거나 거부하는 보안 규칙이 포함됩니다. 규칙마다 원본 및 대상, 포트, 프로토콜을 지정할 수 있습니다.

참고 항목

로그 스트림 공용 엔드포인트를 사용하도록 설정한 후 인터넷에서 가상 네트워크 주입 인스턴스의 관리형 구성 요소 로그에 액세스할 수 없는 경우, 네트워크 보안 그룹을 확인하여 이러한 인바운드 트래픽을 허용했는지 확인합니다.

다음 표에서는 권장되는 기본 규칙의 예를 보여줍니다. 엔드포인트 <service-name>.private.azuremicroservices.io에서 nslookup과 같은 명령을 사용하여 서비스의 대상 IP 주소를 가져올 수 있습니다.

우선 순위 Name 포트 프로토콜 원본 대상 작업
100 규칙 이름 80 TCP 인터넷 서비스 IP 주소 허용
110 규칙 이름 443 TCP 인터넷 서비스 IP 주소 허용

다음 단계