我在 RHEL 6 上使用 Varnish 3.0.3 作为多个 Apache Web 服务器前面的缓存负载均衡器,并希望记录 Varnish 发现后端从健康变为异常并再次恢复的情况。
从命令行我可以运行varnishlog -O -I "Back healthy|Went sick"
并看到如下行:
0 Backend_health - webserver1 Went sick 4--X--- 2 3 5 0.000000 0.000679
0 Backend_health - webserver1 Back healthy 4--X-RH 3 3 5 0.000622 0.000679 HTTP/1.1 200 OK
我很想将这些疾病/健康状态变化写入日志文件,但如果没有与之关联的时间戳,它们就毫无用处。我如何将这些行写入日志文件并为每行添加时间戳?
答案1
的输出varnishlog
可以通过管道传输到 awk 并重新格式化,将日期放在每行的开头。棘手的部分是缓冲输出,这导致它仅在生成多行后才varnishlog
发送到,从而导致所有行都获得与缓冲区顶部最后一行相同的时间戳。为了解决这个问题,可以使用命令将输出直接通过管道传输到,以便每行都获得适当的时间戳。awk
unbuffer
varnishlog
awk
unbuffer varnishlog -O -I 'Back healthy|Went sick' 2>&1 | awk '{ print strftime(), $0; fflush() }'
这会产生如下的输出,然后可以将其附加到日志文件。
Wed Feb 20 15:20:58 EST 2013 0 Backend_health - webserver1 Went sick 4--X--- 2 3 5 0.000000 0.000679
Wed Feb 20 15:28:03 EST 2013 0 Backend_health - webserver1 Back healthy 4--X-RH 3 3 5 0.000622 0.000679 HTTP/1.1 200 OK