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

Logstash syslog_pri过滤器解析异常求助及配置修正

问题诊断与修正方案

核心问题定位

你的问题根源在于grok未正确提取纯数字格式的syslog优先级字段,或者syslog_pri过滤器未指向正确的字段,导致过滤器无法解析有效优先级值,只能输出默认的user-level(设施)和notice(级别)。

诊断步骤

  1. 验证字段提取结果
    临时修改Logstash输出为stdout,查看事件字段详情:

    output {
      stdout { codec => rubydebug }
    }
    

    重点检查是否存在syslog_pri字段,且值为纯数字(如30而非<30>)。如果字段不存在或值带尖括号,说明grok匹配失败。

  2. 检查grok模式正确性
    预定义的%{SYSLOGPRI:syslog_pri}模式会自动匹配<数字>格式的优先级,并提取内部纯数字到指定字段。如果自定义模式(如%{DATA:syslog_pri})会提取带尖括号的完整字符串,导致syslog_pri过滤器无法解析。

修正后的完整配置示例

input {
  udp {
    port => 514 # 对应设备发送的syslog端口
    type => "syslog"
  }
}

filter {
  if [type] == "syslog" {
    # 第一步:正确提取syslog优先级、时间、主机等字段
    grok {
      match => { "message" => "^%{SYSLOGPRI:syslog_pri}%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:device_host} %{GREEDYDATA:message}" }
      overwrite => ["message"] # 覆盖原message,移除已解析的头部内容
      tag_on_failure => ["_grokparsefailure"] # 解析失败时打标签,方便排查
    }

    # 第二步:用提取的syslog_pri字段解析设施和级别
    syslog_pri {
      # 若grok提取的字段名不是syslog_pri,需用field参数指定,例如:field => "pri"
    }

    # 可选:将syslog时间戳转为Logstash时间
    date {
      match => ["syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss"]
      target => "@timestamp"
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://your-es-host:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
  }
}

关键说明

  • syslog优先级计算逻辑:设施(facility)= 优先级值 // 8,级别(severity)= 优先级值 % 8。例如优先级14:
    • 14 // 8 = 1 → 对应设施security/auth
    • 14 % 8 = 6 → 对应级别alert
  • 避免自定义模式错误:务必使用%{SYSLOGPRI}预定义模式,不要手动匹配<数字>,防止格式兼容问题。
  • 失败排查:若出现_grokparsefailure标签,需检查日志格式是否与grok模式匹配,可使用本地或在线的grok调试工具验证模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:31:07