elasticsearch 当通过logstash进入Elasticsearch时,如何创建JSON格式的日志
我被告知,通过使用logstash管道,我可以在进入elasticsearch时重新创建日志格式(即JSON)。但是不知道怎么做 当前LOGStash配置(我从Google获取了以下信息,并非出于任何特殊原因) 我有两个日志文件位于 /root/logs/File.log /root/logs/File2.log 那里的日志格式是:elasticsearch 当通过logstash进入Elasticsearch时,如何创建JSON格式的日志,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana,我被告知,通过使用logstash管道,我可以在进入elasticsearch时重新创建日志格式(即JSON)。但是不知道怎么做 当前LOGStash配置(我从Google获取了以下信息,并非出于任何特殊原因) 我有两个日志文件位于 /root/logs/File.log /root/logs/File2.log 那里的日志格式是: 08:26:51,753 DEBUG [ABC] (default-threads - 78) (1.2.3.4)(368)>[TIMESTAMP:Wed S
08:26:51,753 DEBUG [ABC] (default-threads - 78) (1.2.3.4)(368)>[TIMESTAMP:Wed Sep 11 08:26:51 UTC 2019],[IMEI:03537],[COMMAND:INFO],[GPS STATUS:true],[INFO:true],[SIGNAL:false],[ENGINE:0],[DOOR:0],[LON:90.43],[LAT:23],[SPEED:0.0],[HEADING:192.0],[BATTERY:100.0%],[CHARGING:1],[O&E:CONNECTED],[GSM_SIGNAL:100],[GPS_SATS:5],[GPS POS:true],[FUEL:0.0V/0.0%],[ALARM:NONE][SERIAL:01EE]
在Kibana中,默认情况下,它显示为ethis
但我想像下面那样得到:
"message": {
"TIMESTAMP": "Sat Sep 07 21:33:42 UTC 2019",
"TEST": "123456",
"CMD":INFO,
"STATUS":true,
"INFO":true,
"SIGNAL":false,
"ABC":0,
"DEF":0,
"GHK":0,
"GHK":1111
}
这能做到吗?如果是,怎么做?
感谢使用
如果[message]=~/>/
,则过滤器将仅适用于包含
的邮件。解剖筛选器将在
之间分割消息。kv过滤器将在消息的第二部分应用键值转换,删除[]
。mutate.remove_字段删除任何额外字段
filter {
if [message] =~ />/ {
dissect {
mapping => {
"message" => "%{start_of_message}>%{content}"
}
}
kv {
source => "content"
value_split => ":"
field_split => ","
trim_key => "\[\]"
trim_value => "\[\]"
target => "message"
}
mutate {
remove_field => ["content","start_of_message"]
}
}
}
结果,使用提供的日志行:
{
"@version": "1",
"host": "YOUR_MACHINE_NAME",
"message": {
"DEF": "0",
"TIMESTAMP": "Sat Sep 07 21:33:42 UTC 2019",
"TEST": "123456",
"CMD": "INFO",
"SERIAL": "0006]\r",
"GHK": "1111",
"INFO": "true",
"STATUS": "true",
"ABC": "0",
"SIGNAL": "false"
},
"@timestamp": "2019-09-10T09:21:16.422Z"
}
除了使用
if[message]=~/>/
进行过滤外,您还可以在文件输入插件设置的路径
字段上进行比较。另外,如果您有多个文件输入,您可以设置类型
字段并使用此字段,请参见。可以这样做。最简单的方法是在>Hi之后的零件上应用kv滤波器,谢谢,但是我在logstatsh Sep 10 14:03:00 kibana logstash[19858]:[2019-09-10T16:03:00262][WARN][org.logstash.dissect.Dissector]Dissector映射中得到了这个错误,{“field=>”message“=>”%{start\u of_message}>%{content}”,这意味着此邮件不包含
。如果您也收到不包含
的邮件,您必须处理这些邮件,要么删除它们,要么不使用我上面编写的筛选器对其进行解析。将这些邮件添加到您的问题中,说明您要对其执行的操作,我将扩展我的答案。谢谢@baudsp,我我正在推送不同类型的日志文件,因此每个日志文件都有不同类型的结构,这可能是原因,是否仍要仅对特定的日志文件应用筛选器?是的。我将用类似的内容更新我的答案。
"message": {
"TIMESTAMP": "Sat Sep 07 21:33:42 UTC 2019",
"TEST": "123456",
"CMD":INFO,
"STATUS":true,
"INFO":true,
"SIGNAL":false,
"ABC":0,
"DEF":0,
"GHK":0,
"GHK":1111
}
filter {
if [message] =~ />/ {
dissect {
mapping => {
"message" => "%{start_of_message}>%{content}"
}
}
kv {
source => "content"
value_split => ":"
field_split => ","
trim_key => "\[\]"
trim_value => "\[\]"
target => "message"
}
mutate {
remove_field => ["content","start_of_message"]
}
}
}
{
"@version": "1",
"host": "YOUR_MACHINE_NAME",
"message": {
"DEF": "0",
"TIMESTAMP": "Sat Sep 07 21:33:42 UTC 2019",
"TEST": "123456",
"CMD": "INFO",
"SERIAL": "0006]\r",
"GHK": "1111",
"INFO": "true",
"STATUS": "true",
"ABC": "0",
"SIGNAL": "false"
},
"@timestamp": "2019-09-10T09:21:16.422Z"
}