traffic-accounting: Мониторинг входного и исходного трафика в реальном времени для NGINX
Установка на Debian/Ubuntu
Эти документы относятся к APT пакету nginx-module-traffic-accounting, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-traffic-accounting
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|--------------------|-------------|---------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Мониторинг входного и исходного трафика в реальном времени для NGINX.
Решение для мониторинга трафика и статусов кодов в реальном времени для NGINX, которое требует меньше памяти и процессорного времени, чем другие решения для анализа логов в реальном времени. Полезно для учета трафика на основе логики конфигурации NGINX (по местоположению / серверу / переменным, определяемым пользователем).
Почему?
Решения для анализа логов в реальном времени, которые требуют нескольких машин для хранения и анализа, слишком громоздки для мониторинга приложений.
Нужен экономичный способ мониторинга метрик/статусов трафика запросов приложений. Это решение должно быть точным, чувствительным, надежным, достаточно легким и не зависеть от пиков трафика.
Как это работает?
Этот модуль сохраняет список метрик, определенных по accounting_id, в своем контексте.
Когда новый запрос поступает на сервер, модуль попытается найти его accounting_id, вычислить статистику и агрегировать их в соответствующие метрики по accounting_id.
Для каждого периода времени (определенного по interval) срабатывает таймер, метрики вращаются и экспортируются в лог-файлы или отправляются на удаленные лог-серверы.
Панель мониторинга
Панель мониторинга - Визуализация с помощью Grafana

Конфигурация
Отредактируйте ваш nginx.conf.
Пример:
http {
# включение функции учета
accounting on;
accounting_log logs/http-accounting.log;
...
server {
server_name example.com;
accounting_id $http_host; # задать строку accounting_id по переменной
location / {
accounting_id accounting_id_str; # задать строку accounting_id по местоположению
...
}
location /api {
accounting_id API_PC; # для ПК
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
accounting_id API_MOBILE; # для мобильных устройств
}
...
}
}
}
Директивы
accounting
синтаксис: accounting on | off
по умолчанию: accounting off
контекст: http
accounting_log
синтаксис: accounting_log \ [level]
по умолчанию: -
контекст: http
Настраивает логирование.
Поддерживает как локальный file путь, так и stderr, или syslog:.
Второй параметр – уровень логирования.
Для получения дополнительной информации о поддерживаемых параметрах смотрите на этой странице от nginx.org.
Если не указано, лог учета будет записан в /dev/log.
accounting_id
синтаксис: accounting_id \
по умолчанию: accounting_id default
контекст: http, server, location, if in location
Задает строку accounting_id по определяемой пользователем переменной.
Эта строка используется для определения, к каким метрикам должен быть агрегирован запрос/сессия.
accounting_interval
синтаксис: accounting_interval \
по умолчанию: accounting_interval 60
контекст: http
Указывает интервал отчетности. По умолчанию 60 секунд.
accounting_perturb
синтаксис: accounting_perturb on | off
по умолчанию: accounting_perturb off
контекст: http
Случайным образом смещает интервал отчетности на 20% от обычного времени.
Использование
Этот модуль можно настроить для записи метрик в локальный файл, удаленный лог-сервер или локальное устройство syslog.
Программное обеспечение для агрегации логов с открытым исходным кодом, такое как logstash, также поддерживает входные данные syslog, что поможет вам создать центральный лог-сервер. Смотрите samples/logstash/ для примеров. [Рекомендуется]
Чтобы собирать логи с локальным syslog, обратитесь к Lax/ngx_http_accounting_module-utils для примера конфигурации / утилит.
docker / docker-compose
Чтобы продемонстрировать с помощью docker-compose, запустите
docker-compose build
docker-compose up -d
Откройте Grafana (адрес: http://localhost:3000) в вашем браузере.
Создайте и настройте источник данных elasticsearch с параметрами:
Type: elasticsearch
URL: http://elasticsearch:9200
Version: 5.6+
Min time interval: 1m
Затем импортируйте панель учета из samples/accounting-dashboard-grafana.json.
Формат журнала метрик
## HTTP
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:HTTP_ECHO_HELLO|requests:4872|bytes_in:438480|bytes_out:730800|latency_ms:0|upstream_latency_ms:0|200:4872
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:INDEX|requests:4849|bytes_in:421863|bytes_out:1857167|latency_ms:0|upstream_latency_ms:0|301:4849
## Stream
2018/05/14 14:18:22 [notice] 5#0: pid:5|from:1526278642|to:1526278659|accounting_id:TCP_PROXY_ECHO|sessions:9723|bytes_in:860343|bytes_out:2587967|latency_ms:4133|upstream_latency_ms:3810|200:9723
Каждая строка в выводе журнала содержит метрики для конкретного accounting_id,
которые содержат список ключ-значение.
| имя ключа | значения значений |
|---|---|
pid |
pid рабочего процесса nginx |
from / to |
метрика была собрана за период между этими временными метками |
accounting_id |
идентификатор учетной единицы, установленный директивой accounting_id |
requests |
количество обработанных запросов в текущем периоде (только модуль HTTP) |
sessions |
количество обработанных сессий в текущем периоде (только модуль Stream) |
bytes_in |
общее количество байтов, полученных сервером |
bytes_out |
общее количество байтов, отправленных сервером |
latency_ms |
сумма всех $session_time запросов/сессий, в миллисекундах |
upstream_latency_ms |
сумма $upstream_response_time, в миллисекундах |
200 / 302 / 400 / 404 / 500 ... |
количество запросов/сессий со статусом 200/302/400/404/500 и т. д. Обратите внимание на различия между http-кодами и кодами потока |
Пример конфигурации
http {
accounting on;
accounting_log logs/http-accounting.log;
accounting_id $hostname;
...
}
stream {
accounting on;
accounting_log logs/stream-accounting.log;
accounting_id $hostname;
...
}
Визуализация
Визуализация с помощью Kibana или Grafana проста.
Смотрите samples/ для примеров.
Ветки
- master : основная ветка разработки.
- tag v0.1 или v2-freeze-20110526 : устаревший релиз. работает с версиями nginx (0.7.xx, 0.8.xx), nginx 0.9 не протестирован. не работал с nginx выше 1.0.x.