LogStash 使用键=值、逗号进行剖析
LogStash dissect with key=value, comma
我有一个包含性能和统计数据的日志模式。我已将 LogStash 配置为将此数据解析为 csv 格式,以便将值保存到 ES。
<1>,www1,3,BISTATS,SCAN,330,712.6,2035,17.3,221.4,656.3
我正在使用以下 LogSTash 过滤器并获得所需的结果..
grok {
match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
overwrite => [ "Message" ]
}
csv {
separator => ","
columns => ["pan_scan","pf01","pf02","pf03","kk04","uy05","xd06"]
}
只要列的顺序没有弄乱,这对我来说目前效果很好。
但是我想让这个日志文件更有意义,并在原始日志中包含每个列名。示例-- <1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3
这样我就可以在过程中继续插入或追加 key/values 而不会损坏数据。 (使用 LogStash5.3)
通过使用@baudsp 的建议,我能够制定以下内容。我完全删除了 csv{}
块并将其替换为 kv{}
块。 kv{}
自动创建了所有键值,让我只能 mutate{}
将字段转换为浮点数和整数。
json {
source => "message"
remove_field => [ "message", "headers" ]
}
date {
match => [ "timestamp", "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'" ]
target => "timestamp"
}
grok {
match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
overwrite => [ "Message" ]
}
kv {
allow_duplicate_values => false
field_split_pattern => ","
}
使用上面的块,我可以在消息的任何位置插入 K=V 对。再次感谢所有帮助。我已经为任何试图完成此任务的人添加了示例代码块。
注意:我使用 NLog 进行日志记录,它会产生 JSON 输出。从 C# 代码来看,格式如下所示。
var logger = NLog.LogManager.GetCurrentClassLogger();
logger.ExtendedInfo("<1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3");
我有一个包含性能和统计数据的日志模式。我已将 LogStash 配置为将此数据解析为 csv 格式,以便将值保存到 ES。
<1>,www1,3,BISTATS,SCAN,330,712.6,2035,17.3,221.4,656.3
我正在使用以下 LogSTash 过滤器并获得所需的结果..
grok {
match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
overwrite => [ "Message" ]
}
csv {
separator => ","
columns => ["pan_scan","pf01","pf02","pf03","kk04","uy05","xd06"]
}
只要列的顺序没有弄乱,这对我来说目前效果很好。
但是我想让这个日志文件更有意义,并在原始日志中包含每个列名。示例-- <1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3
这样我就可以在过程中继续插入或追加 key/values 而不会损坏数据。 (使用 LogStash5.3)
通过使用@baudsp 的建议,我能够制定以下内容。我完全删除了 csv{}
块并将其替换为 kv{}
块。 kv{}
自动创建了所有键值,让我只能 mutate{}
将字段转换为浮点数和整数。
json {
source => "message"
remove_field => [ "message", "headers" ]
}
date {
match => [ "timestamp", "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'" ]
target => "timestamp"
}
grok {
match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
overwrite => [ "Message" ]
}
kv {
allow_duplicate_values => false
field_split_pattern => ","
}
使用上面的块,我可以在消息的任何位置插入 K=V 对。再次感谢所有帮助。我已经为任何试图完成此任务的人添加了示例代码块。
注意:我使用 NLog 进行日志记录,它会产生 JSON 输出。从 C# 代码来看,格式如下所示。
var logger = NLog.LogManager.GetCurrentClassLogger();
logger.ExtendedInfo("<1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3");