为自定义时间格式创建Logstash输入与Grok过滤器求助
入门级WebSphere日志Grok解析方案
搞定带双引号的格式不一致问题
- 直接用Grok内置的
QUOTEDSTRING匹配带引号的内容,同时用(?:%{QUOTEDSTRING}|%{DATA})的分支写法兼容不带引号的字段,避免因为引号导致匹配失败。 - 实际例子:如果日志里有
"REQUEST_PATH=/api/v1"和REQUEST_PATH=/api/v2两种写法,对应的Grok片段可以写成REQUEST_PATH=(?:%{QUOTEDSTRING:request_path}|%{DATA:request_path}),两种格式都能匹配到request_path字段。
处理制表符与不规则空格
- 别用固定的空格或
\t匹配分隔符,改用\s+(匹配任意数量的空白字符,包含制表符、多个连续空格),直接解决不规则空白的问题。 - 比如原模式里的
%{DATE:log_date} %{TIME:log_time}(两个空格),改成%{DATE:log_date}\s+%{TIME:log_time}后,不管是1个空格、3个空格还是制表符分隔,都能正常匹配。
入门调试步骤
- 先抓固定部分:WebSphere日志的时间戳、服务器节点、线程ID这些是固定格式,先用
%{TIMESTAMP_ISO8601:timestamp}匹配时间,确保这部分100%匹配成功,再处理可变字段。 - 逐段测试可变内容:把带引号/不带引号的字段拆成小片段,用Grok调试工具(本地用
grokdebug命令,或者ELK的调试器)逐段验证,没问题后再拼接成完整模式。 - 容错兜底:对不确定的字段,用
DATA兜底,别随便用GREEDYDATA(会匹配到行尾,容易打乱后续字段)。
示例Grok模板(适配WebSphere常见格式)
%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:server_node}\s+%{DATA:thread_id}\s+(?:%{QUOTEDSTRING:log_message}|%{DATA:log_message})\s+%{DATA:logger_class}
内容的提问来源于stack exchange,提问作者user19869705
相关产品推荐
相关产品推荐

