traffic-accounting: Мониторинг входящего и исходящего трафика в реальном времени для NGINX
Установка
Вы можете установить этот модуль на любой дистрибутив, основанный на RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-traffic-accounting
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-traffic-accounting
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_accounting_module.so;
Этот документ описывает nginx-module-traffic-accounting v2.0.4, выпущенный 16 мая 2022 года.
Мониторинг входящего и исходящего трафика в реальном времени для 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.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-traffic-accounting.