다음을 통해 공유


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

참고 항목

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

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

이 문서는 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(엔터프라이즈 계획만 해당), SpringCloudGateway(엔터프라이즈 계획만 해당) 및 SpringCloudGatewayOperator(엔터프라이즈 계획만 해당)입니다.
IngressLogs 모든 고객 애플리케이션의 수신 로그로, 로그에만 액세스합니다.
BuildLogs 각 빌드 단계에 대한 모든 고객 애플리케이션의 빌드 로그입니다.

참고 항목

잠재적인 자격 증명 유출로부터 애플리케이션을 보호하기 위해 자격 증명이나 기타 중요한 정보가 포함된 모든 로그 콘텐츠는 ***로 마스킹됩니다. 예를 들어, 다음 패턴을 가진 로그 콘텐츠는 중요한 정보로 처리되며 해당 값은 마스킹됩니다.

  • dbpass, password, key, secret, sigsignature 뒤에 : 또는 =이 따릅니다. 이러한 패턴은 일반적으로 URL 매개 변수 및 페이로드 덤프에 나타납니다. 예를 들어 https://somestorage.blob.core.windows.net?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=xxxxxxxxxxxxxxhttps://somestorage.blob.core.windows.net?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=***가 됩니다.
  • 다음 형식의 JWT 토큰과 유사하게 인코딩된 문자열: eyJxxxxxx.eyJxxxxxx

로그에서 마스킹된 값을 발견하면 자격 증명 유출을 방지하기 위해 애플리케이션 코드를 업데이트해야 합니다.

메트릭

전체 메트릭 목록은 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 로그 표시

엔터프라이즈 계획에서 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 게이트웨이 운영자의 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

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

Enterprise 계획에서 Tanzu용 애플리케이션 구성 서비스 로그 표시

Enterprise 계획에서 Tanzu용 애플리케이션 구성 서비스 로그 항목을 검토하려면 다음 쿼리를 실행합니다.

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

Enterprise 계획에서 Tanzu 서비스 레지스트리 로그 표시

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

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

Enterprise 계획에서 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의 로그 쿼리 개요를 참조하세요.

Azure Portal의 편리한 진입점

미리 정의된 쿼리를 사용하여 Log Analytics 창으로 이동하려면 다음 단계를 수행합니다.

  1. Azure Spring Apps 서비스 인스턴스의 개요 페이지로 이동한 다음 탐색 창에서 을 선택합니다.

  2. 대상 앱을 찾은 다음 바로 가기 메뉴를 선택합니다.

  3. 팝업 바로 가기 메뉴에서 로그 보기를 선택합니다.

    로그 보기 바로 가기 메뉴 항목이 강조 표시된 앱 페이지를 보여주는 Azure Portal의 스크린샷입니다.

    이 작업을 통해 미리 정의된 쿼리를 사용하여 Log Analytics 창으로 이동합니다.

로그를 볼 수 있는 다른 진입점이 있습니다. 관리되는 구성 요소(예: 빌드 서비스 및 서비스 레지스트리)에 대한 로그 보기 버튼을 찾을 수도 있습니다.

질문과 대답(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 로그 라이브러리에 대해 동일한 전략을 사용할 수 있습니다.

다음 단계