У меня есть Varnish перед стандартным REST API. Запросы должны быть аутентифицированы с помощью заголовка X-Access-Token. Теперь мне нужно отслеживать запросы для каждого ресурса по используемому токену доступа. Например, токен abcd1234 запрашивал / items / xyz 10 раз.
Первоначально я просто собирался подсчитать данные в серверном приложении (PHP), но потом понял, что Varnish, конечно, перехватит любые запросы после первого.
Как лучше всего отслеживать запросы по токенам?
На данный момент я ищу либо чтение varnishlog / varnishncsa в отдельном потоке, либо добавление чего-то вроде Redis VMOD и увеличения счетчика на основе token: url.
Кто-нибудь еще что-нибудь подобное делал?
Я бы посоветовал вам позволить varnish делать то, что он делает лучше всего, кэшировать, и позволить отслеживанию делать varnishog / ncsa
Добавляя Redis Vmod, вы усложняете свой vcl, и если по каким-то причинам ваш Redis выйдет из строя, вы потеряете отслеживание.
Используя varnishlog / ncsa, вы можете построить свою логику отслеживания вне varnish, обрабатывать журнал в реальном времени, передавая процесс varnishlog, или сохранять журнал для последующего использования.
На мой взгляд, здесь есть три разумных варианта:
С помощью Пользовательская статистика Varnish. VCS является частью Лак Плюс и он был специально разработан для решения таких задач, как тот, который вы описываете. Если вы используете Varnish Plus, это то, что вам нужно.
Использование varnishog / varnishncsa вместе с некоторыми счетчиками сброса скриптов во внешнюю базу данных.
Использование Redis или Memcached VMOD. По сравнению с вариантом (2) это добавит незначительные накладные расходы на каждый запрос, но вы сэкономите некоторые операции ввода-вывода и сможете избежать реализации / поддержки сценария. Я думаю, что это лучшая альтернатива, если нельзя использовать VCS.