问题描述
我想用Logstash监视包含单个文件的目录,每个文件描述一个事件并由每个键值对组成
> /var/log/dir/history.*
> head /var/log/dir/history.1234
key1 = value1
key2 = value2
...
kv过滤器插件可以解析键值对,但是输入需要某种多行才能将每个文件合并为一个事件。
如果事件在模式匹配处开始/结束,则多行输入插件还需要一个模式来匹配what-keyword。
由于我将整个文件视为一个事件,所以没有真正的正则表达式可以匹配。
如何使用Logstash的多行代码将一个文件作为一个事件解析为输入,还是针对该用例有更好的输入插件?
解决方法
从https://discuss.elastic.co/t/log-file-parsing-and-ingesting-into-es/247806/6那里获得解决方案
也就是说,要提取整个文件,诀窍是匹配不存在的模式
codec => multiline {
pattern => "^Spalanzanidonotmatchinanycase"
negate => true
what => "previous"
auto_flush_interval => 2
}