如何在 Amazon Linux 上使用 Filebeat 和 Logstash 連線至 Amazon OpenSearch Service?

上次更新日期:2022 年 2 月 2 日

我試圖使用 Amazon Linux 上的 Logstash 連線到 Amazon OpenSearch Service 叢集。但是,我持續收到作業錯誤訊息。如何解決此錯誤?

簡短描述

如要使用 Logstash 連接到 Amazon OpenSearch Service,請執行以下步驟:

1.    請設定您的安全連接埠 (例如:連接埠 443),將日誌轉寄至 Amazon OpenSearch Service。

2.    請更新您的 Filebeat、Logstash 和 OpenSearch Service 組態。

3.    請在您的來源 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝 Filebeat。請確保您已正確安裝並設定您的 YAML Config 檔案。

4.    在傳送日誌之單獨的 Amazon EC2 執行個體上安裝 Logstash。

如果您未正確設定或配置 Logstash,則會收到下列其中一個錯誤:401 授權錯誤、403 禁止錯誤或 x-pack 安裝錯誤。

解決方案

請設定您的安全連接埠

請確定您有設定安全連接埠,以便您的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體可以將日誌轉寄到 Amazon OpenSearch Service。

若要設定安全性連接埠以從 Logstash 轉寄日誌,請執行下列步驟:

1.    請建立一個已安裝 Apache 和 Filebeat 的 Amazon EC2 執行個體。Amazon EC2 執行個體必須能夠將日誌從 Logstash 轉寄到 Amazon OpenSearch Service。

2.    請確定您的 EC2 執行個體與 OpenSearch Service 的 Virtual Private Cloud (VPC) 位於同一個安全群組中。

3.    請確定您的安全群組中已開啟下列連接埠:80、443 和 5044。這些連接埠必須開啟,才能在 Logstash 和 OpenSearch Service 之間傳送資料。

請更新您的 FileBeat、Logstash 和 OpenSearch Service 組態

當您使用相同的 OSS 版本時,OpenSearch Service 執行效果最佳。因此,請嘗試為以下內容使用相容版本:

  • FileBeat x.x OSS 版
  • Logstash x.x OSS 版 (用於 Log4j 安全修補程式的 7.16.2 和 6.8.22 版)
  • OpenSearch Service x.x 版

要確保下載的軟體保持同步,請將 RPM 下載到每個 (單獨的) EC2 執行個體。要防止管道中出現單點故障,請務必避免在同一 EC2 執行個體上執行 Filebeat 和 Logstash 服務。

請注意:如果您使用的是 1.0 或更高版本的 Amazon OpenSearch Service,則請確保在首次啟動網域時啟用了相容模式。請注意,您只能透過 AWS 管理主控台啟用相容模式。

在來源 Amazon 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

在傳送日誌之單獨的 Amazon EC2 執行個體上安裝 Logstash

1.    請下載所需 Logstash 版本的 RPM 檔案:

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

此範例使用 6.7 版來符合 Amazon OpenSearch Service 和 Filebeat 的版本編號。

2.    在安裝 Logstash RPM 檔案之前,在您的 Amazon 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 才能執行。此範例使用 Java 第 8 版 (Open JDK 1.8),因為所有版本的 Logstash 皆支援該版本。如需有關 Java 和 Logstash 支援版本的詳細資訊,請參閱 Elasticsearch 網站上的支援矩陣圖

4.    請檢查 “/etc/filebeat” 和 ”/etc/logstash” 目錄以驗證組態檔案。

5.    對於 Filebeat,請將輸出更新為 Logstash 或 OpenSearch Service,並指定必須傳送日誌。然後,開始您的服務。

注意:若您嘗試使用 Filebeat 將範本上傳至 OpenSearch Dashboards,上傳會失敗。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 Service、Logstash 和 OpenSearch Dashboards (ELK),則您的管道會如下所示:

Filebeat > 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 禁止錯誤

當使用並配置 Logstash 來將資料傳送到 OpenSearch Service 時,您可能會收到 403 禁止錯誤。當 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.    請更新您的 Logstash 組態設定以使用 “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 外掛程式的啟動錯誤。

Amazon OpenSearch Service 是 Amazon Elasticsearch Service 的後繼者。


此文章是否有幫助?


您是否需要帳單或技術支援?