对于整个ELK设置部分,我还是一个新手,请耐心等待。
我想要做的是将存储在S3上的cloudtrail日志发送到本地托管的ELK设置中(我指的是非AWS)。我在设置中的任何地方都没有使用Filebeat。我相信使用它不是强制性的。 Logstash可以直接将数据传递到ES。
一旦数据在ES中,我只想在Kibana中将其可视化。
鉴于ELK已启动并正在运行,并且设置中不涉及Filebeat,到目前为止我已经尝试过:
使用S3 logstash插件
/etc/logstash/conf.d/aws_ct_s3.conf 的内容
input {
s3 {
access_key_id => "access_key_id"
bucket => "bucket_name_here"
secret_access_key => "secret_access_key"
prefix => "AWSLogs/<account_number>/CloudTrail/ap-southeast-1/2019/01/09"
sincedb_path => "/tmp/s3ctlogs.sincedb"
region => "us-east-2"
codec => "json"
add_field => { source => gzfiles }
}
}
output {
stdout { codec => json }
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "attack-%{+YYYY.MM.dd}"
}
}
当使用上述conf启动logstash时,我可以看到所有工作正常。使用谷歌浏览器的chrome插件,我可以看到文档不断被添加到指定的索引中。实际上,当我浏览它时,我也可以看到有我需要的数据。我也可以在Kibana上看到相同的内容。
每个gzip文件具有的数据格式为:
{
"Records": [
dictionary_D1,
dictionary_D2,
.
.
.
]
}
我希望上面的词典列表中的每个词典都是在Kibana中的单独事件。通过一些Google搜索,我了解可以使用split
过滤器来实现我想要的功能。现在我的aws_ct_s3.conf
看起来像:
input {
s3 {
access_key_id => "access_key_id"
bucket => "bucket_name_here"
secret_access_key => "secret_access_key"
prefix => "AWSLogs/<account_number>/CloudTrail/ap-southeast-1/2019/01/09"
sincedb_path => "/tmp/s3ctlogs.sincedb"
region => "us-east-2"
codec => "json"
add_field => { source => gzfiles }
}
}
filter {
split {
field => "Records"
}
}
output {
stdout { codec => json }
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "attack-%{+YYYY.MM.dd}"
}
}
事实上,我正在根据需要获取有关Kibana的数据。
现在问题是
在没有使用过滤器的情况下,Logstash从S3发送到Elasticsearch的文档数以GB为单位,而在应用过滤器后,仅大约有5000份文档就停止了。
我不知道我在做什么错。有人可以帮忙吗?
当前配置:
java -XshowSettings:vm => Max Heap Size: 8.9 GB
elasticsearch jvm options => max and min heap size: 6GB
logstash jvm options => max and min heap size: 2GB
ES version - 6.6.0
LS version - 6.6.0
Kibana version - 6.6.0