Linux

如何使用 Varnish 健康探測記錄時間戳?

  • February 20, 2013

我在 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的這個答案,因為它需要解決這個問題。

引用自:https://serverfault.com/questions/478557