在 ASG 中为 logstash 集群 运行 配置 AWS 网络负载均衡器
configuring AWS Network Load Balancer for logstash cluster Running in ASG
我的目标是设置一个像我一样可扩展的通用 logstashcluster
在我的备份服务器中使用 filebeat 收集日志。
为此,我设置了一个指向 Logstash 集群的 ELB
(自动缩放组)
在 ELB 目标组设置中,我将健康检查端口设置为 9600,因为我的 logstash 运行 在 9600 端口。
但是当 ELB 运行健康检查时它说总是不健康的实例
- 我不确定我做错了什么
- 我的 logstash 配置
input {
beats {
type => "testlog"
port => "5066"
}
}
filter {
if [message] =~ /{.*}/ {
grok { match => { "message" => "(?<[@metadata][json]>({.*}))"} }
json { source => "[@metadata][json]" remove_field => [ "message" ] }
}
}
output {
stdout {
codec => rubydebug
}
amazon_es {
hosts => ["****************************"]
region => "us-east-1"
index => "filebeatsecondpipelinefinal1-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
- 我有多个管道设置,所以另一个配置使用这个
input {
beats {
type => "testlog"
port => "5044"
}
}
filter {
if [message] =~ /{.*}/ {
grok { match => { "message" => "(?<[@metadata][json]>({.*}))"} }
json { source => "[@metadata][json]" remove_field => [ "message" ] }
}
}
output {
stdout {
codec => rubydebug
}
amazon_es {
hosts => ["************************"]
region => "us-east-1"
index => "filebeatsecondpipelinefinal2-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
您需要对 ELB 和 Logstash 配置进行一些更改。
首先,端口 9600
是获取 logstash 指标的 REST 端口,您可以使用它来执行 healthcecks,但默认情况下,出于安全原因,logstash 将此端口绑定到环回 ip (127.0.0.0)。 0.1),您需要在 logstash.yml
中添加 http.host
配置,以将其绑定到实例的内部 IP。
http.host: "instance-local-ip"
您需要在每个 logstash 主机中执行此操作,您还可以在 logstash 中使用环境变量 config。
其次,您的ELB目标组使用了错误的端口。您的管道正在使用端口 5044
和 5066
,因此您需要一个用于端口 5044
的目标组和另一个用于端口 5066
的目标组,并且在为这些端口配置健康检查时目标组您需要选择覆盖端口选项并使用端口 9600
.
这样您的目标组将在端口 5044
或 5066
上侦听,但会在端口 9600
.
上对您的实例执行健康检查
我的目标是设置一个像我一样可扩展的通用 logstashcluster
在我的备份服务器中使用 filebeat 收集日志。为此,我设置了一个指向 Logstash 集群的 ELB (自动缩放组)
在 ELB 目标组设置中,我将健康检查端口设置为 9600,因为我的 logstash 运行 在 9600 端口。
但是当 ELB 运行健康检查时它说总是不健康的实例
- 我不确定我做错了什么
- 我的 logstash 配置
input {
beats {
type => "testlog"
port => "5066"
}
}
filter {
if [message] =~ /{.*}/ {
grok { match => { "message" => "(?<[@metadata][json]>({.*}))"} }
json { source => "[@metadata][json]" remove_field => [ "message" ] }
}
}
output {
stdout {
codec => rubydebug
}
amazon_es {
hosts => ["****************************"]
region => "us-east-1"
index => "filebeatsecondpipelinefinal1-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
- 我有多个管道设置,所以另一个配置使用这个
input {
beats {
type => "testlog"
port => "5044"
}
}
filter {
if [message] =~ /{.*}/ {
grok { match => { "message" => "(?<[@metadata][json]>({.*}))"} }
json { source => "[@metadata][json]" remove_field => [ "message" ] }
}
}
output {
stdout {
codec => rubydebug
}
amazon_es {
hosts => ["************************"]
region => "us-east-1"
index => "filebeatsecondpipelinefinal2-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
您需要对 ELB 和 Logstash 配置进行一些更改。
首先,端口 9600
是获取 logstash 指标的 REST 端口,您可以使用它来执行 healthcecks,但默认情况下,出于安全原因,logstash 将此端口绑定到环回 ip (127.0.0.0)。 0.1),您需要在 logstash.yml
中添加 http.host
配置,以将其绑定到实例的内部 IP。
http.host: "instance-local-ip"
您需要在每个 logstash 主机中执行此操作,您还可以在 logstash 中使用环境变量 config。
其次,您的ELB目标组使用了错误的端口。您的管道正在使用端口 5044
和 5066
,因此您需要一个用于端口 5044
的目标组和另一个用于端口 5066
的目标组,并且在为这些端口配置健康检查时目标组您需要选择覆盖端口选项并使用端口 9600
.
这样您的目标组将在端口 5044
或 5066
上侦听,但会在端口 9600
.