До недавнего времени я использовал nginx 1.4.x с 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 (прослушивание порта 10081 TCP, конечно):
location /track {
content_by_lua_file 'conf/track.lua';
}
..и это сработало. Обратите внимание, что у меня есть несколько таких мест - это важно, вы увидите позже.
Статистика помещалась в 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 уже думал использовать lonelyplanet / openresty-statsd и, вероятно, это был бы рабочий обходной путь, но мне пришлось бы переместить все мое использование statsd в свой скрипт, который я не хочу содержать в чистоте.
ОБНОВИТЬ: lonelyplanet / openresty-statsd тоже не сработал !?
В итоге я нашел обходной путь - начал писать логи доступа в файл, анализировать их по logstash и это плагин вывода statsd. Оно работает.