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

Живая статистика из файла журнала

У меня nginx работает как балансировщик нагрузки перед несколькими веб-серверами. Я хотел бы видеть статистику в реальном времени с указанием времени ответа (может быть, гистограмма за последние 10 секунд?)

Я думаю, что у Varnish есть нечто подобное

Tail не очень полезен, так как в секунду выполняется около 1 тыс. Запросов.

Вы знаете какой-нибудь инструмент, который может это сделать? (просто чтобы я не изобретал велосипед)

редактировать

Я думаю, что в исходном посте я не был достаточно ясен. Мы уже используем collectd для получения различных видов статистики со всех серверов, и у нас есть хороший интерфейс, чтобы увидеть эти графики вживую.

Ищу что-то похожее на htop

Вы знаете о Заготовка статистики Nginx, право? Внизу страницы есть ссылки на методы мониторинга Nginx. Однако я не уверен в том, сколько времени откликнется на это.

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

К сожалению, я не знаю ни одного существующего способа получить данные о времени отклика в реальном времени. Учитывая, что я ожидаю, что это будет редкий случай, когда вам нужно будет проверить такие данные, кажется вероятным, что требуемые затраты на производительность (т.е. дополнительная обработка / ведение журнала на запрос) не кажутся оправданными. Я бы посоветовал просто записывать данные о времени отклика в свои журналы (например, как это) и запустите сценарий оболочки, чтобы проанализировать часть ваших журналов (и вывести сводку), когда вас интересуют данные.

Получить статистику в реальном времени не так уж сложно, но получить время отклика с ней труднее. Приведенные ниже подходы предоставляют только необработанные данные - они не отображают их за вас.

Если ты сможешь жить без время отклика (например, просто запрос / с - и разбивка по # чтению, записи, активным, общим соединениям и т. д.), используйте Модуль состояния заглушки HTTP. Он обеспечивает текстовый вывод информации, которую можно легко запросить и проанализировать. (Чтобы использовать этот модуль, Nginx должен быть скомпилирован с --with-http_stub_status_module)

Пример вывода:

Active connections: 291
server accepts handled requests
  16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

(3-я строка - принятые соединения, обработанные соединения, принятые запросы)

Есть интересная статья об использовании этих данных для создания графиков с помощью rrdtool, Вот.

Если данные о времени отклика особенно важны для вас, должна быть возможность изменить модуль состояния заглушки. Код (на самом деле всего около 5 КБ) находится в src/http/modules/ngx_http_stub_status_module.c. Например, есть модификация Вот модуль выводит агрегированные количества возвращенных кодов состояния HTTP.

Наконец, если вам просто нужно время ответа. Вы можете сохранить данные в Memcached, используя Модуль HTTP Memc. Для целей вашей гистограммы вы, по сути, должны создавать 2 ключа в секунду - основывать ключ на времени (например, $time_local) - один ключ для хранения счетчика количества запросов за эту секунду и один для хранения среднего времени ответа (или совокупного времени ответа) - работа с $request_time и / или $upstream_response_time переменные.

Я уверен, что вы сможете найти простой способ построения графиков данных, когда они у вас есть, но вот некоторые из возможных отправных точек:

  • Пусть сценарий извлекает данные (из заглушки, memcached и т. Д.) И генерирует столбцы ascii (например, как это), используйте watch для отслеживания вывода скрипта.
  • Если на вашем сервере есть PHP (и вы хотите его использовать (а не идеальный язык сценариев)), рассмотрите возможность изменения этот сценарий.
  • Наконец, возможно, рассмотрим gnuplot (output as_ascii), хотя для этой цели он кажется чрезмерным.