上次更新日期:2021 年 3 月 18 日
我正在尝试使用 Amazon Linux 上的 Logstash 连接到 Amazon Elasticsearch Service (Amazon ES) 集群。但一直出现错误。如何解决此问题?
简短描述要使用 Logstash 连接到 Amazon ES,请执行以下步骤:
1.设置安全端口(例如端口 443)以将日志转发到 Amazon ES。
2.更新 FileBeat、Logstash 和 Elasticsearch 配置。
3.将 FileBeats 安装到来源 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。确保您已正确安装和配置 YAML 和 CONF 文件。
4.在单独的 Amazon EC2 实例上安装 Logstash,日志将从该实例发送。
如果您没有正确设置或配置 Logstash,您会收到以下错误之一:401 Authorization (401 授权) 错误、403 Forbidden (403 禁止访问) 错误或 x-pack 安装错误。
解决方法 设置安全端口确保已设置安全端口,以便您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例可以将日志转发到 Amazon ES。
要将安全端口设置为从 Logstash 转发日志,请执行以下步骤:
1.创建已安装 Apache 和 Filebeat 的 Amazon EC2 实例。Amazon EC2 实例必须能够将日志从 Logstash 转发到 Amazon ES。
2.确保您的 EC2 实例与 Amazon ES 中的 Virtual Private Cloud (VPC) 位于同一安全组中。
3.确保安全组中的以下端口已打开:80、443 和 5044。这些端口必须处于打开状态,以便您可以在 Logstash 和 Amazon ES 之间发送数据。
更新 FileBeat、Logstash 和 Elasticsearch 配置确保为以下软件使用相同的版本号:
FileBeat 版本 x.x OSS Logstash 版本 x.x OSS Elasticsearch 版本 x.x注意:使用 Filebeat 和 Logstash 的 OSS 版本,Amazon ES 的运行效果最佳。针对 Filebeat、Logstash 和 Elasticsearch 使用相同的版本号也是最佳做法。
要确保更新后的配置全部同步,请将 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 来匹配 Elasticsearch 和 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 网站上的 Elasticsearch 支持矩阵。
4.通过查看“/etc/filebeat”和“/etc/logstash”目录来验证配置文件。
5.对于 Filebeat,请将输出更新为 Logstash 或 Elasticsearch,并指定必须发送的日志。然后,启动您的服务。
注意:如果您尝试使用 Filebeat 将模板上传到 Kibana,则上传会失败。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:
#protocol: "https"
output.logstash:
# The Logstash hosts
hosts:
setup.ilm.enabled: false
ilm.enabled: false
7.确保 Logstash 配置文件可以访问端口 5044 上的 Filebeat。此端口访问允许 Logstash 将请求转发到您的 Amazon ES VPC 终端节点。
例如:
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts =>
index => "%{}-%{}-%{+YYYY.MM.dd}"
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.向您的 Amazon ES 域运行 cat 索引 API 调用,以确认正在发送 Filebeat 日志。如果您的日志成功发送,您将收到以下响应:
curl -XGET https://vpc-examplestack-5crrfyysa2ratcl3ursmung33q.us-east-1.es.amazonaws.com/_cat/indices
green open filebeat-7.1.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-7.1.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-7.1.0-2020.02.13 4i8W0smlRGGFcQOaDMxonA
1 1 89 0 207.1kb 118.1kb
如果您使用 Amazon EC2 Linux 成功配置了Elasticsearch、Logstash 和 Kibana (ELK),则您的管道如下所示:
Filbeat > Logstash > AWS Elasticsearch/Kibana
401 Authorization (401 未授权) 错误
Logstash 的 401 Authorization (401 未授权) 错误表示您的 Amazon ES 域受到精细访问控制 (FGAC) 或 Amazon Cognito 的保护。FGAC 要求用户或角色发出签名请求,且必须在域的访问策略中定义这些请求。如果您收到 401 Authorization (401 未授权) 错误,请确保在 Logstash 配置文件中正确启用了 FGAC。
例如:
output {
elasticsearch {
hosts =>
index => "%{}-%{}-%{+YYYY.MM.dd}"
ilm_enabled => false
user => "elastic"
password => "changeme"
}
}
403 Forbidden (403 禁止访问) 错误
如果您使用和配置 Logstash 以向 Amazon ES 发送数据,您可能会收到 403 Forbidden (403 禁止访问) 错误。Logstash 没有正确访问权限时会发生此错误。要解决此问题,请务必使用 AWS Identity Access Management (IAM) 凭证签署向 Amazon ES 发出的请求。
要使用 Logstash 签署 Amazon ES 请求,请按照以下步骤操作:
1.安装 Amazon ES 的 Logstash 插件:
bin/logstash-plugin install logstash-output-amazon_es
2. 将 IAM 角色附加到 Amazon EC2 实例,如下所示:
{
"Version": "2012-10-17",
"Statement": ,
"Resource": ""
}
]
}
3.更新您的 Amazon ES 配置设置以使用“amazon_es”Logstash 插件
output {
amazon_es {
hosts =>
ssl => true
region => "us-east-1"
index => "%{}-%{}-%{+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 插件的启动错误。