사용자 정의 코드 없이 클라우드 워치 로그 흐름을 Elasticsearch로 전송하는 방법

간단한 소개


이 글에서 로그를 AWS CloudWatch에서 Elasticsearch로 보내는 방법을 공유하고 싶습니다. 코드를 한 줄 작성하지 않아도 됩니다.

나의 용례


내 측 프로젝트에서, 나는 Lambdas와Fargate 작업의 조합을 사용하는데, 이 두 가지 작업 모두 JSON 형식의 로그를CloudWatch에 쓴다.
CloudWatch를 사용하여 프로그램 오류를 디버깅하고 Elasticsearch를 사용하여 사용자 정의 이벤트를 저장합니다. 예를 들어 사용자 조작 (예를 들어 사용자 X가 만든 자원 Y) 을 사용합니다.
Elasticsearch 조회를 통해 플랫폼 내 사용자가 실행하는 모든 동작의 보기를 만들 수 있습니다.

나는 사용자 조작 시간선 보기를 사용하여 플랫폼의 사용 상황을 감시한다.나는 또한 사용자에게 이 정보를 공개함으로써 그들이 제품에서 무엇을 하고 언제 무엇을 하는지에 대한 역사적 거래를 하게 되었다.
나는 간단한 JSON 모드를 제시하여 동작을 표시하고, 이 이벤트가 발생할 때 클라우드 워치로 출력할 수 있도록 응용 프로그램을 검사했다.
나는 위에서 클라우드 워치 로그를 Elasticsearch로 전송해 달라고 요구한 이유를 언급했다.보안이나 다른 가능한 이유로 모든 로그를 다른 시스템이나 후처리 로그로 백업하는 등 다른 버전이 있을 수 있습니다.

내 솔루션:Functionbeat 사용



나는 이상적인 상황에서 이 목표를 실현하고 싶다. 나중에 유지보수해야 할 사용자 정의 코드를 작성할 필요가 없다.
만약 내가 처음으로 이런 요구를 가진 사람이 아니라면, 나는 주위를 둘러보고, 사람들이 어떻게 Elasticsearch를 통해 로그를 복제하는지 보았다.내가 본 가장 흔한 패턴은 관심 있는 CloudWatch 로그 그룹에 Lambda 함수를 구독하는 것입니다.
자신의 Lambda를 구축하는 복잡성은 수신, 처리, 발표 코드를 작성하고, 이 Lambda를 수십 개 혹은 수백 개의 로그 그룹에 구독하는 유연한 자동화 메커니즘을 만드는 데 있다.
몇몇 연구를 통해 나는 우연히 Elastic에서 온 소스 공급 도구인 Functionbeat를 발견했다.
말 그대로'펀션 비트'는 엘라스틱이 제공하고 Go로 작성해 AWS 계정에 배치할 수 있는 미리 제작된 람바다 함수다.이 프로필을 사용하면 Functionbeat에서 어떤 CloudWatch 로그 그룹을 구독해야 하는지 정의할 수 있습니다.
기록을 배제하거나 특정 필드를 삭제하거나 기록에 변환을 적용하는 처리 규칙을 정의할 수 있습니다.
본질적으로 이것은 기존의 해결 방안으로 지역사회가 인정하는 방법에 따라 처음부터 작성할 염려가 없다.
이제 코드와 예시 설정을 봅시다!

Functionbeat 사용 방법


this link에 따라 공식 설치 설명을 받습니다.요컨대 내가 한 일은 다음과 같다.

1. 전용 저장소 만들기


Functionbeat의 바이너리 파일과 구성을 호스팅해야 합니다.또한 업데이트를 신속하게 배포하기 위해 CI/CD 파이프라인을 설치해야 할 수도 있습니다.

2-Functionbeat 다운로드


Elastic 공식 사이트에서 Functionbeat를 다운로드합니다.새로운 저장소 a에 바이너리 파일 넣기

3. 구성

functionbeat.yml에서 제공한 설정 예시를 보고 functionbeat.reference.yml를 만들고 Elasticsearch 단점과 증거를 채우기 시작합니다.
나는 Elastic cloud를 사용하지만, 또한 Elasticsearch의 자체 위탁 관리 실례로 유동적으로 전송할 수 있다.자세한 내용은 this step를 참조하십시오.
이 단계에서 Functionbeat에 가입할 CloudWatch 로그 그룹을 정의합니다
이것은 샘플 구성 파일입니다.
# functionbeat.yml
functionbeat.provider.aws.endpoint: "s3.amazonaws.com"
functionbeat.provider.aws.deploy_bucket: "${YOUR_AWS_ACCOUNT_ID}-functionbeat-deploy"
functionbeat.provider.aws.access_key_id: '${AWS_ACCESS_KEY_ID}'
functionbeat.provider.aws.secret_access_key: '${AWS_SECRET_ACCESS_KEY}'
functionbeat.provider.aws.functions:
  - name: functionbeat
    enabled: true
    type: cloudwatch_logs
    description: "Ships CloudWatch logs to Elasticsearch"
    triggers:
      - log_group_name: /aws/lambda/lambda-A
      - log_group_name: /aws/lambda/lambda-B
      - log_group_name: /aws/lambda/lambda-C

    processors:
      - drop_event:
          when:
            contains:
              message: "START RequestId:"
      - drop_event:
          when:
            contains:
              message: "REPORT RequestId:"
      - drop_event:
          when:
            contains:
              message: "END RequestId:"
      - drop_event:
          when:
            contains:
              message: "ELB-HealthChecker/2.0"

      - decode_json_fields:
          fields: ["message"]
          process_array: false
          max_depth: 1
          target: ""
          overwrite_keys: false

      - drop_fields:
          fields:
            - private
            - host.name
            - hostname
            - v
            - time
            - pid
            - id
            - message

cloud.id: "${ES_ID}"
cloud.auth: "elastic:${ES_PWD}"

#============================== Setup ILM =====================================

# Configure Index Lifecycle Management Index Lifecycle Management creates a
# write alias and adds additional settings to the template.
# The elasticsearch.output.index setting will be replaced with the write alias
# if ILM is enabled.

# Enabled ILM support. Valid values are true, false, and auto. The beat will
# detect availabilty of Index Lifecycle Management in Elasticsearch and enable
# or disable ILM support.
setup.ilm.enabled: auto

# Configure the ILM write alias name.
setup.ilm.rollover_alias: "functionbeat"

# Configure rollover index pattern.
setup.ilm.pattern: "{now/d}-000001"

4. 배포


Functionbeat에는 CloudFormation 구성이 포함되어 있어 AWS 계정에 쉽게 배치할 수 있습니다.
./functionbeat setup -e
./functionbeat -v -e -d "*" deploy functionbeat
설정에 오류가 없으면, Functionbeat는 배치 후 지정한 CloudWatch 로그 그룹을 구독합니다.
이제 로그를 만들고 Elasticsearch에서 복사를 볼 때가 되었습니다.

문제 해결


Elasticsearch에서 로그를 볼 수 없으면, Lambda의 로그를 보고 Functionbeat 실행을 디버깅할 수 있습니다.가장 가능성이 높은 것은 설정 문제에 직면하고 있지만, Functionbeat는 보통 어떤 문제가 발생했는지 알려 줍니다.

고려 요소


✅ 나는 이미 이 방법을 성공적으로 사용한 지 12개월이 넘었는데, 나는 매우 만족한다.
✨ SQS 및 모션 지원과 같은 다른 기능이 만들어진 이후 추가되었습니다.
🚩 내가 그것을 사용하기 시작한 이래로, Elastic는 비교적 새로운 버전을 발표했는데, 업그레이드가 항상 순조롭지 않다.
마지막으로 Functionbeat를 사용하기로 결정하면 클라우드 워치 경보를 작성해서 상태를 감시하는 것을 권장합니다.
Functionbeat를 최종적으로 사용하려면 다음과 같은 메시지를 남겨 주십시오.)

좋은 웹페이지 즐겨찾기