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

최종 업데이트 날짜: 2021년 8월 17일

Amazon Linux에서 Logstash를 사용하여 Amazon OpenSearch Service(Amazon Elasticsearch 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 Authorization 오류, 403 Forbidden 오류 또는 x-pack 설치 오류 중 하나가 발생합니다.

해결 방법

보안 포트 설정

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

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

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

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

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

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

다음에 같은 버전 번호가 사용되고 있는지 확인하세요.

  • FileBeat 버전 x.x OSS
  • Logstash 버전 x.x OSS
  • OpenSearch Service 버전 x.x

참고: OpenSearch Service는 Filebeat 및 Logstash의 OSS 버전을 사용할 때 가장 잘 실행됩니다. 또한, Filebeat, Logstash 및 OpenSearch Service에 같은 버전 번호를 사용하는 것이 가장 좋습니다.

업데이트된 구성이 모두 동기화되었는지 확인하려면 각(개별) 인스턴스에 RPM을 다운로드하세요. 단일 장애 지점을 방지하려면 같은 인스턴스에서 RPM 설치를 실행하지 않는 것이 중요합니다. 그런 다음 다운로드한 파일을 사용할 수 있는지 확인하세요.

원본 Amazon EC2 인스턴스에 Filebeat 설치

1.    원하는 버전의 Filebeat RPM 다운로드:

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

2.    Filebeat RPM 파일 설치:

rpm -ivh filebeat-oss-6.7.0-x86_64.rpm

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

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

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

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

2.    rpm 명령을 사용하여 Logstash 용으로 다운로드 한 RPM 파일 설치:

rpm -ivh logstash-oss-6.7.0.rpm

3.    Amazon EC2 인스턴스에 Java 또는 OpenJDK 설치:

yum install java-1.8.0-*

참고: 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
   -
/var/log/httpd/access_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에서 Filebeats에 액세스 할 수 있는지 확인하세요. 이 포트 액세스를 통해 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 filbeat (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-6.7.0-2020.02.12 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-6.7.0-2020.02.12 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-6.7.0-2020.02.13 4i8W0smlRGGFcQOaDMxonA
1 1      89 0 207.1kb 118.1kb

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

Filbeat > Logstash > Amazon OpenSearch Service/Dashboards

401 권한 없음 오류

Logstash의 401 권한 없음 오류는 OpenSearch Service 도메인이 FGAC(세분화된 액세스 제어) 또는 Amazon Cognito로 보호된다는 것을 나타냅니다. FGAC에는 사용자 또는 역할의 서명된 요청이 필요하며 이는 도메인의 액세스 정책에 정의되어야 합니다. 401 권한 없음 오류가 발생하면 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 Forbidden 오류가 발생할 수 있습니다. 이 오류는 Logstash에 필요한 권한이 없으며 IAM 자격 증명을 확인하지 못한 경우에 발생합니다. 이 문제를 해결하려면 AWS Identity Access Management(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”

구성 파일은 Index Life Management (ILM) 설정( ilm.enabled ilm_enabled )이 모두 "false"로 설정되어 있음을 보여줍니다. 구성 파일에서 이러한 ILM 설정을 비활성화하면 x-pack 플러그인의 시작 오류가 제거됩니다.


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


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