실시간으로 Azure Spring Apps 애플리케이션 콘솔 로그 스트리밍

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서는 다음에 적용됩니다. ✔️ Java ✔️ C#

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

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

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라는 앱에 인스턴스가 하나만 있는 경우 다음 명령을 사용하여 앱 인스턴스의 로그를 볼 수 있습니다.

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 로그 스트리밍 서비스가 매분 클라이언트에 하트비트 로그를 보냅니다. 하트비트 로그 메시지는 2020-01-15 04:27:13.473: No log from server 형식을 사용합니다.

지원되는 모든 로깅 옵션을 확인하려면 다음 명령을 사용합니다.

az spring app logs --help

JSON 구조화 로그 형식화

참고 항목

JSON 구조화된 로그를 포맷하려면 스프링 확장 버전 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를 사용하여 공용 네트워크에서 실시간 앱 로그에 액세스할 수 있습니다.

참고 항목

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

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

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

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

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

    Screenshot of the Azure portal that shows the Networking page with the Vnet injection tab selected and the Troubleshooting section highlighted.

로그 스트림 퍼블릭 엔드포인트를 사용하도록 설정한 후에는 일반 인스턴스에 액세스하는 것처럼 공용 네트워크에서 앱 로그에 액세스할 수 있습니다.

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

로그 스트리밍은 Azure Spring Apps에서 스테이징 환경 설정에 설명된 테스트 엔드포인트와 동일한 키를 사용하여 배포에 대한 연결을 인증합니다. 결과적으로 테스트 키에 대한 읽기 권한이 있는 사용자만 로그 스트리밍에 액세스할 수 있습니다.

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

참고 항목

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

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

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

다음 단계