Отправка данных в statsd не работает в некоторых местах с помощью content_by_lua_file
До
До недавнего времени я использовал nginx 1.4.x с https://github.com/zebrafishlabs/nginx-statsd в качестве обратного прокси-сервера для openresty (да, я знаю, что nginx за nginx тупой - продолжайте читать, пожалуйста) со следующей конфигурацией nginx:
location /track {
statsd_count "tracker.track_$scheme" 1;
proxy_pass http://localhost:10081/track;
proxy_set_header Host $host;
}
..и следующее расположение openresty (прослушивание порта TCP 10081, конечно) config:
location /track {
content_by_lua_file 'conf/track.lua';
}
..и это сработало. Обратите внимание, что у меня есть несколько таких мест - это важно, вы увидите позже.
Stats были отправлены в statsd, и сценарии были выполнены.
Сейчас
Недавно я решил снять переднюю часть nginx и использовать только openresty.
Теперь я использую openresty 1.5.12.1 с скомпилированным в него zebrafishlabs / nginx-statsd и следующей (очевидной) конфигурацией:
location /track {
statsd_count "tracker.track_$scheme" 1;
content_by_lua_file 'conf/track.lua';
}
Но после этого изменения моя статистика иногда не попадает в statsd.
По-видимому, это происходит, если мой скрипт lua заканчивает выполнение командой lua ngx.redirect.,
Я попытался использовать этот конфиг в качестве обходного пути:
location /track {
statsd_count "tracker.track_$scheme" 1;
proxy_pass http://127.0.0.1/track-do;
}
location /track-do {
content_by_lua_file 'conf/track.lua';
}
... но я получил действительно странные результаты:
Когда я таким образом изменил свое местоположение "дорожки", оно начало работать должным образом - все статистические данные были перенесены в statsd, код выполнен.
... но в то же время мое другое местоположение, "статическое", которое не было изменено, перестало выдвигать что-либо в statsd (!).
Я думаю, что это связано с фазами обработки nginx. zebrafishlabs / nginx-statsd выполняет вход в последнюю фазу журнала, в то время как файл content_by_lua_file обрабатывается в фазе содержимого, а ngx.redirect, в котором мои сценарии используют документацию, гласит, что "(...) завершает обработку текущего запроса и никогда не возвращается". но proxy_pass также находится в фазе содержимого, и директивы statsd были запущены, когда я использовал их вместе в nginx...
1. Можете ли вы помочь мне в этой конкретной проблеме?
2. Есть ли у вас какие-либо успехи в использовании zebrafishlabs / nginx-statsd с openresty? Как ты это делаешь?
PS Я уже думал об использовании https://github.com/lonelyplanet/openresty-statsd, и это, вероятно, был бы рабочий обходной путь, но мне пришлось бы перенести все использование statsd в мой скрипт, который я не хочу содержать в чистоте.
ОБНОВЛЕНИЕ: путь lonelyplanet / openresty-statsd тоже не работает!?