如何使用光油健康探针logging时间戳?

我在RHEL 6上使用Varnish 3.0.3作为多个Apache Web服务器前面的caching负载平衡器,并且希望loggingVarnish何时看到后端从健康变为病态,然后再返回。

在命令行中,我可以运行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 

我很乐意将这些病态/健康状态变化写入日志文件,但是如果没有时间戳记,这些变化就没用了。 如何将这些行写入日志文件,并为每行添加时间戳?

varnishlog的输出可以通过pipe道awk重新格式化,以将date放在每行的开头。 最棘手的部分是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 

注意:感谢Kieron的 回答以及Mark Harrison为了解决这个问题所需要的答案 。