如何使用 Varnish 健康探测器记录时间戳?

如何使用 Varnish 健康探测器记录时间戳?

我在 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发送到,从而导致所有行都获得与缓冲区顶部最后一行相同的时间戳。为了解决这个问题,可以使用命令将输出直接通过管道传输到,以便每行都获得适当的时间戳。awkunbuffervarnishlogawk

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

注:感谢这个答案 基隆这个答案经过马克·哈里森找到解决这个问题所需的部分。

相关内容