如何使用 Amazon Linux 上的 Filebeat 和 Logstash 连接到 Amazon OpenSearch Service?

上次更新日期:2021 年 8 月 17 日

我正在尝试使用 Amazon Linux 上的 Logstash 连接到 Amazon OpenSearch Service(Amazon Elasticsearch Service 的后继者)集群。但一直出现错误。如何解决此问题?

简短描述

要使用 Logstash 连接到 Amazon OpenSearch Service,请执行以下步骤:

1.    设置安全端口(例如端口 443)以将日志转发到 OpenSearch Service。

2.    更新 FileBeat、Logstash 和 OpenSearch Service 配置

3.    将 FileBeat 安装到来源 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。确保您已正确安装和配置 YAML 配置文件。

4.    在单独的 Amazon EC2 实例上安装 Logstash,日志将从该实例发送。

如果您没有正确设置或配置 Logstash,您会收到以下错误之一:401 Authorization (401 授权) 错误、403 Forbidden (403 禁止访问) 错误或 x-pack 安装错误。

解决方法

设置安全端口

确保已设置安全端口,以便您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例可以将日志转发到 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

注意:使用 Filebeat 和 Logstash 的 OSS 版本,OpenSearch Service 的运行效果最佳。针对 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 才能运行。在此示例中,我们使用的是 Java 版本 8 (Open JDK 1.8),Logstash 的所有版本都支持该 Java 版本。有关受支持的 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 上的 Filebeat。此端口访问允许 Logstash 将请求转发到您的 Amazon 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 indices(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 Service、Logstash 和 OpenSearch 控制面板 (ELK),则您的管道如下所示:

Filbeat > Logstash > Amazon OpenSearch Service/Dashboards

401 Unauthorized(401 未授权)错误

Logstash 的 401 Unauthorized(401 未授权)错误表示您的 OpenSearch Service 域受到精细访问控制 (FGAC) 或 Amazon Cognito 的保护。FGAC 要求用户或角色发出签名请求,且必须在域的访问策略中定义这些请求。如果您收到 401 Authorization (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(403 禁止)错误

如果您使用和配置 Logstash 以向 OpenSearch Service 发送数据,您可能会收到 403 Forbidden(403 禁止)错误。当 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.    更新您的 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”

请注意,您的配置文件显示索引生命周期管理 (ILM) 设置(ilm.enabled ilm_enabled)都设置为“false”。在配置文件中禁用这些 ILM 设置将消除 x-pack 插件的启动错误。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?