我有一个包含 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
您的数据似乎采用 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 和 尾随空格。