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

traffic-accounting: Мониторинг входного и исходного трафика в реальном времени для NGINX

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-traffic-accounting, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
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 (по местоположению / серверу / переменным, определяемым пользователем).

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.