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

使用grouping-by()的syslog-ng解析器因语法错误启动失败

问题:syslog-ng grouping-by解析器启动失败,语法错误提示意外分号

配置自定义syslog-ng解析器p_correlate_session_data(使用grouping-by())时,syslog-ng启动失败,错误日志提示/etc/syslog-ng/conf.d/network-ulogd2.conf第33行存在语法错误,意外出现分号;,期望为右括号)。注释该解析器配置后syslog-ng可正常启动,已检查括号匹配并查阅官方文档,仍未解决。

配置代码

16 parser p_correlate_session_data {
17     grouping-by(
18         key("${source.ip}/${destination.ip}/${source.port}/${destination.port}")
19         scope("host")
20         where(match("ORIG" value("MESSAGE")))
21         trigger(match("DESTROY" value("MESSAGE")))
22         having( "${UNIXTIME}@2" ne "1" )
23         aggregate(
24             value("event.start" "${ISODATE}@2")
25             value("event.end" "${ISODATE}@1")
26             value("event.duration", "$(- ${UNIXTIME}@1 ${UNIXTIME}@2)")
27             value("MESSAGE" "Session completed; client='${source.ip}'; server='${destination.ip}'; destination_port='${destination.port}'; protocol='${network.transport}'; session_lenght='${event.duration}'\n")
28             inherit-mode("context")
29         )
30         inject-mode("pass-through")
31         # destroy events sometimes arrive later than 2 minutes, even when a client app is already closed (ssh, telnet)
32         timeout(600)
33     );
34 }; 

错误日志

syslog-ng[5897]: Error parsing dbparser, syntax error, unexpected ';', expecting ')' in /etc/syslog-ng/conf.d/network-ulogd2.conf>
syslog-ng[5897]: 28                  inherit-mode("context")
syslog-ng[5897]: 29              )
syslog-ng[5897]: 30              inject-mode("pass-through")
syslog-ng[5897]: 31              # destroy events sometimes arrive later than 2 minutes, even when a client app is already closed>
syslog-ng[5897]: 32              timeout(600)
syslog-ng[5897]: 33---->     );
syslog-ng[5897]: 33---->      ^
syslog-ng[5897]: 34      };
syslog-ng[5897]: 35
syslog-ng[5897]: 36      template t_network {
syslog-ng[5897]: 37          template("$(format_json --omit-empty-values --pair host.name=$HOST --pair host.hostname=$HOST --pair>
syslog-ng[5897]: 38      };

解决建议

  • 修正aggregate块内的value语法:第26行的value("event.duration", "$(- ${UNIXTIME}@1 ${UNIXTIME}@2)")使用了逗号分隔参数,syslog-ng的value()参数需用空格分隔,将逗号改为空格:value("event.duration" "$(- ${UNIXTIME}@1 ${UNIXTIME}@2)")
  • 检查字符串内特殊字符:第27行MESSAGE值中的分号可能干扰旧版本syslog-ng的解析,可尝试将整个字符串用单引号包裹,或把分号转义为\;
  • 验证版本兼容性:确认使用的syslog-ng版本支持inherit-mode、inject-mode等参数,部分旧版本对grouping-by()的语法要求更严格
  • 排查注释干扰:将第31行的注释移至grouping-by()块外,或临时删除注释后测试启动
  • 提前验证配置:执行syslog-ng -s -f /etc/syslog-ng/conf.d/network-ulogd2.conf(或对应主配置文件),获取更精准的语法错误提示,定位真正的问题行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:44:57