Filebeat를 이용하여 AWS Opensearch로 로그 보내는 방법과 401에러 해결하는 방법

3분 분량
콘텐츠 수준: 중급
0

VPC에 설치되어있는 AWS Opensearch로 로그를 Filebeat를 이용하여 전달 하는 방법과 Filebeat를 이용하여 401에러가 발생할시에 해결할 방법에 대해서 안내해드립니다.

목적

Filebeat는 경량 데이터 수집기로서 다음과 같은 주요 사용 목적이 있습니다. 로그 데이터 수집, 로그 데이터 전송, 실시간 데이터 전송 등 다양한 측면에서 사용됩니다. 해당 기사에서는 3rd party 프로그램인 Filebeat를 이용하여 데이터 수집을 하여 Opensearch로 저장하는 방법에 대해서 알려드립니다.

Opensearch 클러스터 생성 및 셋팅

  • Opensearch 클러스터 : Fine-grained Access Control 활성화 및 VPC에 생성합니다. [1]
  • 보안그룹: 443 포트 및 생성할 EC2 - Linux 인스턴스의 IP 를 열어줍니다.
  • Access policy :아래와 같이 설정합니다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:<region>:<account_id>:domain/<domain_name>/*"
    }
  ]
}
  • 대시보드 Dev Tool을 이용하여 아래 API를 사용하여 override_main_response_version 파라미터를 활성화합니다.
PUT /_cluster/settings
{
 "persistent" : {
 "compatibility.override_main_response_version" : true
 }
}

EC2 Linux 설치 및 셋팅

  • Opensearch와 동일한 VPC를 사용하는 EC2 Linux 인스턴스를 생성합니다.
  • 아래의 명령어를 통해 최신버전의 Filebeat 설치합니다. [2]
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-oss-7.12.1-linux-x86_64.tar.gz
  • 다운로드한 파일을 압축해제합니다.
tar xzvf filebeat-oss-7.12.1-linux-x86_64.tar.gz
  • Opensearch 로 보낼 데이터를 담는 폴더 생성합니다.
mkdir /home/ec2-user/dummy-data
  • 아래의 filebeat.yml 구성 예제를 참조하여 고객님의 사용 사례에 맞게 변경해주세요. 다음 예제는 임의의 로그 폴더 dummy-data에 로그들을 클러스터로 인덱싱하는 구성입니다.:
filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /home/ec2-user/dummy-data/*

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

output.elasticsearch:
  hosts: ["https://vpc-xxxxxxxxx.<region>.es.amazonaws.com:443"]
  username: "username"
  password: "password"
  indices:
    - index: "filebeat"

setup.ilm.enabled: false

setup.template.name : "filebeat"
setup.template.pattern: "filebeat-*"

seccomp:
  default_action: allow
  syscalls:
  - action: allow
    names:
    - rseq
  • 아래의 명령어를 사용하여 구성 파일 구문을 테스트합니다.
./filebeat test config -e
  • 아래 명령어를 사용하여 Filebeat를 시작합니다.
./filebeat -e -c filebeat.yml

Opensearch에서 확인

  • Devtools에서 아래와 같은 커맨드를 이용하여 로그가 정상적으로 들어간것을 확인할 수 있습니다.
GET filebeat/_search
{
  "query": {
    "match_all": {}
  }
}

여기에 이미지 설명 입력

401 해결 방법

Logstash에서 발생한 401 Unauthorize 오류는 OpenSearch Service 도메인이 FGAC 또는 Amazon Cognito에 의해 보호되고 있음을 나타냅니다. FGAC에는 도메인의 액세스 정책에서 정의해야 하는 사용자 또는 역할의 서명된 요청이 필요합니다. 사용자 또는 역할의 서명된 요청이 잘못 설정된 경우 아래와 같은 에러가 발생합니다. [3]

ERROR [publisher_pipeline_output] pipeline/output.go:154 Failed to connect to backoff(elasticsearch(https://vpc-test-domain.....east-2.es.amazonaws.com:443)): 401 Unauthorized:

따라서 FGAC에서 사용하는 아이디와 패스워드가 맞는지 filebeat.yml을 수정하여 Opensearch에서 사용하는 계정을 사용하여 수정합니다.

참고 자료

[1] VPC 내에서 아마존 OpenSearch 서비스 도메인 시작

https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/vpc.html

[2] Filebeat OSS 7.12.1

https://www.elastic.co/downloads/past-releases/filebeat-oss-7-12-1

[3] Amazon Linux에서 Filebeat와 Logstash를 사용하여 OpenSearch Service에 연결하려면 어떻게 해야 하나요?

https://repost.aws/ko/knowledge-center/opensearch-connect-filebeat-logstash

profile pictureAWS
지원 엔지니어
게시됨 2달 전318회 조회
댓글 없음

관련 콘텐츠