logstash 将50 GBElasticSearch索引以JSON/text格式导出到S3

3lxsmp7m  于 2023-02-17  发布在  Logstash
关注(0)|答案(1)|浏览(271)

我需要将大量的Elasticsearch索引以JSON格式导出到S3,其中每个索引的大小大约为50GB。我已经研究了许多方法来实现这一点,但由于数据的大小,我需要最节省时间的方法。
我尝试了elasticdump,但是从测试结果来看,我认为它在将整个索引作为文件转储到S3之前会将其存储在内存中。因此,我需要一个内存超过50G的EC2示例。有没有办法让它转储一系列较小的文件,而不是一个巨大的文件?
还有其他的选择,比如使用Logstash,或者python的Elasticsearch库和可能的帮助器来完成操作。
最好的方法是什么?

h7appiyu

h7appiyu1#

ES到S3日志存储管道

要将原始json从Elasticsearch移动到S3存储桶,可以使用logstash管道中的s3输出。

input {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "myindex-*"
    query => '{ "query": { "match_all": {} } }'
  }
}

filter {
  # Your filter configuration here
}

output {
  s3 {
    bucket => "BUCKET_NAME"
    region => "us-east-1"
    access_key_id => "ACCESS_KEY"
    secret_access_key => "SECRET_KEY"
    canned_acl => "private"
    prefix => "logs/" # Optional 
    time_file => 5m
    codec => json_lines {}
    codec => plain {
      format => "%{[message]}"
    }
  }
}

S3输出插件-参数

*bucket:保存数据的S3 bucket的名称。
*region:S3存储桶所在的AWS区域。
*访问密钥ID:有权写入S3存储桶的AWS访问密钥ID。
*秘密访问密钥:与访问密钥ID关联的AWS机密访问密钥。
*prefix:要添加到已保存数据的对象键的前缀。
*时间文件:将数据刷新到S3之前缓冲数据的最长时间(秒)。
*codec:用于对要保存的数据进行编码的编解码器。在本例中,我们使用两个编解码器-json_lines对JSON数据进行编码,plain将数据格式化为字符串。

如果在ECS Container或EC2中运行此管道,则无需提供ACCESS_KEYSECRET_KEY,出于安全原因,可以创建角色并分配给ECS或EC2。

相关问题