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

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

我正在尝试使用 Amazon Linux 上的 Logstash 连接到 Amazon OpenSearch 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 安装错误。

解决方法

设置安全端口

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

当你使用相同的 OSS 版本时,OpenSearch Service 的运行效果最佳。因此,请尝试使用兼容版本进行以下操作:

  • 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 管理控制台启用兼容模式。

在源 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 才能运行。此示例使用 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
  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 indices(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 控制面板 (ELK),则您的管道如下所示:

Filebeat > 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 没有必要的权限,且未能验证您的 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"

注意:您可以检查配置文件,确认索引生命周期管理(ILM)设置(ilm.enabledilm_enabled)是否均已设置为“false”。 在配置文件中禁用这些 ILM 设置将消除 x-pack 插件的启动错误。


这篇文章对您有帮助吗?


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