如何用syslog-ng为指定日志添加TCP标签后发送至远程日志收集器
修正syslog-ng配置:给指定日志添加TCP标签并发送到远程收集器
我来帮你搞定这个配置问题,先拆解下你原配置里的几个错误:
- Filter语法错误:
(info,err,warn,)末尾多了个逗号,而且facility(tcp)不是你需要的——你是要给特定文件的日志加标签,不是过滤系统里标记为tcp设施的日志。 - Source里的tags用法错误:syslog-ng的source模块不能直接给日志加标签,标签需要通过rewrite规则在日志处理阶段添加。
下面是修正后的完整配置片段,完全满足你的需求:
# 读取指定的自定义日志文件,no-parse表示不解析标准syslog格式(因为这是你的业务日志) source S_tcp { file("/var/log/tcp/s.log" flags(no-parse)); }; # 定义rewrite规则:给匹配到的日志添加"TCP"标签 rewrite r_add_tcp_tag { set_tag("TCP"); }; # 远程日志收集器的目标配置(这个你原来的是对的,保留即可) destination logcollector { udp("192.168.12.1" port(514)); }; # 日志流转路径:读取源日志 → 添加TCP标签 → 发送到远程收集器 log { source(S_tcp); rewrite(r_add_tcp_tag); destination(logcollector); };
如果之后你需要过滤带TCP标签的日志做其他处理,还可以加个filter:
filter f_has_tcp_tag { tags("TCP"); };
然后在log路径里加入filter(f_has_tcp_tag);即可。
配置修改后,记得重启syslog-ng服务生效:
systemctl restart syslog-ng
内容的提问来源于stack exchange,提问作者Unixer
相关产品推荐
相关产品推荐

