codec支持的编码格式常见有plain、json、json_lines等。
1、plain
plain是最简单的编码插件,你输入什么信息,就返回什么信息,诸如上面的例子中的timestamp、type等都不会带过来。
input {
stdin {
}
}
output {
stdout {
codec => plain
}
}
2、json、json_lines
有时候logstash采集的日志是JSON格式,那我们可以在input字段加入codec => json来进行解析,这样就可以根据具体内容生成字段,方便分析和储存。如果想让logstash输出为json格式,可以在output字段加入codec=>json。下面是一个包含json编码的时间配置文件:
input {
stdin {
}
}
output {
stdout {
codec => json
}
}
你会发现插件是json的时候,会自带一些信息,诸如host、@version、@timestamp。json的每个字段都是key:value格式,多个字段之间通过逗号分隔。这种输出比较长,因此我们采用json_lines编码格式稍微好一点。json_lines会把Json数据以每个key:value一行的形式展开出来。
3、multiline
logstash处理事件默认是单行的,如果要把多行数据进行合并,那么需要使用multiline插件。
multiline可以配置在input当中,也可以配置在filter当中。
Input中配置如下:
input {
file {
type => "jinyiweiapi" # 稍后说作用
path => "/home/dockermount/jinyiwei/logs/catalina.out" # 日志路径
codec => multiline {
pattern => "^\[" # 正则表达式,匹配开头为 "[" 的为一条日志的开始
negate => true # true表示若pattern正则匹配失败,则执行合并;false表示若pattern正则匹配失败,则执行合并。默认为false
what => "previous" # previous表示跟前面的行合并;next表示跟后面的行合并
}
}
Filter中配置如下:
filter {
multiline {
pattern => "^\["
negate => true
what => "previous"
}
}