Отправка данных в 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 тоже не работает!?

1 ответ

В конце концов я сделал обходной путь - начал записывать журналы доступа в файл, анализировать их с помощью logstash и выводить его statsd. Оно работает.

Другие вопросы по тегам