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

syslog-ng 3.5.6处理防火墙日志时输出被截断求助

问题分析与解决方案

从你的描述来看,核心问题是防火墙发送的syslog日志在tcpdump中显示完整,但经过syslog-ng 3.5.6处理后日志内容被截断,仅保留了头部信息。结合你的配置和日志格式,我判断最可能的原因是日志格式解析不匹配,以下是具体分析和解决步骤:

可能的原因

你提到tcpdump中的日志格式片段如下:

Msg: 1 2019-11-08T19:30:08 192.168.1.1 CP-GW - Log [Fields@1.3.6.1.4.1.2620 ...]

这是标准的RFC5424(IETF syslog)格式,包含版本号、ISO时间戳、主机名、应用名等规范字段;但syslog-ng 3.5.x默认采用旧版RFC3164(BSD syslog)格式的解析规则,这种规则无法正确识别RFC5424的结构,导致它无法提取出日志的核心内容(MESSAGE字段),最终输出时只显示了解析出来的头部,内容部分为空。

另外,你的全局配置中已经设置了log-msg-size(1048576),这个参数是足够的;虽然UDP源若未单独指定max-msg-size,旧版本默认值可能偏小,但你的日志仅694字节,这个因素可能性极低,优先排查解析匹配问题。

解决方案

1. 修改UDP源配置,启用RFC5424解析

找到你syslog-ng配置中s_udp514的定义,添加flags(syslog-protocol)参数(该参数会让syslog-ng按照RFC5424格式解析日志),同时显式设置足够大的max-msg-size确保完整接收:

source s_udp514 {
    udp(
        port(514)
        flags(syslog-protocol)
        max-msg-size(1048576)
    );
};

2. (可选)自定义输出模板确保内容完整

如果默认模板无法输出防火墙日志中的结构化数据(比如[Fields@...]部分),可以在destination中指定自定义模板,明确包含需要输出的字段:

destination d_c2 {
    file("/var/log/fw-test/${SOURCEIP}/${C_YEAR}-${C_MONTH}-${C_DAY}T${C_HOUR}.log"
        owner(root) group(splunk) perm(0755) dir_perm(0755) create_dirs(yes)
        template("$DATE $HOST $TAG: $MESSAGE $SDATA\n")
    );
};

其中$SDATA字段对应防火墙日志中的结构化数据部分,能确保这部分内容被完整输出。

3. 重启syslog-ng服务

修改配置后,重启服务使设置生效:

systemctl restart syslog-ng

完成以上步骤后,重新测试日志接收,应该就能看到完整的日志内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:16