logstash的grok条件匹配
我有这种格式的php日志logstash的grok条件匹配,logstash,logstash-grok,Logstash,Logstash Grok,我有这种格式的php日志 [Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg with /path/of/a/php/script/file.php and something else> [Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip addres
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg with /path/of/a/php/script/file.php and something else>
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg without any file name in it>
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some msg with out semicolon in it but /path/of/a/file inside the message>
但不知何故,我发现很难让它对整个日志文件起作用
有什么建议吗?此外,不确定日志文件中是否会出现任何其他类型的错误消息。但目的是为所有人提供相同的格式。如何处理这些日志以获得上述格式,有什么建议吗?可以使用多种模式进行配置:
grok {
match => [
"message", "%{DATA:php_error_type}: %{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg}",
"message", "%{DATA:php_error_type}: %{GREEDYDATA:errormsg}",
"message", "%{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg}"
]
}
(与具有多个模式的单个过滤器不同,您可以使用多个grok过滤器,但您可能需要禁用_GrokParseFailureTagging with。)如果有时日志行的某些部分丢失,您可以使用以下语法:
(?:%{PATTERN1}|%{PATTERN2})
或
允许模式1或“”。(空)
使用此选项,您只能管理一个模式:
grok {
match => [
"message", "(?:%{DATA:php_error_type}: |)(?:%{DATA:message_part1}:)(?:%{URIPATHPARAM:file_name}|)%{GREEDYDATA:errormsg}",
]
}
如果您有问题,可以用更严格的模式替换%{DATA}
您也可以使用这种语法(更像正则表达式)
要调试复杂的grok模式,我建议:
- (多行选项+同时多个输入行+其他选项)
- (使用更简单)
(?:%{PATTERN1}|%{PATTERN2})
(?:%{PATTERN1}|)
grok {
match => [
"message", "(?:%{DATA:php_error_type}: |)(?:%{DATA:message_part1}:)(?:%{URIPATHPARAM:file_name}|)%{GREEDYDATA:errormsg}",
]
}
(?:%{PATTERN1})?