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

4 分钟阅读
0

我在 Amazon Linux 上使用 Filebeat 和 Logstash 连接到 Amazon OpenSearch Service 集群,但是收到了错误。

简短描述

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

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

2.    更新您的 Filebeat、Logstash 和 OpenSearch Service 配置。

3.    在您的源 Amazon Elastic Compute Cloud(Amazon EC2)实例上安装 Filebeat。确保正确安装和配置 YAML 配置文件。

4.    在从中发送日志的单独 Amazon EC2 实例上安装 Logstash。
**注意:**如果您没有正确设置或配置 Logstash,就会收到 401 授权错误、403 禁止访问错误或 x-pack 安装错误。

解决方法

设置您的安全端口

设置您的安全端口以转发来自 Logstash 的日志:

1.    创建一个 EC2 实例并安装好 Apache 和 Filebeat,以便该实例能够将日志从 Logstash 转发到 OpenSearch Service。

2.    确保您的 EC2 实例与 OpenSearch Service 的虚拟私有云(VPC)位于同一个安全组中。

3.    确保您的安全组中的端口 80、443 和 5044 处于打开状态,以便您能够在 Logstash 和 OpenSearch Service 之间发送数据。

更新您的 Filebeat、Logstash 和 OpenSearch Service 配置

当您使用的 Filebeat 和 Logstash 版本相同时,配备旧版 Elasticsearch 的 OpenSearch Service 运行效果最好。使用适合以下服务版本的兼容版本:

  • Filebeat 版本 x.x
  • Logstash 版本 x.x(Log4j 安全补丁的 v7.16.2 和 v6.8.22)
  • 配备旧版 Elasticsearch 版本 x.x 的 OpenSearch Service

在前面的示例中,版本号的“x.x”必须与您的配置相匹配。

注意:

  • 如果您使用的是兼容性模式的 OpenSearch Service 1.x,则 OpenSearch Service 报告的版本为 7.10。查看兼容性矩阵以选择正确版本的 Filebeat 和 Logstash。有关详细信息,请参阅 Elasticsearch 网站上的支持矩阵
  • 如果您使用的是 OpenSearch Service 版本 1.0 或更高版本,请确保在首次启动域时已启用兼容性模式。

为确保下载的软件保持同步,请将 RPM 下载到每个 EC2 实例。为防止管道出现单点故障,请勿在同一 EC2 实例上运行 Filebeat 和 Logstash。

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

**注意:**此示例使用了版本 7.16 的 Filebeat 和 Logstash,且激活了兼容性模式的 OpenSearch Service 版本 1.1。

2.    在您的 EC2 实例上安装 Java 或 OpenJDK:

yum install java-1.8.0-*

3.    运行 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.    安装适用于 OpenSearch Service 的 Logstash 插件:

bin/logstash-plugin install logstash-output-opensearch

5.    验证是否已安装适用于 OpenSearch 的 Logstash 插件:

bin/logstash-plugin list

**注意:**Logstash OSS 版本 7.12.1 同时支持 logstash-output-elasticsearchlogstash-output-opensearch 插件。Logstash OSS 版本 7.13 及更高版本仅支持 logstash-output-opensearch 插件。

6.    检查 /etc/filebeat/etc/logstash 目录以验证配置文件。

7.    对于 Filebeat,将输出更新到 Logstash 或 OpenSearch Service(从 GitHub 网站)。指定发送日志,然后启动您的服务。
**注意:**如果您尝试使用 Filebeat 将模板上传到 OpenSearch Dashboards,则上传会失败。Filebeat 假设您的集群支持 x-pack 插件。

8.    更新您的 Filebeat YAML 配置文件,将 Apache 访问日志发送到 Logstash。

YAML 文件示例:

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

9.    确保您的 Logstash 配置文件可以在端口 5044 上访问 Filebeat。通过访问端口 5044,Logstash 可以将请求转发到您的 OpenSearch Service VPC 端点。

Logstash 文件示例:

input {
  beats {
    port => 5044
  }
}

output {
  opensearch {
    hosts => ["https://domain-endpoint:443"]
    ssl => true
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    user => "my-username"
    password => "my-password"
  }
}

10.    确保您可以从您的 Logstash 实例访问 OpenSearch Service 端点:

curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com

11.    (可选)如果您激活了细粒度访问控制(FGAC),请运行以下命令:

curl -u my-username:my-password -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com

**注意:**如果您遇到超时问题,请确保您的 Logstash EC2 实例与您的 OpenSearch Service 的 VPC 位于同一个安全组中。此外,请确保您的安全组中的端口 80、443 和 5044 处于打开状态。

12.    运行以下命令在每个实例上启动 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)

13.    对您的 OpenSearch Service 域运行 cat indices 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、Logstash 和 OpenSearch Dashboards,则您的管道如下所示:

Filebeat > Logstash > Amazon OpenSearch Service/Dashboards

401 未授权错误

来自 Logstash 的 401 未授权错误表明您的 OpenSearch Service 域受到 FGAC 或 Amazon Cognito 的保护。FGAC 要求用户或角色签署请求,您必须在域的访问策略中定义这些请求。如果您收到 401 未授权错误,请在 Logstash 配置文件中启用 FGAC。

Logstash 文件示例:

output {
  opensearch {
    hosts => ["https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com:443"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    ilm_enabled => false
    user => "my-username"
    password => "my-password"
  }
}

403 禁止访问错误

当您使用 Logstash 向 OpenSearch Service 发送数据时,您可能会收到 403 禁止访问错误。当 Logstash 没有必要的权限并且无法验证您的 AWS Identity and Access Management(AWS IAM)身份时,就会出现此错误。要解决此问题,请使用您的 IAM 证书签署您的 OpenSearch Service 请求。

使用 Logstash 签署 OpenSearch 服务请求:

1.    安装适用于 OpenSearch Service 的 Logstash 插件:

bin/logstash-plugin install logstash-output-opensearch

2.    将 IAM 角色附加到实例:

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

3.    更新您的 Logstash 配置设置,使用“opensearch”Logstash 插件作为管道中的输出:

output {
  opensearch {
    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 插件的启动错误。

相关信息

使用 Logstash 将数据加载到 Amazon OpenSearch Service

AWS 官方
AWS 官方已更新 1 年前