@summerwind
Web-программист

Как настроить логирование медленных запросов в nginx?

Есть сервер с Ubuntu 14.04, на нем стоит Nginx 1.9.4 и разные сервисы с REST API, которые вызываются из внешнего мира через Nginx. Как можно настроить логирование в Nginx, чтобы логировались только медленные запросы? Например, логировать все запросы, которые обрабатываются больше 2-х секунд, включая время ожидания подключения к REST-сервисам?

P.S. Хотелось бы узнать, как настроить именно Nginx (не писать какие-либо парсеры).
  • Вопрос задан
  • 1633 просмотра
Решения вопроса 1
@summerwind Автор вопроса
Web-программист
В общем, решение такое:
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


Всем спасибо за попытку помочь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
if ($upstream_response_time !~* "[0-3]\.[0-9][0-9][0-9]" { access_log /file format; }

Как-то так попробуйте.
Ответ написан
@zorruch
Бекенд на каком языке написан?
Может быть лучше попытаться использовать slow лог в php-fpm?

Решение "в лоб" для вашей задачи. Писать время выполнения запроса в лог - а потом парсить файл лог файл во время ротейта и "выцеплять" нужные запросы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы