실시간으로 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 역할을 할당합니다.
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를 사용하여 비상 로그를 생성하는 예를 제공합니다.
특정 인스턴스에 대한 비상 로그 보기
특정 인스턴스에 대한 비상 로그를 보려면 다음 섹션과 같이 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가 추가됩니다. 이 문제가 있는 경우 주의해야 합니다.
다음 단계를 사용하여 공용 네트워크에서 로그 스트리밍 엔드포인트를 사용하도록 설정합니다.
로그 스트림 공용 엔드포인트를 사용하도록 설정한 후 일반 인스턴스에 액세스하는 것처럼 공용 네트워크에서 관리형 구성 요소 로그에 액세스할 수 있습니다.
로그 스트리밍 공용 엔드포인트에 대한 보안 트래픽
관리형 구성 요소에 대한 로그 스트리밍은 Azure RBAC를 사용하여 구성 요소에 대한 연결을 인증합니다. 따라서 적절한 역할이 있는 사용자만 로그에 액세스할 수 있습니다.
공용 엔드포인트를 노출할 때 관리형 구성 요소의 보안을 보장하려면 네트워크 보안 그룹을 사용하여 서비스에 대한 네트워크 트래픽을 필터링하여 엔드포인트를 보호합니다. 자세한 내용은 자습서: Azure Portal을 사용하여 네트워크 보안 그룹으로 네트워크 트래픽 필터링을 참조하세요. 네트워크 보안 그룹에는 여러 종류의 Azure 리소스에서 오는 인바운드 트래픽 또는 이러한 리소스로 나가는 아웃바운드 네트워크 트래픽을 허용하거나 거부하는 보안 규칙이 포함됩니다. 규칙마다 원본 및 대상, 포트, 프로토콜을 지정할 수 있습니다.
참고 항목
로그 스트림 공용 엔드포인트를 사용하도록 설정한 후 인터넷에서 가상 네트워크 주입 인스턴스의 관리형 구성 요소 로그에 액세스할 수 없는 경우, 네트워크 보안 그룹을 확인하여 이러한 인바운드 트래픽을 허용했는지 확인합니다.
다음 표에서는 권장되는 기본 규칙의 예를 보여줍니다. 엔드포인트 <service-name>.private.azuremicroservices.io
에서 nslookup
과 같은 명령을 사용하여 서비스의 대상 IP 주소를 가져올 수 있습니다.
우선 순위 | Name | 포트 | 프로토콜 | 원본 | 대상 | 작업 |
---|---|---|---|---|---|---|
100 | 규칙 이름 | 80 | TCP | 인터넷 | 서비스 IP 주소 | 허용 |
110 | 규칙 이름 | 443 | TCP | 인터넷 | 서비스 IP 주소 | 허용 |