【发布时间】:2017-08-07 11:11:22
【问题描述】:
我在 Logstash 中使用 AWS Kinesis 进行源输入(每个触发事件都有 JSON,写入 Kinesis Stream) https://github.com/logstash-plugins/logstash-input-kinesis
我使用ES插件进行输出,数据完美进入Elasticsearch,我可以轻松查询数据。
但是,如果我为 Logstash 选择 AWS S3 输出插件,数据将发送到我选择的 S3 存储桶,但每个事件的 JSON 对象没有正确隔离,我无法对 S3 数据运行查询,因为JSON 既不嵌套也不被适当的分隔符分隔。当 S3 插件的输入是 JSON 时,这不会发生,对于简单的服务器日志,S3 使用“\n”分隔符将每个日志事件分成单独的行。
有人可以帮我吗?
Logstash 配置: 输入
input {
kinesis {
dynamodb app name
application_name => "logstash"
kinesis_stream_name => "data_stream"
type => "kinesis"
region => "us-west-2"
metrics => "cloudwatch"
}
}
过滤器 #不在此处显示,
输出
s3{
access_key_id => "XXXX"
secret_access_key => "XXX"
region => "us-west-2"
bucket => "rtest"
time_file => 1
prefix => "Logs/"
canned_acl => "private"
codec => json
}
我能否以某种方式使用分隔符选项,例如 delimiter => "\n" 根据分隔符分隔不同的 JSON 条目。
存储在存储桶中的 s3 文件中的 JSON 行示例如下:
{{timestamp:dasdsa,xyz:abc},{hello:bye}}{{timestamp:dasdsd,xzy:bcn},{hello:hi}}
因此,我可以使用两个 JSON 之间没有分隔符。如果您需要更多详细信息,请告诉我。
【问题讨论】:
标签: json logging amazon-s3 logstash elastic-stack