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

Отправка данных в statsd не работает в некоторых местах с content_by_lua_file

Перед

До недавнего времени я использовал 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. Оно работает.