Как настроить логирование медленных запросов в nginx?
Есть сервер с Ubuntu 14.04, на нем стоит Nginx 1.9.4 и разные сервисы с REST API, которые вызываются из внешнего мира через Nginx. Как можно настроить логирование в Nginx, чтобы логировались только медленные запросы? Например, логировать все запросы, которые обрабатываются больше 2-х секунд, включая время ожидания подключения к REST-сервисам?
P.S. Хотелось бы узнать, как настроить именно Nginx (не писать какие-либо парсеры).
В общем, решение такое:
1. Устанавливаем пакет nginx-extras.
2. В конфигурации location пишем:
set $logging 0;
log_by_lua '
if tonumber(ngx.var.upstream_response_time) >= 2 then
ngx.var.logging=1
end;
';
access_log /path/to/log format if=$logging
Влад Животнев: В общем-то, дело не в правильности регулярки, как оказалось. Там проблема в том, что Nginx, похоже, проверяет это условие на этапе запроса, когда переменная $upstream_response_time еще пустая. Сейчас ищу другие варианты.
На бэкенде много разных микросервисов, написанных на разных языках.
Мне не хотелось бы делать в каждом из них свое логирование, которое ко всему прочему не показывало бы медленные запросы, которые возникли из-за того, что "все процессы бэкенда заняты и Nginx ждет, когда один из них освободится".
Также не хочется писать гигабайтные логи, в которых будет только 0.1% полезной информации, это уже крайний вариант.
Интересует возможность решения проблемы именно так, как сформулировано в вопросе. Мне кажется наиболее логичным было бы именно такое решение.