Varnish: возможно ли регистрировать все запросы GET для дальнейшей обработки?

#varnish

#varnish

Вопрос:

Можно ли использовать Varnish для следующей задачи?

Представьте URL-адрес (например, /vote?poll-id=1amp;answer-id= 2), который запрашивается по прямым ссылкам, где мы показываем результаты опроса для выбранного идентификатора опроса.

Я хотел бы сохранить / извлечь / обработать все запрошенные URL-адреса (почти в режиме реального времени), чтобы сгенерировать эти результаты опроса.

Возможно ли получить эти URL-адреса в виде какого-то потока для дальнейшей обработки?

Причина, по которой используется Varnish, заключается в том, что я хотел бы уменьшить нагрузку на более медленную серверную службу, работающую в восходящем потоке. И потому, что некоторая задержка в отображении фактических результатов в порядке.

Ответ №1:

Varnish имеет встроенные журналы общей памяти. С ними можно ознакомиться с помощью различных инструментов.

Основными из них, которые могут быть полезны для вас, являются:

  • varnishlog: подробное ведение журнала по каждому аспекту запроса, ответа и внутренней обработки
  • varnishncsa: средство ведения журнала в стиле Apache / NCSA

Вы также можете использовать язык программирования VCL и регистрировать запросы из VCL в механизм операционной системы syslog .

varnishlog

Следующая команда отобразит всю информацию о регистрации для URL-адресов, начинающихся с /vote :

 varnishlog -g request -q "ReqUrl ~ '^/vote'"
  

Вы можете отфильтровать нужные вам поля:

 varnishlog -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
  

Этот будет отображать только URL-адрес запроса и все заголовки запроса.

Вы также можете записать выходные данные в файл:

 varnishlog -A -a -w /var/log/varnish/vsl_vote.log -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
  

См http://varnish-cache.org/docs/6.5/reference/varnishlog .html, чтобы узнать больше о varnishlog и http://varnish-cache.org/docs/6.5/reference/vsl-query.html чтобы узнать больше об этом vsl-query языке.

varnishncsa

Если вы хотите вести журнал в стиле Apache, вы можете использовать следующую команду:

 varnishncsa -g request -q "ReqUrl ~ '^/vote'"
  

Вы также можете записывать эти журналы в файл журнала:

 varnishncsa -a -w /var/log/varnish/vote_access.log -g request -q "ReqUrl ~ '^/vote'"
  

Оба varnishncsa и varnishlog двоичные файлы могут быть демонизированы с помощью -D параметра

См http://varnish-cache.org/docs/6.5/reference/varnishncsa.html чтобы узнать о нем больше varnishncsa . В документах также есть раздел о включении пользовательских полей в ваш varnishncsa вывод.

системный журнал из VCL

Если вы используете следующий фрагмент, вы можете регистрировать запросы на голосование в syslog :

 vcl 4.1;
import std;

sub vcl_recv {
    if(req.url ~ "^/vote") {
        std.syslog(6, "Vote request captured: "   req.url);
    } 
}
  

Это шаблонный VCL, который нельзя просто скопировать / вставить таким образом. Пожалуйста, не забудьте добавить import std; в свой файл VCL и использовать std.syslog() для входа в ваш локальный системный журнал.

См http://varnish-cache.org/docs/6.5/reference/vmod_std.html#void-syslog-int-priority-string-s чтобы узнать о нем больше std.syslog() .