You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx错误日志Grok模式解析失败,请求正确配置方案

解决Nginx日志Grok解析失败的问题

先看看你的目标日志行:

2018/05/11 23:08:28 [error] 53734#53734: *621532077 upstream prematurely closed connection while reading response header from upstream, client: 192.168.22.10, server: www.testserver.pt, request: "GET /methods/userinfo.ashx/getUserOpenBetsData? HTTP/2.0", upstream: "https://188.11.2.3:443/methods/userinfo.ashx/getUserOpenBetsData?", host: "www.testserver.pt", referrer: "https://www.testserver.pt/"

你的现有Grok模式有几个小问题导致解析失败,我帮你一一修正:

问题分析

  1. F_TIMESTAMP不是内置模式:Logstash没有默认的F_TIMESTAMP模式,直接用%{DATA:timestamp}就可以,你的date插件已经配置了正确的时间格式解析规则,完全能处理这个格式。
  2. 进程ID部分的匹配可以更精准:日志里的53734#53734是Nginx的进程ID#线程ID,用%{NUMBER:pid}#%{NUMBER:tid}替代%{DATA:EventId},能拆分出更有用的字段。
  3. GREEDYDATA的范围问题:原模式里的%{GREEDYDATA:Message}会一直匹配到日志末尾,把后面的client:等内容也吞进去,改成%{DATA:Message}就能精准捕获到错误描述部分。

修正后的完整Logstash配置

input { 
  beats { 
    port => "5044" 
  } 
} 

filter { 
  grok{ 
    match => {
      "message" => '%{DATA:timestamp} \[%{DATA:Message_type}\] %{NUMBER:pid}#%{NUMBER:tid}: \*%{NUMBER:Secondaryid} %{DATA:Message}, client: %{IP:origin}, server: %{URIHOST:domain}, request: "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}", upstream: %{QS:upstream}, host: %{QS:host}, referrer: %{QS:referrer}'
    } 
  } 
  date{ 
    locale => "en" 
    match => ["timestamp", "YYYY/MM/dd HH:mm:ss"] 
    target => "@timestamp" 
  } 
} 

output { 
  elasticsearch { 
    hosts => [ "localhost:9200" ] 
    index => "logstash-%{+YYYY.MM.dd.HH}" 
    user => "elastic" 
    password => "changeme" 
  }
}

额外优化建议

  • 如果你想更精确地控制时间戳匹配,可以把%{DATA:timestamp}换成%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME:timestamp},不过你的现有date配置已经足够,没必要额外拆分。
  • 可以用Grok调试工具(本地或在线版本)来测试你的模式,快速验证匹配效果。

内容的提问来源于stack exchange,提问作者ricardo gaspar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:31