我的日志
2021-08-19 15:43:55,122 INFO c.t.i.c.ClassA - log message Service Name=Service-OCR Content ID=ABC.xml Category=SUCCESS Timestamp=2021-08-19T15:43:55.122292244 Message=The response has been received. Unit Name=N/A
2021-08-19 15:43:55,122 ERROR c.t.i.c.ClassB - log message Service Name=Service-OCR Engine Content ID=ABC.xml Category=ERROR Timestamp=2021-08-19T15:43:55.122292244 Message=The response has been received. Unit Name=TM
我的logstash.conf
是
input {
tcp {
port => 12201
codec => json_lines
}
}
filter {
grok {
patterns_dir => ["./patterns"]
match => {
'message' => '%{TIMESTAMP_ISO8601} %{LOGLEVEL:level} %{STRING} - "log message "Service Name="%{STRING} "Content ID="%{STRING} "Category="%{STRING} "Timestamp="%{TIMESTAMP_ISO8601} "Message="%{STRING} "Unit Name="%{STRING}'
}
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logstash"
}
}
我知道STRING不在grok-filters中,这就是为什么我定义了一个客户过滤器。
STRING ^[a-zA-Z0-9 !@#$%^&*()_+-=[]{};':"\|,.<>/?]{1,}$
我假设无论我在哪里使用字符串,可以包括特殊字符,空格,数字。就像Java中的字符串。
但是我仍然无法通过这个过滤我的日志。有什么帮助吗?
您已经使用^和$将STRING锚定到行首和行尾。它永远不会匹配你使用它的方式。删除^和$
您可以简单地使用%{GREEDYDATA}代替自定义模式STRING。这将解决你的问题。