log_format main '$remote_addr $request_time $status';
# logstash filter
match => { 'message' => '%{IP:ip} %{NUMBER:rt}' }
Kibana 里 nginx 索引的字段大片为空,Logstash 日志刷 Could not parse date,文档 tags 里多出一个 _grokparsefailure。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,log_format 里新加的字段位置和 grok 表达式对不上,$request_time 在超时请求里会变成 -,写死空格分隔的模板一遇到就整条匹配失败。
「Nginx 日志解析失败」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:拿一行真实日志丢进 grok debugger 跑一遍;尽量改用命名捕获 别再依赖字段的固定位置;时间字段单独交给 date 插件按真实格式解析。
改完只确认一件事:_grokparsefailure 标签消失,各字段在 Kibana 里能正常聚合和筛选。
