웹 응용 프로그램 CloudWatch 로깅(섹션 2)

본 논문에서 저는 CloudFormation 템플릿을 소개했는데 이 템플릿은 REST API를 만들어서 전방 프로그램에서 CloudWatch에 로그인할 수 있도록 합니다.본고는 RESTAPI의 통신 프로토콜을 소개했다.

개술
모든 응용 프로그램에는 CloudFormation 템플릿에서 만든 전용 로그 그룹이 있어 응용 프로그램의 모든 로그 메시지를 추적할 수 있습니다.로그 그룹은 로그 흐름을 포함하고, 로그 흐름 자체는 시간 순서에 따라 배열된 로그 항목을 포함합니다.
프로그램은 로그 흐름을 만드는 것을 책임집니다.단일 페이지 애플리케이션(SPA)의 경우Blazor WebAssembly 애플리케이션을 로드할 때 로그 스트림을 생성할 수 있습니다.응용 프로그램 세션마다 로그 흐름을 만드는 장점은 로그 항목이 사용자의 작업 시간 순서를 표시하는 것이다.
로그 흐름을 만들면 프로그램이 로그 항목을 보낼 수 있습니다.로그 항목은 배치 작업으로 전송됩니다.첫 번째 배치 이후에는 CloudWatch API가 각 후속 배치에 대해 일련 번호판을 제공해야 합니다.시퀀스 표시는 이전 작업의 응답에서 얻은 것입니다.
다음 편이자 마지막 글에서 로그 항목을 어떻게 일괄 처리하는지 상세하게 소개하겠습니다.이 글은 우리가 실현해야 할 협의에만 주목한다.

API 키
이전 글의 CloudFormation 템플릿은 CloudFormation 스택 ID를 사용하여 REST API에 대한 액세스를 제한하는 API 키를 만들었습니다.예를 들어, API 키는 JSON 구성 파일을 통해 프런트엔드 응용 프로그램으로 전송되어야 합니다.스택 ID 기반 API 키를 사용하면 배포된 API 키마다 다르지만, 최종적으로 악성 참여자는 API 키가 있는 JSON 파일을 로드하고 REST API에 스팸메일을 보낼 수 있습니다.불행하게도, 전방 응용 프로그램에 대해 다른 사람이 파악하지 않은 상황에서 API 키를 안전하게 전달할 수 있는 기술은 없다.
LambdaSharp에서 API 키는 두 부분으로 구성되어 있는데 그것이 바로 응용 프로그램 집합의 창고 ID와 구축 GUID이다.이 강좌에서 GUID 구축 부분은 건너뛰었습니다. 도구를 통해서만 믿을 수 있고 사용할 수 있기 때문입니다.네트워크 응용.LambdaSharp 방법은 더 안전하지 않고 제3자가 API 키를 얻기 어려울 뿐입니다.

REST API
로그 RESTAPI는 두 가지 단점이 있는데 하나는 로그 흐름을 만드는 데 사용되고 다른 하나는 로그 항목을 보내는 데 사용된다.

게시물:/.응용 프로그램/로그 - 로그 흐름 만들기POST:/.app/logs 단점은 프로그램 로그 그룹에 새로운 로그 흐름을 만듭니다.로그 흐름은 응용 프로그램의 실례에서 나온 일련의 로그 이벤트입니다.
생성할 수 있는 로그 흐름의 수량은 제한이 없습니다.이 동작은 초당 50개의 요청이 제한되어 있으며, 이후에는 요청이 제한됩니다.
로그 스트림 이름은 다음 지침을 준수해야 합니다.
  • 로그 흐름 이름은 로그 그룹에서 유일해야 합니다.
  • 로그 흐름 이름의 길이는 1에서 512자 사이입니다.
  • 에서는:(콜론) 및 *(별표) 문자를 사용할 수 없습니다.

  • 요청 구문
    {
       "logStreamName": "string"
    }
    

    요청 매개 변수
    다음 JSON 형식의 데이터를 승인할 것을 요청합니다.
  • logStreamName(필수): 로그 흐름의 이름입니다.최소 길이는 1입니다.최대 길이는 512입니다.값은 패턴과 일치해야 합니다. [^:*]*

  • 응답 성공(HTTP 상태 코드: 200)
    성공하면 API가 빈 JSON 문서로 응답합니다.
    { }
    

    응답 요청 오류(HTTP 상태 코드: 400)
    잘못된 요청 응답에 대해 본문에는 요청이 거부된 원인을 설명하는 메시지가 포함되어 있습니다.이 옵션을 사용하면 API 로그에서 추가 세부 정보를 볼 수 있습니다.
    예: 요청 본문에 필수 필드가 없습니다.
    {
        "error": "Invalid request body"
    }
    
    예: 인증 요청 오류
    {
      "error": "1 validation error detected: Value \'\' at \'logStreamName\' failed to satisfy constraint: Member must have length greater than or equal to 1"
    }
    

    내부 오류 응답(HTTP 상태 코드: 500)
    내부 오류 응답에 본문에 일반적인 메시지가 포함되어 있습니다.이 옵션을 사용하면 API 로그에서 실제 원인을 찾을 수 있습니다.
    {
       "error": "Unexpected response from service."
    }
    

    놓다응용 프로그램/로그 - 로그 메시지 배치PUT:/.app/logs 단점은 로그 메시지를 지정한 로그 흐름에 업로드합니다.
    요청은 새로 만든 로그 흐름에 대한 첫 번째 요청이 아니라면 이전 호출된 응답에서 얻은 시퀀스 영패를 포함해야 합니다.좁은 시간대에 같은 sequenceToken를 두 번 사용하면 두 호출이 모두 성공하거나 한 호출이 거절될 수 있다.
    이 이벤트는 다음 구속을 충족해야 합니다.
  • 최대 볼륨 크기는 1048576바이트입니다.이 크기는 UTF-8의 모든 이벤트 메시지의 합계이며 각 로그 이벤트의 26바이트를 더합니다.
  • 일괄 처리 중인 로그 이벤트는 앞으로 2시간을 초과할 수 없습니다.
  • 일괄 처리 중인 로그 이벤트는 로그 그룹의 보존 기간보다 14일 빠를 수 없습니다.
  • 일괄 처리 중인 로그 이벤트는 시간 스탬프에 따라 시간 순서대로 배열해야 합니다.타임스탬프는 1970년 1월 1일 00:00:00 UTC 이후 밀리초 단위로 이벤트가 발생한 시간입니다.
  • 단일 요청 중의 로그 이벤트의 경계는 24시간을 초과할 수 없습니다.그렇지 않으면 작업에 장애가 발생합니다.
  • 로그 이벤트의 최대 수량은 10000입니다.
  • 로그 흐름마다 초당 5개의 요청 할당액이 있습니다.기타 요청이 제한되어 있습니다.이 할당액은 변경할 수 없다.

  • 요청 구문
    {
       "logEvents": [
          {
             "message": "string",
             "timestamp": number
          }
       ],
       "logStreamName": "string",
       "sequenceToken": "string"
    }
    

    요청 매개 변수
    다음 JSON 형식의 데이터를 승인할 것을 요청합니다.
  • logEvents(필수): 이벤트를 기록합니다.최소 1개.최대 10000개 아이템.
  • message(필수): 원래 이벤트 메시지입니다.최소 길이는 1입니다.
  • timestamp(필수): 1970년 1월 1일 00:00 UTC 이후 밀리초 단위로 이벤트가 발생한 시간입니다.최소값은 0입니다.
  • logStreamName(필수): 로그 흐름의 이름입니다.최소 길이는 1입니다.최대 길이는 512입니다.값은 패턴과 일치해야 합니다. [^:]
  • sequenceToken(선택 사항): 지난번에 호출된 응답에서 얻은 시퀀스 영패입니다.새로 만든 로그 흐름의 업로드는 시퀀스 영패가 필요하지 않습니다.좁은 시간대에 같은 sequenceToken를 두 번 사용하면 두 호출이 모두 성공하거나 한 호출이 거절될 수 있다.

  • 응답 성공(HTTP 상태 코드: 200)
    성공하면 API는 다음 요청의 시퀀스 토큰이 포함된 JSON 문서를 사용하여 응답합니다.
    {
      "nextSequenceToken": "49608818592289528730168753288679022865213175397425034930"
    }
    

    응답 요청 오류(HTTP 상태 코드: 400)
    예: 요청 본문에 필수 필드가 없습니다.
    {
        "error": "Invalid request body"
    }
    
    예: 인증 요청 오류
    {
      "error": "1 validation error detected: Value \'\' at \'logStreamName\' failed to satisfy constraint: Member must have length greater than or equal to 1"
    }
    
    예: sequenceToken 필드에 이전 태그 값이 없거나 재사용
    {
      "error": "The given batch of log events has already been accepted. The next batch can be sent with sequenceToken: 49608818592289528730168753288679022865213175397425034930",
      "nextSequenceToken": "49608818592289528730168753288679022865213175397425034930"
    }
    

    내부 오류 응답(HTTP 상태 코드: 500)
    내부 오류 응답에 본문에 일반적인 메시지가 포함되어 있습니다.이 옵션을 사용하면 API 로그에서 실제 원인을 찾을 수 있습니다.
    {
       "error": "Unexpected response from service."
    }
    

    결론-총괄해야 한다...
    본고에서 우리는 전방 응용 프로그램이 클라우드 워치에 직접 로그인하는 통신 프로토콜을 소개했다.다음 글에서, 우리는 어떻게 전단에서 그것을 실현할 것인가로 이 시리즈를 끝낼 것이다.
    해커!

    좋은 웹페이지 즐겨찾기