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

Logstash对接Cisco设备syslog字符编码异常问题求助

解决Cisco设备向Logstash发送syslog的编码错误问题

我来帮你排查这个编码问题——你已经尝试调整了codec的charset,但可能没抓住Cisco设备syslog的特殊点:

问题根源

你日志里出现的0\x82\u0002B这类字符,是Cisco设备可能发送的二进制控制字符,它们不属于标准的ISO-8859-1可打印字符范围。虽然你指定了charset => "ISO-8859-1",但Logstash的plain codec在遇到这类非文本字符时,还是会触发编码不匹配的警告。

另外,用plain codec处理syslog本身就不是最优选择,因为syslog有固定格式,专门的syslog codec能更好地兼容不同设备的输出。

解决方案

试试下面几个步骤,按优先级来:

1. 替换为syslog codec

把input部分的plain codec换成syslog codec,它会自动处理syslog格式的编码兼容问题:

input { 
  udp { 
    port => 514 
    type => syslog 
    codec => syslog { charset => "ISO-8859-1" } 
  } 
}

2. 过滤无效控制字符

如果换codec后还是有警告,就在filter里添加mutate插件,清理掉消息里的非打印/无效字符:

filter { 
  if [type] == "syslog" { 
    # 先清理掉非ASCII和非ISO-8859-1可打印的字符
    mutate {
      gsub => [
        "message", "[^\x00-\x7F\xC0-\xFF]", ""
      ]
    }
    # 你的原有grok和date配置
    grok { 
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
      add_field => [ "received_at", "%{@timestamp}" ] 
      add_field => [ "received_from", "%{host}" ] 
    } 
    date { 
      match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
  } 
}

这个gsub规则会保留ASCII和ISO-8859-1的可打印字符,去掉那些二进制控制字符。

3. 检查Logstash版本

如果你的Logstash是2.x或更早的旧版本,plain codec的charset处理可能存在bug,建议升级到最新的稳定版(比如7.x或8.x),新版本对编码兼容的处理更完善。

验证方法

修改配置后重启Logstash,然后让Cisco设备发送测试日志,观察Logstash的警告是否消失,同时检查Elasticsearch里的日志内容是否正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:24