Firehose를 사용하여 S3에 EventBridge 이벤트 로깅

4051 단어 serverlessaws
EventBridge을 사용할 때 감사, 분석 및 디버깅 목적으로 항상 모든 이벤트를 S3 버킷에 기록합니다. 이를 수행하는 매우 쉬운 방법은 Kinesis Data Firehose 스트림을 만들고 Firehose 스트림을 가리키는 모든 이벤트를 캡처하는 규칙을 만드는 것입니다. 그런 다음 Firehose 스트림은 구성에 따라 선택한 간격/크기로 S3의 이벤트를 플러시할 수 있습니다.

내가 만난 문제는 JSON의 모든 이벤트가 모두 한 줄에 있었지만 줄 바꿈으로 구분하는 것을 선호한다는 것입니다. 이것은 JSON Lines 형식으로 알려져 있습니다. Firehose의 Data Transformation 기능을 활용하면 이것이 가능하다는 것을 알았지만 이것은 옳지 않다고 느꼈습니다(즉, 비용을 지불하고 싶지 않았습니다 :-). 내가 이것을 조사했을 때 나는 그것에 대한 수정 사항을 찾았고 . 다른 사람들은 이 솔루션에 익숙하지 않을 수 있으므로 Twitter의 스레드보다 쉽게 ​​찾을 수 있도록 이에 대해 자세히 설명하는 게시물을 작성하기로 결정했습니다.

해결책은 결국 비교적 간단하다는 것이 밝혀졌습니다. 규칙에서 입력 변환기를 구성하여 EventBridge에서 transform the input해야 합니다. 줄 바꿈을 포함하도록 이벤트를 수정합니다. 입력 경로로 다음을 구성해야 합니다.

{}


템플릿으로 다음을 구성해야 합니다.

<http://aws.events.event>



요령은 < http://aws.events.event > 뒤에 개행을 추가하는 것입니다.

콘솔에서 작업하는 것보다 CloudFormation을 사용하는 것이 좋습니다.

AllAccountEventsRule:
  Type: AWS::Events::Rule
  Properties:
    EventBusName: !GetAtt EventBus.Name
    EventPattern:
      account:
        - Ref: 'AWS::AccountId'
    State: ENABLED
    Targets:
      - Id: FirehoseLogger
        Arn: !GetAtt FirehoseStream.Arn
        RoleArn: !GetAtt EventBridgeFirehoseDeliveryRole.Arn
        InputTransformer:
          InputPathsMap: { }
          InputTemplate: |
            <aws.events.event>
# empty because of the newline ^


CDK 솔루션을 제공해 주셔서 감사합니다.

return new targets.KinesisFirehoseStream(kinesisStream, {
    message: {
        bind: () => ({inputPathsMap: {}, inputTemplate: '<http://aws.events.event>\n'}),
    },
});



Firehose가 S3에 작성한 파일에는 줄 바꿈으로 구분된 모든 이벤트가 있습니다.

{"version":"0","id":"493acfe4-35fd-4050-a850-de2191261310","detail-type":"action_a","source":"your_app","account":"your_account_id","time":"2022-08-02T01:02:08Z","region":"eu-west-1","resources":[],"detail":{"foo":"bar"}}
{"version":"0","id":"c76450da-079c-463d-b02a-edad99783952","detail-type":"action_b","source":"your_app","account":"your_account_id","time":"2022-08-02T01:02:08Z","region":"eu-west-1","resources":[],"detail":{"foo":"bar"}}
{"version":"0","id":"857dcf59-d54c-4ca7-8342-9eaa0988cad1","detail-type":"action_c","source":"your_app","account":"your_account_id","time":"2022-08-02T01:02:08Z","region":"eu-west-1","resources":[],"detail":{"foo":"bar"}}



Object Lock로 S3 버킷을 구성하면 애플리케이션에서 발생한 모든 일에 대해 쉽게 구문 분석할 수 있는 변경 불가능한 로그를 갖게 됩니다.

이벤트를 쉽게 쿼리하기 위해 물론 선택한 데이터베이스(DynamoDB, Elasticsearch, Postgres)에 이벤트를 저장할 수 있습니다. 이벤트별로가 아니라 이벤트 배치로 데이터베이스를 채우려면 Firehose에서 새 로그 파일을 작성할 때 트리거되는 Lambda를 생성할 수 있습니다. 그런 다음 S3에서 파일을 읽고 줄 바꿈으로 분할하고 이벤트를 데이터베이스로 푸시할 수 있습니다.

좋은 웹페이지 즐겨찾기