진단 설정을 사용하여 로그 및 메트릭 분석

참고 항목

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

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

이 문서는 기본/표준 ✔️ 엔터프라이즈에 ✔️ 적용됩니다.

이 문서에서는 Azure Spring Apps에서 진단 데이터를 분석하는 방법을 보여 줍니다.

Azure Spring Apps의 진단 기능을 사용하여 다음 서비스 중 하나를 통해 로그 및 메트릭을 분석할 수 있습니다.

  • Azure Log Analytics를 사용합니다. Log Analytics로 로그를 내보낼 때 지연이 발생합니다.
  • 감사 또는 수동 검사를 위해 스토리지 계정에 로그를 저장합니다. 보존 시간(일)을 지정할 수 있습니다.
  • 타사 서비스 또는 사용자 지정 분석 솔루션에서 수집할 수 있도록 로그를 이벤트 허브로 스트림합니다.

모니터링할 로그 범주 및 메트릭 범주를 선택합니다.

로그를 스트리밍하려는 경우 Azure CLI 명령 az spring app logs를 사용할 수 있습니다.

로그

로그 설명
ApplicationConsole 모든 고객 애플리케이션의 콘솔 로그입니다.
SystemLogs 사용 가능한 LogType 값은 ConfigServer(기본/표준에만 해당), ServiceRegistry(모든 계획), ApiPortal(엔터프라이즈 계획만), ApplicationConfigurationService(엔터프라이즈 계획만 해당), SpringCloudGatewaySpringCloudGatewayOperator (엔터프라이즈 계획만 해당)
IngressLogs 모든 고객 애플리케이션의 수신 로그로, 로그에만 액세스합니다.
BuildLogs 각 빌드 단계에 대한 모든 고객 애플리케이션의 빌드 로그입니다.

메트릭

전체 메트릭 목록은 Azure Spring Apps용 메트릭사용자 메트릭 옵션 섹션을 참조하세요.

시작하려면 이러한 서비스 중 하나를 사용하도록 설정하여 데이터를 수신합니다. Log Analytics 구성에 대한 자세한 내용은 Azure Monitor에서 Log Analytics 시작 방법을 참조하세요.

진단 설정 구성

  1. Azure Portal에서 Azure Spring Apps 인스턴스로 이동합니다.

  2. 진단 설정 옵션을 선택한 다음, 진단 설정 추가를 선택합니다.

  3. 설정의 이름을 입력한 다음 로그를 보낼 위치를 선택합니다. 다음 세 가지 옵션의 조합을 선택할 수 있습니다.

    • 스토리지 계정에 보관
    • 이벤트 허브로 스트림
    • Log Analytics에 보내기
    • 파트너 솔루션으로 보내기
  4. 모니터링할 로그 범주 및 메트릭 범주를 선택한 다음 보존 시간(일)을 지정합니다. 보존 시간은 스토리지 계정에만 적용됩니다.

  5. 저장을 선택합니다.

참고 항목

로그 또는 메트릭이 내보내질 때와 스토리지 계정, 이벤트 허브 또는 Log Analytics에 표시되는 시점 사이에 최대 15분의 간격이 있을 수 있습니다. Azure Spring Apps 인스턴스가 삭제되거나 이동된 경우 작업이 진단 설정 리소스로 계단식으로 진행되지 않습니다. 진단 설정 리소스는 부모(예: Azure Spring Apps 인스턴스)에 대해 작업을 수행하기 전에 수동으로 삭제해야 합니다. 그렇지 않으면 새 Azure Spring Apps 인스턴스가 삭제된 것과 동일한 리소스 ID로 프로비저닝되거나 Azure Spring Apps 인스턴스가 다시 이동되는 경우 이전 진단 설정 리소스는 계속 확장합니다.

로그 및 메트릭 보기

다음 제목에 설명된 것처럼 다양한 방법으로 로그 및 메트릭을 볼 수 있습니다.

로그 블레이드 사용

  1. Azure Portal에서 Azure Spring Apps 인스턴스로 이동합니다.

  2. 로그 검색 창을 열려면 로그를 선택합니다.

  3. 테이블 검색 상자에서

    • 로그를 보려면 다음과 같은 간단한 쿼리를 입력합니다.
    AppPlatformLogsforSpring
    | limit 50
    
    • 메트릭을 보려면 다음과 같은 간단한 쿼리를 입력합니다.
    AzureMetrics
    | limit 50
    
  4. 검색 결과를 보려면 실행을 선택합니다.

Log Analytics 사용

  1. Azure Portal의 왼쪽 창에서 Log Analytics를 선택합니다.

  2. 진단 설정을 추가할 때 선택한 Log Analytics 작업 영역을 선택합니다.

  3. 로그 검색 창을 열려면 로그를 선택합니다.

  4. 테이블 검색 상자에서

    • 로그를 보려면 다음과 같은 간단한 쿼리를 입력합니다.
    AppPlatformLogsforSpring
    | limit 50
    
    • 메트릭을 보려면 다음과 같은 간단한 쿼리를 입력합니다.
    AzureMetrics
    | limit 50
    
  5. 검색 결과를 보려면 실행을 선택합니다.

  6. 필터 조건을 설정하여 특정 애플리케이션 또는 인스턴스의 로그를 검색할 수 있습니다.

    AppPlatformLogsforSpring
    | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName"
    | limit 50
    

    참고 항목

    == 은 대/소문자를 구분하지만 =~ 그렇지 않습니다.

Log Analytics에서 사용되는 쿼리 언어에 대한 자세한 내용은 Azure Monitor 로그 쿼리를 참조 하세요. 중앙 집중식 클라이언트에서 모든 Log Analytics 로그를 쿼리하려면 Azure Data Explorer검사.

스토리지 계정 사용

  1. Azure Portal의 왼쪽 탐색 패널 또는 검색 상자에서 스토리지 계정을 찾습니다.
  2. 진단 설정을 추가할 때 선택한 스토리지 계정을 선택합니다.
  3. Blob 컨테이너 창을 열려면 Blob을 선택합니다.
  4. 애플리케이션 로그를 검토하려면 insights-logs-applicationconsole이라는 컨테이너를 검색합니다.
  5. 애플리케이션 메트릭을 검토하려면 insights-metrics-pt1m라는 컨테이너를 검색합니다.

스토리지 계정에 진단 정보를 보내는 방법에 대한 자세한 내용은 Azure Storage에서 진단 데이터 저장 및 보기를 참조하세요.

이벤트 허브 사용

  1. Azure Portal의 왼쪽 탐색 패널 또는 검색 상자에서 Event Hubs를 찾습니다.

  2. 진단 설정을 추가할 때 선택한 이벤트 허브를 검색하여 선택합니다.

  3. 이벤트 허브 목록 창을 열려면 Event Hubs를 선택합니다.

  4. 애플리케이션 로그를 검토하려면 insights-logs-applicationconsole이라는 이벤트 허브를 검색합니다.

  5. 애플리케이션 메트릭을 검토하려면 insights-metrics-pt1m라는 이벤트 허브를 검색합니다.

이벤트 허브에 진단 정보를 보내는 방법에 대한 자세한 내용은 Event Hubs를 사용하여 핫 경로에서 Azure Diagnostics 데이터 스트리밍을 참조하세요.

로그 분석

Azure Log Analytics는 Kusto 엔진과 함께 실행되므로 로그에서 분석을 쿼리할 수 있습니다. Kusto를 사용하여 로그를 쿼리하는 방법에 대한 빠른 소개는 Log Analytics 자습서검토하세요.

애플리케이션 로그는 애플리케이션의 상태, 성능 등에 대해 중요한 정보와 자세한 로그를 제공합니다. 다음 섹션에서는 애플리케이션의 현재 및 과거 상태를 파악하는 데 도움이 되는 몇 가지 간단한 쿼리를 소개합니다.

Azure Spring Apps의 애플리케이션 로그 표시

Azure Spring Apps의 애플리케이션 로그 목록을 검토하려면 먼저 표시된 최신 로그를 시간별로 정렬한 후 다음 쿼리를 실행합니다.

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| sort by TimeGenerated desc

오류 또는 예외가 포함된 로그 항목 표시

오류 또는 예외를 언급하는 정렬되지 않은 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| where Log contains "error" or Log contains "exception"

이 쿼리를 사용하여 오류를 찾거나, 쿼리 용어를 수정하여 특정 오류 코드 또는 예외를 찾습니다.

지난 1시간 동안 애플리케이션에서 보고한 오류 및 예외 수 표시

지난 1시간 동안 애플리케이션에서 기록한 오류 및 예외 수를 표시하는 원형 차트를 만들려면 다음 쿼리를 실행합니다.

AppPlatformLogsforSpring
| where TimeGenerated > ago(1h)
| where Log contains "error" or Log contains "exception"
| summarize count_per_app = count() by AppName
| sort by count_per_app desc
| render piechart

특정 호스트를 포함하는 수신 로그 항목 표시

특정 호스트에서 생성된 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and Host == "ingress-asc.test.azuremicroservices.io" 
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

이 쿼리를 사용하여 이 특정 호스트의 수신 로그에 대한 응답 Status, RequestTime 및 기타 속성을 찾습니다.

특정 requestId에 대한 수신 로그 항목 표시

특정 requestId<request_ID>에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and ReqId == "<request_ID>" 
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

특정 앱에 대한 빌드 로그 항목 표시

빌드 프로세스 중에 특정 앱에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>"
| sort by TimeGenerated

특정 빌드 단계에서 특정 앱에 대한 빌드 로그 항목 표시

특정 빌드 단계에서 특정 앱에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다. <app-name> 자리 표시자를 애플리케이션 이름으로 바꿉니다. <build-stage> 자리 표시자를 빌드 프로세스의 단계를 나타내는 값 중 하나로 바꿉니다. prepare, detect, restore, analyze, build, export 또는 completion.

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>" and ContainerName == "<build-stage>"
| sort by TimeGenerated

엔터프라이즈 계획에 VMware Spring Cloud Gateway 로그 표시

Enterprise 계획에서 VMware Spring Cloud Gateway 로그에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformSystemLogs 
| where LogType == "SpringCloudGateway"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

Spring Cloud Gateway 운영자라는 또 다른 구성 요소는 Spring Cloud Gateway 및 경로의 수명 주기를 제어합니다. 경로가 적용되지 않는 데 문제가 발생하는 경우 이 구성 요소에 대한 로그를 검사. 엔터프라이즈 계획에서 VMware Spring Cloud Gateway 운영자에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformSystemLogs 
| where LogType == "SpringCloudGatewayOperator"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

Enterprise 계획에 Tanzu용 Application Configuration Service 로그 표시

Enterprise 계획에서 Tanzu용 Application Configuration Service 로그에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformSystemLogs 
| where LogType == "ApplicationConfigurationService"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

Enterprise 계획에 Tanzu Service Registry 로그 표시

Enterprise 계획에서 Tanzu Service Registry 로그에 대한 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformSystemLogs 
| where LogType == "ServiceRegistry"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

엔터프라이즈 계획에서 VMware Tanzu 로그에 대한 API 포털 표시

Enterprise 계획에서 VMware Tanzu 로그에 대한 API 포털의 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

AppPlatformSystemLogs 
| where LogType == "ApiPortal"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

애플리케이션 로그 쿼리에 대한 자세한 정보

Azure Monitor는 Log Analytics를 사용하여 애플리케이션 로그 쿼리를 광범위하게 지원합니다. 이 서비스에 대한 자세한 내용은 Azure Monitor에서 로그 쿼리 시작을 참조하세요. 애플리케이션 로그를 분석하는 쿼리를 빌드하는 방법에 대한 자세한 내용은 Azure Monitor의 로그 쿼리 개요를 참조하세요.

질문과 대답(FAQ)

여러 줄 Java 스택 추적을 한 줄로 변환하려면 어떻게 해야 하나요?

여러 줄 스택 추적을 한 줄로 변환하는 해결 방법이 있습니다. Java 로그 출력을 수정하여 스택 추적 메시지를 다시 포맷하고 줄 바꿈 문자를 토큰으로 바꿀 수 있습니다. Java Logback 라이브러리를 사용하는 경우 다음과 같이 추가하여 %replace(%ex){'[\r\n]+', '\\n'}%nopex 스택 추적 메시지의 서식을 다시 지정할 수 있습니다.

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                level: %level, message: "%logger{36}: %msg", exceptions: "%replace(%ex){'[\r\n]+', '\\n'}%nopex"%n
            </pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

그런 다음 아래와 같이 Log Analytics에서 토큰을 개행 문자로 바꿀 수 있습니다.

AppPlatformLogsforSpring
| extend Log = array_strcat(split(Log, '\\n'), '\n')

다른 Java 로그 라이브러리에 대해 동일한 전략을 사용할 수 있습니다.

다음 단계