我使用logstash (v2.3.3-1)将大约800k个文档从S3索引到AWS ElasticSearch,有些文档被索引了2或3次,而不是只有一次。
这些文件是静态的(没有更新它们或触摸它们),它们非常小(每个大约1.1KB)。
进程在t2上运行需要很长时间。微(~ 1天)。
我使用的配置是:
input {
s3 {
bucket => "$BUCKETNAME"
codec => "json"
region => "$REGION"
access_key_id => '$KEY'
secret_access_key => '$KEY'
type => 's3'
}
}
filter {
if [type] == "s3" {
metrics {
meter => "events"
add_tag => "metric"
}
}
}
output {
if "metric" in [tags] {
stdout { codec => line {
format => "rate: %{[events][rate_1m]}"
}
}
} else {
amazon_es {
hosts => [$HOST]
region => "$REGION"
index => "$INDEXNAME"
aws_access_key_id => '$KEY'
aws_secret_access_key => '$KEY'
document_type => "$TYPE"
}
stdout { codec => rubydebug }
}
}
我已经用同样的问题运行了两次(到不同的ES索引中),并且每次索引>1x的文件都不同。
感谢收到任何建议!
s3输入非常脆弱。它记录最后一个文件被处理的时间,因此共享相同时间戳的任何文件都不会被处理,并且多个logstash实例不能从同一个bucket中读取。正如您所看到的,在确定要处理哪些文件时,它的速度也非常慢(这在很大程度上要归咎于amazon)。
s3只适用于我使用单个logstash读取文件,然后删除(或备份到另一个桶/文件夹)的文件,以保持原始桶尽可能空,然后设置sincedb_path为/dev/null。