无法解析json中键值对之间有空格的日志

问题描述 投票:0回答:1

我有一个包含 json 对象的日志。如果 json 对象没有空格,则会解析日志。如果键值对之间有空格,则不会被解析。

使用的配置文件

input {
syslog {
port => 3011
}
}

filter {
grok {
match => { "message" =>
[
"%{SYSLOGTIMESTAMP:timestamp4} %{DATA:time_ms}|%{DATA:field1}|%{DATA:field2}|99|%{DATA:field3}|%{DATA:field4}|%{DATA:field5}|%{DATA:field6}|%{DATA:field7}|%{DATA:field8}|%{DATA:field9}|%{DATA:field10}|%{DATA:field11}|%{DATA:field12}|%{GREEDYDATA:field13}"
]
}
}
date {
match => ["timestamp4", "MMM dd HH:mm:ss"]
}
if [field13] {
mutate {
add_field => {"log_type" => "my-logs"}
}
}
}

output {
if [log_type] == "my-logs" {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["ES_HOST:9200"]
index => "my-logs-000001"
}
}
}

正在解析日志:

echo“3月21日13:27:11 11:11.366293|dataadwhw1|ebsmp4713user5_@maiator|99|4064|22|成功|数据|19|UA101|10.1.1.70|https|data.com|{“wrg_id”:” 200000337"}|200"|数控本地主机 3011 回声“3月21日13:27:11 11:11.366293|dataadwhw1|ebsmp4713user5_@maiator|99|4064|22|成功|数据|19|UA101|10.1.1.70|https|data.com|{“wrg_id”:“200000337 “}|200”|数控本地主机 3011

日志未得到解析: 回声“3月21日13:27:11 11:11.366293|dataadwhw1|ebsmp4713user5_@maiator|99|4064|22|成功|数据|19|UA101|10.1.1.70|https|data.com|{“wrg_id”:“200000337 “}|200”|数控本地主机 3011

ruby elasticsearch logstash kibana elk
1个回答
0
投票

您的数据似乎采用 CSV 格式,并以

|
分隔。所以我推荐你使用 logstash csv 解析器

filter {
  csv {
    separator => "|"
    columns => ["syslog_timestamp", "hostname", "username", "integer1", "integer2", "integer3", "result", "category", "integer4", "code", "ip", "protocol", "scheme", "url_host", "json_data", "http_status"]
  }
}

之后如果你想删除空格,你可以使用 mutate => strip

从字段中删除空格。注意:这仅适用于 leading尾随空格。

© www.soinside.com 2019 - 2024. All rights reserved.