将Cloudtrail gzip日志从S3发送到ElasticSearch

时间:2019-02-03 12:27:33

标签: elasticsearch amazon-s3 logstash amazon-cloudtrail

对于整个ELK设置部分,我还是一个新手,请耐心等待。

我想要做的是将存储在S3上的cloudtrail日志发送到本地托管的ELK设置中(我指的是非AWS)。我在设置中的任何地方都没有使用Filebeat。我相信使用它不是强制性的。 Logstash可以直接将数据传递到ES。

  1. 我在这里吗?

一旦数据在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

这是当前堆使用情况的样子: enter image description here

0 个答案:

没有答案