전체 솔루션 모니터링

완료됨

이 단원에서는 전체 솔루션의 모니터링에 대해 살펴봅니다.

소개

오늘날의 복잡한 컴퓨팅 환경에서 모니터링을 지원하려면 분산 시스템의 모든 계층 및 구성 요소에서 운영 데이터를 수집해야 합니다. 이 데이터에 대한 심층적인 인사이트가 필요하며 여기에 다양한 관점을 결합하여 조직의 수많은 이해관계자를 지원할 수 있어야 합니다.

Azure Monitor는 다양한 소스로부터 분석, 시각화 및 경고에 사용할 수 있는 데이터를 수집합니다. 이 기능은 모니터링되는 모든 리소스와 Azure Monitor에 데이터를 저장하는 다른 서비스의 데이터에 대한 심층적인 인사이트를 제공합니다.

Log Analytics

로그는 시스템 내에서 발생한 이벤트입니다. 로그에는 여러 다른 종류의 데이터를 포함할 수 있으며, 구조적일 수도 있고, 타임스탬프가 있는 자유 형식의 텍스트일 수도 있습니다. 환경의 이벤트가 로그 항목을 생성할 때 로그가 산발적으로 생성될 수 있습니다. 많은 부하가 걸리는 시스템은 일반적으로 더 많은 로그 볼륨을 생성합니다.

Azure Monitor의 로그는 문제의 근본 원인을 식별하는 데 유용합니다. Azure Monitor 로그가 수집하는 데이터는 하나 이상의 Log Analytics 작업 영역에 저장됩니다. 데이터를 처리하고 결과를 반환하는 읽기 전용 요청인 로그 쿼리를 사용하여 Log Analytics 작업 영역에서 데이터를 검색합니다. 로그 쿼리는 Azure Data Explorer에서 사용하는 것과 동일한 쿼리 언어인 KQL(Kusto 쿼리 언어)로 작성됩니다.

참고 항목

Azure Spring Apps 샘플 애플리케이션은 이미 Log Analytics 작업 영역으로 설정되었습니다. KQL 구문에 대한 자세한 내용은 이 학습의 마지막에 있는 요약 단원을 참조하세요.

Log Analytics 사용

실제로 애플리케이션의 로그에 액세스하는 방법에는 Azure Storage, Azure Events Hub 및 Log Analytics의 세 가지가 있습니다. 여기서는 가장 일반적이며 메트릭 모니터링을 위해 Azure Spring Apps에 통합된 Log Analytics에 초점을 맞출 것입니다.

Important

Azure Monitor의 로그 데이터 수집 시간은 최대 15분이 걸릴 수 있습니다. Log Analytics에서 데이터를 찾을 수 없는 경우 Azure Spring Apps 로그 데이터를 수집하는 데 시간이 더 걸릴 수도 있습니다.

  1. Azure Portal을 엽니다.

  2. Azure 서비스 목록에서 Azure Spring Apps를 선택합니다.

  3. Azure Spring Apps 인스턴스를 선택합니다.

  4. 다음으로, 모니터링 섹션에서 로그를 선택합니다.

  5. 쿼리 검색 상자에서 다음을 수행합니다.

    Azure Spring Apps 로그에 대한 쿼리를 보여주는 스크린샷

    • 로그를 보려면 다음과 같이 쿼리를 실행합니다.

      AppPlatformLogsforSpring
      | limit 50
      
    • 메트릭을 보려면 다음과 같이 쿼리를 입력합니다.

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

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

애플리케이션 로그 분석

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

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

  1. Azure Portal을 엽니다.

  2. Azure 서비스 목록에서 Azure Spring Apps를 선택합니다.

  3. Azure Spring Apps 인스턴스를 선택합니다.

  4. 다음으로, 모니터링 섹션에서 로그를 선택합니다.

  5. 쿼리 검색 상자에서 다음을 수행합니다.

    • 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"
      
    • 애플리케이션에서 기록한 오류 및 예외 수를 표시하는 원형 차트를 만들려면 다음 쿼리를 실행합니다.

      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
      

데이터베이스 모니터링

서버에 대한 데이터를 모니터링하면 워크로드에 대한 문제를 해결하고 최적화할 수 있습니다. Azure Database for MySQL은 서버의 동작에 대한 통찰력을 제공하는 다양한 메트릭을 제공합니다.

Azure Database for MySQL에서는 사용자에게 느린 쿼리 로그를 제공합니다. 트랜잭션 로그에 대한 액세스는 지원되지 않습니다. 문제 해결을 위해 느린 쿼리 로그를 사용하여 성능 병목을 파악할 수 있습니다.

샘플 애플리케이션에서 느린 쿼리 로그는 진단 로그를 통해 Azure Monitor 로그에 파이프되도록 설정되며 느린 쿼리에 대한 추가 분석을 수행할 수 있습니다. 다음은 시작하는 데 도움이 되는 몇 가지 샘플 쿼리입니다.

Important

Azure Monitor의 MySQL 로그 데이터 수집 시간은 최대 30분이 걸릴 수 있습니다. Log Analytics에서 데이터를 찾을 수 없는 경우 MySQL 로그 데이터를 수집하는 데 시간이 더 걸릴 수 있습니다.

  1. Azure Portal에 로그인합니다.

  2. Azure Spring Apps에 사용하는 Azure Database for MySQL 서버를 선택합니다.

  3. 다음으로, 모니터링 섹션에서 로그를 선택합니다.

    1초보다 긴 쿼리에 대한 쿼리를 보여주는 스크린샷.

  4. 쿼리 검색 상자에서 다음을 수행합니다.

    • 1초보다 긴 쿼리를 모두 검색하려면 다음 쿼리를 실행합니다.

      AzureDiagnostics
      | where Category == 'MySqlSlowLogs'
      | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
      
    • 가장 긴 상위 5개 쿼리를 나열하려면 다음 쿼리를 실행합니다.

      AzureDiagnostics
      | where Category == 'MySqlSlowLogs'
      | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
      | order by query_time_d desc
      | take 5
      
    • 최소, 최대, 평균 및 표준 편차 쿼리 시간을 기준으로 느린 쿼리를 요약하려면 다음 쿼리를 실행합니다.

      AzureDiagnostics
      | where Category == 'MySqlSlowLogs'
      | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
      | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
      
    • 특정 서버에서 느린 쿼리 분포를 그래프로 표시하려면 다음 쿼리를 실행합니다.

      AzureDiagnostics
      | where Category == 'MySqlSlowLogs'
      | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
      | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
      | render timechart
      
  5. 감사 로그를 사용하여 데이터베이스 수준 작업을 추적할 수도 있습니다. 이는 일반적으로 규정 준수를 위해 사용됩니다. 감사 로그는 Azure Monitor 진단 로그와 통합됩니다. 샘플에서 감사된 이벤트의 추가 분석을 수행할 수 있도록 MySQL 서버에서 감사 로그를 사용하도록 설정했습니다.

    • 다음은 일반 MySQL 로그를 검색하는 샘플 쿼리입니다.

      AzureDiagnostics
      | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
      | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
      | order by TimeGenerated desc
      

UI 모니터링

페이지 스크립트에 Application Insights를 추가하면 페이지 로드 및 AJAX 호출의 타이밍, 브라우저 예외 및 AJAX 실패 수 및 세부 정보뿐만 아니라 사용자 및 세션 수를 얻을 수 있습니다. 이러한 모든 메트릭을 페이지, 클라이언트 OS 및 브라우저 버전, 지리적 위치 및 기타 차원별로 나눌 수 있습니다. 오류 수 또는 느린 페이지 로드에 대한 경고를 설정할 수 있으며, JavaScript 코드에 추적 호출을 삽입함으로써 웹 페이지 애플리케이션의 다양한 기능이 어떻게 사용되는지 추적할 수 있습니다.

모든 웹 페이지에서 Application Insights를 사용할 수 있습니다. JavaScript의 간단한 코드를 추가하기만 하면 됩니다. 웹 서비스가 Java인 경우 클라이언트 쪽 JavaScript SDK와 함께 서버 쪽 SDK를 사용하여 앱의 성능을 파악할 수 있습니다.

참고

UI 모니터링에 대한 자세한 내용은 이 학습의 마지막에 있는 요약 단원을 참조하세요.