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

如何使用Logstash Grok过滤器筛选含ERR_AUTH_PORTAL_USER的JSON日志

解决Logstash筛选包含特定错误码日志的问题

首先,你的原始日志是JSON格式,所以第一步应该先使用json过滤器解析整个日志条目,而不是直接用grok去匹配message字段——因为此时message是完整的JSON字符串,直接grok匹配会失败,导致后续的条件判断也无法生效。

以下是修正后的完整配置,我会逐部分解释:

input {
  file {
    type => vampserror
    path => "/home/ampsErrorLog/getError/*"
    start_position => "beginning"
  }
}

filter {
  # 第一步:解析JSON格式的日志,将所有字段提取到Logstash的事件中
  json {
    source => "message"
    remove_field => "message" # 可选:解析后移除原始message字段,简化事件结构
  }

  # 可选:如果需要进一步解析msg字段里的详细内容,可以添加grok规则
  grok {
    match => {
      "msg" => "err:%{DATA:error_code},tenantid:%{NUMBER:tenantid:int},reason:%{DATA:reason},code:%{DATA:error_subcode},username:%{DATA:username},venueid:%{NUMBER:venueid:int},devicemac:%{DATA:devicemac},apmac:%{DATA:apmac},ssid:%{DATA:ssid},timestamp:%{DATA:log_timestamp}"
    }
  }

  # 筛选出msg字段包含ERR_AUTH_PORTAL_USER的日志
  if "ERR_AUTH_PORTAL_USER" not in [msg] {
    drop {} # 丢弃不符合条件的日志,仅保留目标日志
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

关键修正点说明:

  • JSON解析是核心:添加json过滤器后,原始日志里的level、msg、time等字段会被直接提取到Logstash事件中,这样后续的条件判断才能正确访问[msg]字段。
  • 条件判断优化:用if "ERR_AUTH_PORTAL_USER" not in [msg] { drop {} }直接丢弃不符合要求的日志,比只保留空逻辑块更高效,确保只有目标日志进入输出环节。
  • 可选的Grok增强:如果需要把msg里的子字段(比如tenantid、reason、error_code等)单独提取成独立字段,方便后续分析或存储,可以使用配置里的grok规则,它会把每个键值对映射成对应的结构化字段。

测试小技巧:

你可以先暂时注释掉drop {}语句,用rubydebug输出所有解析后的事件,确认msg字段已经被正确提取,然后再恢复筛选规则,验证只有包含ERR_AUTH_PORTAL_USER的日志被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:56:39