Как отслеживать время отклика nginx с помощью стека ELK?

Я хотел бы создать монитор, который будет показывать среднее время отклика nginx в реальном времени.

На изображении ниже показано использование ЦП, например, я хотел бы создать что-то подобное для avg response time

введите здесь описание изображения

Я знаю, как отслеживать время ответа на отдельные запросы (https://lincolnloop.com/blog/tracking-application-response-time-nginx/)

Хотя мне придется подумать, как игнорировать нестраничные/апи-запросы, такие как запрос статического изображения.

Это должно быть довольно базовые требования, но я не смог найти в Google, как это сделать.


person eugene    schedule 10.11.2019    source источник
comment
Настройте формат access_log в соответствии с ответом xeraa. Чтобы игнорировать запросы статических изображений, вы можете использовать условную регистрацию docs.nginx.com/ nginx/admin-guide/monitoring/logging, это будет более эффективно, чем фильтрация на стороне ELK   -  person Alex C    schedule 11.11.2019


Ответы (1)


Это на самом деле сложнее, чем вы ожидаете:

Метрибит

Модуль nginx Metricbeat не содержит этой информации. Он построен на основе stubstatus и более сам процесс, а не время отдельных запросов.

Filebeat

Вы можете ожидать этого от модуля nginx для Filebeat. Он построен на основе журнала доступа nginx и имеет отдельные запросы. К сожалению, время отклика не является частью журнала доступа по умолчанию (по крайней мере, в Ubuntu) — только количество отправленных байтов. Вот пример (код ответа 200, отправлено 158 байт):

34.24.14.22 - - [10/Nov/2019:06:54:51 +0000] "GET / HTTP/1.1" 200 159 "-" "Go-http-client/1.1"

Пакетбит

У этого есть поле под названием event.duration, которое звучит многообещающе. Но будьте осторожны с модулем HTTP — он предназначен только для HTTP-трафика, а не для HTTPS (потому что вы не видите зашифрованный трафик). В большинстве случаев вы захотите использовать HTTPS для своего приложения, так что это не так уж полезно и в основном будет показывать перенаправления на HTTPS.

Другие протоколы, такие как TLS (это только время для начального рукопожатия) или информация о потоке (это группа пакетов) — это не то, чем вы являетесь после IMO.

Настройка

Боюсь, вам понадобится некоторая настройка, и у вас в основном есть два варианта:

  1. Настройте формат журнала nginx, как описано в сообщении блога, на которое вы ссылаетесь. Вам также потребуется изменить шаблон в конвейере загрузки Elasticsearch, чтобы правильно извлечь информацию о времени.
  2. Я предполагаю, что у вас есть приложение для nginx. Тогда вы можете получить еще больше информации об этом, чем просто синхронизация, используя (APM/tracing](https://www.elastic.co/products/apm) с агентами для разных языков. Таким образом, вы также автоматически пропустите статические ресурсы, такие как изображения, и сосредоточитесь на соответствующих частях вашего приложения.
person xeraa    schedule 11.11.2019