我在 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
我很想将这些生病/健康状态的变化写入日志文件,但如果没有与之关联的时间戳,它们就毫无用处。如何将这些行写入日志文件并包含每行的时间戳?
的输出
varnishlog
可以通过管道传输到 awk 并重新格式化以将日期放在每行的开头。棘手的部分是varnishlog
缓冲输出,导致它仅awk
在生成多行后才被发送到,导致所有行获得与缓冲区顶部的最后一行相同的时间戳。为了解决这个问题,该unbuffer
命令可用于直接将输出传输到管道,varnishlog
以便awk
每一行都获得适当的时间戳。这会产生如下所示的输出,然后可以将其附加到日志文件中。
注意:多亏了Kieron的这个回答和 Mark Harrison的这个回答,才能解决这个问题。