我正在使用AWS Kinesis作为源输入(在每个触发事件中都有JSON,写入Kinesis Stream)使用Logstash https://github.com/logstash-plugins/logstash-input-kinesis
我正在使用ES插件进行输出,数据完全进入Elasticsearch,我可以轻松查询数据。
但是,如果我为Logstash选择AWS S3输出插件,数据将被发送到我选择的S3存储桶,但每个事件的JSON对象没有正确隔离,我无法对S3数据运行查询,因为JSON既不嵌套也不由适当的Delimeter分隔。当S3插件的输入是JSON时,这不会发生,对于简单的服务器日志,S3使用“\ n”分隔符将每个日志事件分成单独的行。
有人可以帮助我吗?
Logstash配置: 的 INPUT
input {
kinesis {
dynamodb app name
application_name => "logstash"
kinesis_stream_name => "data_stream"
type => "kinesis"
region => "us-west-2"
metrics => "cloudwatch"
}
}
过滤器 #NOT在这里显示,
输出
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之间没有分隔符。如果您需要更多详细信息,请告诉我们。
答案 0 :(得分:0)
您尝试过
code => "json"
输出代码的最后一行?您需要报价。