Amazon Linux で Filebeat と Logstash を使って Amazon Elasticsearch Service に接続する方法を教えてください。

最終更新日: 2021 年 3 月 18 日

Amazon Linux で Logstash を使って Amazon Elasticsearch Service (Amazon ES) クラスターに接続したいのですが、何度もエラーが発生します。解決方法を教えてください。

簡単な説明

Logstash を使って Amazon ES に接続するときは、次の手順を実行します。

1.    Amazon ES にログを転送するためのセキュリティポート (ポート 443 など) を設定します。

2.    FileBeat、Logstash、Elasticsearch のそれぞれの設定を更新します。

3.    FileBeat をソースの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにインストールします。YAML と CONF ファイルが正しくインストールされ、設定されていることを確認します。

4.    Logstash を、ログの送信元となる個別の Amazon EC2 インスタンスにインストールします。

Logstash が正しくセットアップまたは設定されていないと、次のいずれかのエラーが表示されます: 401 Authorization エラー、403 Forbidden エラー、x-pack インストールエラー。

解決方法

セキュリティポートをセットアップする

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが Amazon ES にログを転送できるようにセキュリティポートをセットアップします。

Logstash からログを転送するようにセキュリティポートをセットアップするには、次の手順を実行します。

1.    Apache と Filebeat がインストールされている Amazon EC2 インスタンスを作成します。Amazon EC2 インスタンスは、Logstash から Amazon ES にログを転送できる必要があります。

2.    EC2 インスタンスが Amazon ES の仮想プライベートクラウド (VPC) と同じセキュリティグループ内にあることを確認します。

3.    セキュリティグループで 80、443、5044 のポートが開いていることを確認します。これらのポートは、Logstash と Amazon ES 間でデータを送信できるよう開けておきます。

FileBeat、Logstash、Elasticsearch のそれぞれの設定を更新する

以下で、同じバージョン番号が使用されていることを確認します。

  • FileBeat バージョン x.x OSS
  • Logstash バージョン x.x OSS
  • Elasticsearch バージョン x.x

注: Amazon ES は、Filebeat と Logstash の OSS バージョンを使用するときに最適です。Filebeat、Logstash、Elasticsearch に同じバージョン番号を使用することもベストプラクティスです。

更新された設定がすべて同期していることを確認するには、RPM を各(個別の) インスタンスにダウンロードします。単一障害点を防ぐには、同じインスタンスで RPM インストールを実行しないことが重要です。次に、ダウンロードしたファイルが使用可能であることを確認します。

Filebeat をソースの Amazon EC2 インスタンスにインストールする

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

Logstash を、ログの送信元となる個別の Amazon EC2 インスタンスにインストールします。

1.    Logstash の希望するバージョンの RPM ファイルをダウンロードします。

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

この例では、バージョン 6.7 を使用して Elasticsearch と 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 が必要です。この例では Java のバージョン 8 (Open JDK 1.8) を使用しています。これは、Logstash のすべてのバージョンでサポートされています。Java と Logstash のサポートされているバージョンの詳細については、Elasticsearch のウェブサイトにある Elasticsearch Support Matrix を参照してください。

4.    「/etc/filebeat」ディレクトリと「/etc/logstash」ディレクトリをチェックして、設定ファイルを確認します。

5.    Filebeat の場合、出力を Logstash か Elasticsearch のいずれかに更新し、ログを送信するよう指定します。その後、サービスを開始します。

注: Filebeat を使って Kibana にテンプレートをアップロードしようとすると失敗します。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 の Filebeat にアクセスできることを確認します。このポートアクセスにより、Logstash は Amazon ES VPC エンドポイントにリクエストを転送することができます。

例:

input {
  beats {
    port => 5044
  }
}
 
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
  }
}

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.    Amazon ES ドメインで cat indices の API コールを実行し、Filebeat のログが送信されていることを確認します。ログが正常に送信されると、次の応答が表示されます。

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.1.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-7.1.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-7.1.0-2020.02.13 4i8W0smlRGGFcQOaDMxonA
1 1      89 0 207.1kb 118.1kb

Amazon EC2 Linux で Elasticsearch、Logstash、Kibana (ELK) を正常に設定すると、パイプラインは次のようになります。

Filbeat > Logstash > AWS Elasticsearch/Kibana

401 Unauthorized エラー

Logstash の 401 Unauthorized エラーは、Amazon ES ドメインがきめ細かなアクセスコントロール (FGAC) または Amazon Cognito によって保護されていることを示します。FGAC には、ユーザーまたはロールによる署名付きリクエストが必要です。これは、ドメインのアクセスポリシーで定義されている必要があります。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 エラー

Logstash を使用して Amazon ES にデータを送信するように設定すると、403 Forbidden エラーが表示されます。このエラーは、Logstash に適切にアクセスされていないときに表示されます。この問題を解決するには、AWS Identity Access Management (IAM) 認証情報を使って Amazon ES へのリクエストに署名します。

Logstash を使って Amazon ES リクエストに署名するには、次の手順に従います。

1.    Amazon ES 用の Logstash プラグインをインストールします。

bin/logstash-plugin install logstash-output-amazon_es

2.     次のように、Amazon EC2 インスタンスに IAM ロールをアタッチします。

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

3.    Amazon ES の設定を更新し、「amazon_es」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.enabledilm_enabled) がどちらも「false」に設定されているはずです。設定ファイルでこれらの ILM 設定を無効にすることで、x-pack プラグインのスタートアップ時のエラーを解消できます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?