如何使用 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.enabled 和 ilm_enabled)是否均已设置为“false”。 在配置文件中禁用这些 ILM 设置将消除 x-pack 插件的启动错误。