Назад | Перейти на главную страницу

Как я могу регистрировать временные метки с помощью датчиков состояния Varnish?

Я использую Varnish 3.0.3 на RHEL 6 в качестве кэширующего балансировщика нагрузки перед несколькими веб-серверами Apache и хочу вести журнал, когда 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

Примечание: благодаря этот ответ Кирон и этот ответ по Марк Харрисон для частей, необходимых, чтобы понять это.