Перейти к содержанию

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 (по местоположению / серверу / пользовательским переменным).

FOSSA Status Financial Contributors on Open Collective

Зачем?

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

Необходимо экономически эффективное решение для мониторинга метрик трафика/статуса запросов приложения. Это решение должно быть точным, чувствительным, надежным, достаточно легким и не подверженным пиковым нагрузкам.

Как это работает?

Этот модуль хранит список метрик, идентифицированных по accounting_id, в своем контексте.

Когда новый запрос поступает на сервер, модуль попытается найти его accounting_id, вычислить статистику и агрегировать их в соответствующие метрики по accounting_id.

Для каждого временного периода (определяемого interval) срабатывает таймер, метрики вращаются и экспортируются в лог-файлы или отправляются на удаленные лог-серверы.

Панель управления

Панель управления - Визуализация с помощью Grafana Accounting Dashboard

Конфигурация

Отредактируйте ваш 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.