Linux
如何使用 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
我很想將這些病態/健康狀態更改寫入日誌文件,但是如果沒有與之關聯的時間戳,它們就毫無用處。如何將這些行寫入日誌文件並包含每行的時間戳?
的輸出
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
注意:感謝Kieron的這個答案和 Mark Harrison的這個答案,因為它需要解決這個問題。