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

최종 업데이트 날짜: 2022년 2월 2일

Amazon Linux에서 Logstash를 사용하여 Amazon OpenSearch Service 클러스터에 연결하려고 합니다. 그런데 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

Logstash를 사용하여 Amazon OpenSearch Service에 연결하려면 다음 단계를 수행하세요.

1.    로그를 OpenSearch Service로 전달하도록 보안 포트(예: 포트 443)를 설정하세요.

2.    Filebeat, Logstash 및 OpenSearch Service 구성을 업데이트하세요.

3.    소스 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 Filebeat를 설치하세요. YAML 구성 파일을 올바르게 설치하고 구성했는지 확인하세요.

4.    로그가 전송될 별도의 Amazon EC2 인스턴스에 Logstash를 설치하세요.

Logstash를 올바르게 설정하거나 구성하지 않은 경우 401 권한 부여(401 Authorization) 오류, 403 금지됨(403 Forbidden) 오류 또는 x-pack 설치 오류 중 하나가 발생합니다.

해결 방법

보안 포트 설정

Amazon EC2 인스턴스가 Amazon OpenSearch Service로 로그를 전달할 수 있도록 보안 포트를 설정해야 합니다.

Logstash에서 로그를 전달하도록 보안 포트를 설정하려면 다음 단계를 수행하세요.

1.    Apache와 Filebeat를 설치한 EC2 인스턴스를 생성하세요. EC2 인스턴스는 Logstash의 로그를 OpenSearch Service로 전달할 수 있어야 합니다.

2.    EC2 인스턴스가 OpenSearch Service의 Virtual Private Cloud(VPC)와 같은 보안 그룹에 상주하는지 확인하세요.

3.    보안 그룹에서 80, 443 및 5044 포트가 열려 있는지 확인하세요. Logstash와 OpenSearch Service 간에 데이터를 전송할 수 있도록 이러한 포트가 열려 있어야 합니다.

Filebeat, Logstash 및 OpenSearch Service 구성 업데이트

OpenSearch Service는 동일한 OSS 버전을 사용할 때 가장 잘 실행됩니다. 따라서 다음에 대해 호환되는 버전을 사용해 보세요.

  • Filebeat 버전 x.x OSS
  • Logstash 버전 x.x OSS(Log4j 보안 패치의 경우 v7.16.2 및 v6.8.22)
  • OpenSearch Service 버전 x.x

다운로드한 소프트웨어가 동기화 상태를 유지하도록 하려면 RPM을 별도의 각 EC2 인스턴스에 다운로드하세요. 파이프라인에서 단일 장애 지점을 방지하려면 동일한 EC2 인스턴스에서 Filebeat 및 Logstash 서비스를 실행하지 않는 것이 중요합니다.

참고: OpenSearch Service 버전 1.0 이상을 사용하는 경우 도메인을 처음 시작할 때 호환성 모드가 사용되는지 확인하세요. AWS Management Console을 통해서만 호환성 모드를 사용할 수 있습니다.

소스 EC2 인스턴스에 Filebeat 설치

1.    원하는 Filebeat 버전의 RPM을 다운로드하세요.

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-oss-7.16.2-x86_64.rpm

2.    Filebeat RPM 파일을 설치하세요.

rpm -ivh filebeat-oss-7.16.2-x86_64.rpm

로그가 전송될 별도의 EC2 인스턴스에 Logstash 설치

1.    원하는 Logstash 버전의 RPM 파일을 다운로드하세요.

wget https://artifacts.elastic.co/downloads/logstash/logstash-oss-7.16.2-x86_64.rpm

이 예제에서는 버전 6.7을 사용하여 OpenSearch Service 및 Filebeat의 버전 번호를 일치시킵니다.

2.    Logstash RPM 파일을 설치하기 전에 EC2 인스턴스에 Java 또는 OpenJDK를 설치하세요.

yum install java-1.8.0-*

3.    Java 설치 후 rpm 명령을 사용하여 Logstash용으로 다운로드한 RPM 파일을 설치합니다.

rpm -ivh logstash-oss-7.16.2-x86_64.rpm

참고: Logstash를 실행하려면 Java가 필요합니다. 이 예제에서는 모든 버전의 Logstash에서 지원하는 Java 버전 8(Open JDK 1.8)을 사용합니다. 지원되는 Java 및 Logstash 버전에 대한 자세한 내용은 Elasticsearch 웹 사이트에서 지원 매트릭스를 참조하세요.

4.    "/etc/filebeat" 및 "/etc/logstash" 디렉터리를 확인하여 구성 파일을 확인하세요.

5.    Filebeat의 경우 출력을 Logstash 또는 OpenSearch Service로 업데이트하고 로그를 전송하도록 지정하세요. 그런 다음 서비스를 시작하세요.

참고: Filebeat을 사용하여 OpenSearch 대시보드에 템플릿을 업로드하려고 하면 업로드가 실패합니다. Filebeat는 클러스터에 x-pack 플러그인 지원이 있다고 가정합니다.

6.    Filebeat YAML 구성 파일을 업데이트하여 Apache 액세스 로그를 Logstash로 보냅니다.

예를 들면 다음과 같습니다.

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
 
setup.template.settings:
 
index.number_of_shards: 1
index.codec: best_compression
 
#output.elasticsearch:
#hosts: ["vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com:443"]
#protocol: "https"
 
output.logstash:
  # The Logstash hosts
  hosts: [“Logstash-EC2-InstanceIP:5044"]
 
setup.ilm.enabled: false 
ilm.enabled: false

7.    Logstash 구성 파일이 포트 5044에서 Filebeat에 액세스 할 수 있는지 확인하세요. 이 포트 액세스를 통해 Logstash는 요청을 OpenSearch Service VPC 엔드포인트로 전달할 수 있습니다.

예를 들면 다음과 같습니다.

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["https://domain-endpoint:443"]
    ssl => true
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    user => "my-username"
    password => "my-password"
    ilm_enabled => false
  }
}

8.    각 인스턴스에서 다음 명령을 사용하여 Filebeat 및 Logstash 서비스를 시작합니다.

Filebeat:

systemctl start filebeat (service filebeat start)

Logstash:

cp /etc/logstash/logstash.conf /etc/logstash/conf.d/
systemctl start logstash (service logstash start)

9.    OpenSearch Service 도메인에 대한 cat 인덱스 API 호출을 실행하여 Filebeat 로그가 전송되고 있는지 확인하세요. 로그가 성공적으로 전송되면 다음과 같은 응답을 수신합니다.

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.16.2-2022.01.27 f97c4WnuQ-CtsAJJaJHUlg
1 1 1511515 0 249.7mb 124.7mb
green open .kibana_1                 Ioco6fUoSCGkaOvHNCL39g 1
1       1 0   7.4kb  
3.7kb

기본적으로 Filebeat 인덱스는 매일 회전합니다. 다음은 Filebeat 인덱스의 출력 예입니다.

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.16.2-2022.01.27 f97c4WnuQ-CtsAJJaJHUlg
1 1 1511515 0 249.7mb 124.7mb
green open .kibana_1                 Ioco6fUoSCGkaOvHNCL39g 1
1       1 0   7.4kb  
3.7kb
green open filebeat-7.16.2-2022.01.28 4i8W0smlRGGFcQOaDMxonA
1 1      89 0 207.1kb 118.1kb

Amazon EC2 Linux에서 Filebeat 서비스, Logstash 및 OpenSearch 대시보드(ELK)를 성공적으로 구성하면 파이프라인은 다음과 같습니다.

Filebeat > Logstash > Amazon OpenSearch Service/Dashboards

401 권한 없음(401 Unauthorized) 오류

Logstash의 401 권한 없음(401 Unauthorized) 오류는 OpenSearch Service 도메인이 FGAC(세분화된 액세스 제어) 또는 Amazon Cognito로 보호된다는 것을 나타냅니다. FGAC에는 사용자 또는 역할의 서명된 요청이 필요하며 이는 도메인의 액세스 정책에 정의되어야 합니다. 401 권한 없음(401 Unauthorized) 오류가 발생하면 Logstash 구성 파일에서 FGAC를 올바르게 사용 설정했는지 확인하세요.

예를 들면 다음과 같습니다.

output {
  elasticsearch {
    hosts => ["https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com:443"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    ilm_enabled => false
    user => "elastic"
    password => "changeme"
  }
}

403 Forbidden 오류

OpenSearch Service로 데이터를 전송하기 위해 Logstash를 사용하고 구성하면 403 금지됨(403 Forbidden) 오류가 발생할 수 있습니다. 이 오류는 Logstash에 필요한 권한이 없으며 AWS Identity Access Management(IAM) 자격 증명을 확인하지 못한 경우 발생합니다. 이 문제를 해결하려면 IAM 자격 증명을 사용하여 OpenSearch Service에 대한 요청에 서명해야 합니다.

Logstash를 사용하여 OpenSearch Service 요청에 서명하려면 다음 단계를 따르세요.

1.    OpenSearch Service용 Logstash 플러그인을 설치하세요.

bin/logstash-plugin install logstash-output-amazon_es

2.     다음과 같이 IAM 역할을 Amazon EC2 인스턴스에 연결하세요.

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "es:ESHttp*"
        ],
        "Resource": "[Amazon-OpenSearch-Domain-ARN]"
    }]
}

3.    “amazon_es” Logstash 플러그인을 파이프라인의 출력으로 사용하도록 Logstash 구성 설정을 업데이트합니다.

output {
  amazon_es {
    hosts => ["domain-endpoint"]
    ssl => true
    region => "us-east-1"
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

Logstash x-pack 설치 오류

Logstash를 시작할 때 x-pack에 오류가 발생하면 레지스트리 파일에서 x-pack 플러그 인을 수동으로 사용 중지하세요.

x-pack 플러그 인을 수동으로 사용 중지하려면 다음 단계를 따르세요.

1.    다음 파일을 여세요.

/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb

2.    load_xpack을 찾고 인라인으로 주석을 추가하세요.

"load_xpack unless LogStash::OSS" >> "#load_xpack unless LogStash::OSS"

참고: 구성 파일에서 ILM(Index Life Management) 설정(ilm.enabledilm_enabled)이 모두 "false"로 설정되어 있는지 확인하십시오. 구성 파일에서 이러한 ILM 설정을 사용 중지하면 x-pack 플러그 인의 시작 오류가 제거됩니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?