混合云--syslog重定向到其他服务器,日志中有换行符造成日志分离

最近在查一个混合云的BUG, 就是我们把虚拟机的agent的日志透传出来,放到我们的host主机上,我们通过syslog 服务来进行日志的重定向,但是在重定向的日志时,发现如果python打印出ERR堆栈,通过syslog重定向之后,在服务端打到文件中时,他会打印到好几个文件中去了,比如

错误日志:

2017-05-08T11:08:04.209+00:00 localhost neutron-openvswitch-agent ERROR [pid:16523] [rpc_terminal_req_timeout][tid:63209296] [utils.py:79 execute]

Command: ['sudo', 'arping', '-A', '-I', 'tunnel_bearing', '-c', '3', '192.16.0.2']

Exit code: 2

Stdout: ''

Stderr" 'arping: Device tunnel_bearing not available.'

 

到服务端之后,就会重定向到neutron-openvswitch-agent.log文件,Command.log文件,Exit.log文件,Stdout.log文件,Stderr.log文件中去了,没有统一重定向到neutron-openvswitch-agent.log文件中。

如何解决呢?

这是因为堆栈日志中是有换行符的,在透传到服务端syslog时,就会以换行符来打印,所以我们在透传到服务端的时候,把换行符都替换掉,这个利用syslog-ng的rewrite特性。

修改配置文件/etc/syslog-ng/syslog-ng.conf

filter f_vm_level { level(err); }

rewrite r_escape_new_line {subst("\n", " ", value("MSG"), flags("global"));};

destionation d_host { tcp(197.168.120.225, port(514)); };

log { source(s_host); filter(f_vm_level); rewrite(r_escape_new_line); destionation(d_host)}

 

重启下syslog服务,systemctl restart syslog

这样透传到服务端上日志都可以打到neutron-openvswitch-agent.log文件中了。

2017-05-08T11:08:04.209+00:00 localhost neutron-openvswitch-agent ERROR [pid:16523] [rpc_terminal_req_timeout][tid:63209296] [utils.py:79 execute] Command: ['sudo', 'arping', '-A', '-I', 'tunnel_bearing', '-c', '3', '192.16.0.2']

Exit code: 2 Stdout: '' Stderr" 'arping: Device tunnel_bearing not available.'

 

如果rewrite了之后,依然没有效果,可以尝试下

Try to add the flags(no-multi-line) option to your source definition, like:

source s_src {

   system(flags(no-multi-line));

   internal();

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XR风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值