AWS CloudWatch Iog Insights의 도움으로 서버 성능 보고서

이 문서는 Aws CloudWatch Log Insights 서버리스 기술을 사용하여 성능 보고서 생성에 중점을 둡니다.

Aws CloudWatch는 AWS 및 배포된 모든 애플리케이션을 위한 로깅 서비스입니다. 모든 로그는 로그 그룹 및 스트림이라는 2단계 계층 구조를 통해 저장 및 액세스됩니다. 이러한 로그는 서로 다른 지역에 대해 별도로 시스템 파일 및 폴더로 CloudWatch에 저장됩니다. 따라서 로그에 대한 전역 보기가 없으며 지역 기반입니다. 이러한 모든 로그는 JSON, CLF(공통 로그 형식) 또는 기타 원하는 형식으로 형식화할 수 있습니다. CLF는 AWS CloudWatch log Insights에서 보고서를 생성하는 데 사용됩니다.

CloudWatch 로그 인사이트
CloudWatch Logs Insights는 로그 데이터를 시각화하고 분석하는 대화형 로그 쿼리 도구입니다. 이 시스템에서 쿼리는 필터링할 수 있으며 로그 데이터 집계를 위해 그래프 또는 테이블을 생성하여 CloudWatch 대시보드에 시각화하고 게시할 수 있습니다.

CloudWatch 대시보드
AWS CloudWatch 대시보드는 단일 위치에서 리소스를 모니터링하도록 수정할 수 있는 사용자 지정 가능한 페이지입니다.

CloudWatch Log Insights를 사용하여 데이터를 추출하고 그래프를 그리는 방법.



처음에는 요구 사항과 그 목적을 명확하게 시각화해야 합니다. 내 프로젝트에서 정의된 시간 간격 동안 단일 서버에서 수신된 요청 수와 관련하여 각 API 및 SQL 쿼리의 평균, 최소 및 최대 대기 시간에 대한 데이터를 추출하고 동일한 그래프를 그려야 합니다. 프로젝트는 또한 오류/예외 메시지를 표시해야 하며 API와 관련하여 서버에서 계산하고 각 API의 요청, 성공적으로 실행 및 오류/예외를 표시해야 합니다.
요구 사항을 충족하려면 아래 설명된 대로 백엔드 서버에 사용자 지정 로그를 추가해야 합니다.

    //Backend service name.
    String serviceName="ContentService";

    //Logs as API hits.
    public void ApiStartLog(String apiName){
        logger.info("service {} {} START Api ",serviceName,apiName);
    }

    //Logs as API successfully executed with its latency. 
    public void ApiEndLog(String apiName,long latency){
        logger.info("service {} {} END Api latency {} ms.",serviceName,apiName,latency);
    }

    //Logs as API have some exception.
    public void ApiExceptionLog(String apiName,String error){
        logger.error("service {} {} EXCEPTION : {}",serviceName,apiName,error);
    }

    //Logs as SQL Query hits.
    public void QueryStartLog(String queryName){
        logger.info("service {} {} START Query ",serviceName,queryName);
    }

    //Logs as SQL Query ends with its latency.
    public void QueryEndLog(String queryName,long latency){
        logger.info("service {} {} END Query latency {} ms.",serviceName,queryName,latency);
    }


위의 로그에서 "service","Api","Query"와 같은 텍스트가 추가되어 모든 로그를 필터링하고 결과에서 Api의 로그와 Query의 로그를 별도로 분류합니다. 위의 로그에서 "START","END","EXCEPTION"텍스트가 추가되어 해당 상태와 관련하여 로그를 구분합니다. Api/쿼리 이름, 대기 시간 및 serviceName과 같은 동적 값도 위의 로그에 추가됩니다. 다른 백엔드 서비스를 구별하기 위해 serviceName이 추가됩니다.
  • 이제 CloudWatch 서비스로 이동하여 Logs Insights를 열 준비가 되었습니다.
  • 이제 "로그 그룹 선택"을 클릭하고 드롭다운 메뉴에서 로그 그룹을 선택합니다.
  • 이제 "쿼리 실행"을 클릭하여 선택한 모든 로그 그룹의 최신 로그를 확인하십시오.
  • 로그 확장 후 로그는 사전의 키-값 쌍으로 Field 및 Value에 배포됩니다.
    필드에는 로그 데이터가 포함되어 있으므로 그래프와 테이블을 구성하는 데 필요했습니다.
  • CloudWatch Logs 쿼리 구문에서 필드에 "END", "latency"텍스트가 있는 필터 로그에 대한 쿼리를 작성합니다. 그런 다음 이미지에 표시된 대로 텍스트를 텍스트 쿼리와 매핑하여 구문 분석을 수행합니다.


  • fields @message
    | filter @message like "END"
    | filter @message like "latency"
    |parse @message "service * * * * latency * " as @service,@request,@status,@type,@latency
    


  • 그런 다음 통계 쿼리를 추가하여 Api/Query의 대기 시간을 분석합니다.

  • fields @message
    | filter @message like "END"
    | filter @message like "latency"
    |parse @message "service * * * * latency * " as @service,@request,@status,@type,@latency
    |stats avg(@latency) as avgg,max(@latency),min(@latency),count(@request) by @request,@type
    |sort avgg desc
    


    이제 평균 대기 시간으로 결과를 정렬합니다.



    여기에서 "시각화"를 클릭하고 "막대 그래프"를 선택하여 이 테이블의 그래프를 확인하십시오.


    이제 백엔드 서비스의 각 API/쿼리의 평균, 최소 및 최대 대기 시간을 보여주는 그래프가 있습니다.

    이 쿼리를 사용하여 오류/예외 로그에 대한 테이블을 만들 수도 있습니다.

    filter (
        @message like " EXCEPTION :" or @message like " ERROR :")
    |parse @message "service * * * : *" as @service,@function,@type,@msg
    |stats count(*) as Count by @service,@type,@function,@msg
    |sort Count desc
    




    그리고 결국 아래와 같이 단일 페이지 CloudWatch 대시보드에 모든 리소스를 추가할 수 있습니다.


    참조:
  • AWS CloudWatch 쿼리 구문
    https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html
  • CloudWatch Logs Insights로 로그 데이터 분석
    https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html
  • 좋은 웹페이지 즐겨찾기