События мониторинга#
Мониторинг необходим для раннего обнаружения и локализации технологических событий прежде, чем они окажут негативное влияние на клиентов SynGX. Мониторинг позволяет в реальном времени получать объективную информации о состоянии SynGX, отслеживать статистику обработки запросов и своевременно реагировать на нештатные или не типичные ситуации в работе.
При работе SynGX необходимо отслеживать два вида метрик:
системные метрики, к которым относятся потребление ЦПУ, использование оперативной памяти, наличие доступного дискового пространства и т.д. на VM. Системные метрики показывают, достаточно ли всем процессам, работающим в ОС на VM, ресурсов для корректной работы. Если какой-либо процесс или приложение (необязательно SynGX) в случае сбоя или ошибки начинает потреблять все доступные ресурсы, это начинает влиять на работу других процессов и приложений. С точки зрения SynGX негативное влияние будет приводить к увеличению времени обработки сетевых запросов, возникновению ошибок при установлении соединений и т.д. За получение и мониторинг системных метрик отвечают администраторы VM, на которых установлен SynGX, в соответствии с принятыми стандартами и практиками.
метрик работоспособности и статистики обработки запросов, к которым относятся количество установленных на текущий момент соединений, количество принятых запросов, количество обработанных HTTP запросов с кодами ответов 2xx, 3xx и т.д. Эти метрики показывают, насколько успешно обрабатываются запросы клиентов SynGX с течением времени. Например, в нормальном режиме количество обработанных HTTP запросов с кодами ответов 4xx и 5xx должно быть минимальным. Если их количество начинает расти, это признак того, что в цепочке обработки запросов возникли какие-то проблемы, которые требуют устранения. Количество установленных на текущий момент соединений характеризует текущий уровень нагрузки на SynGX. Если это количество начинает расти, это может быть признаком DoS атаки. Если это количество сильно снижается, это может означать наличие сетевых проблем при обращении к серверу SynGX (например, сбой DNS сервера).
Для мониторинга своей работы SynGX предоставляет метрики работоспособности и статистику обработки запросов в ответ на HTTP REST запрос. Адрес, на который необходимо отправлять запрос, а также формат ответа (в виде JSON-структуры или текстовом виде в формате Prometheus) настраиваются в конфигурации SynGX. Пример настройки такого рода приведен в предустановленной конфигурации SynGX.
При настройке адресов, по которым будут доступны метрики, необходимо использовать существующие в SynGX механизмы обеспечения безопасности:
Настроить доступ только с использованием протокола TLS не ниже версии 1.2.
Настроить доступ с проверкой имени и пароля пользователя.
Настроить доступ с определенных сетевых адресов.
Возможность настроить SynGX, чтобы он самостоятельно отправлял метрики в какую-либо систему, не предусмотрена. Дополнительные метрики могут быть настроены администратором самостоятельно в конфигурации SynGX (конфигурационный файл с расширением .conf).
Полный перечень доступных метрик SynGX и способов их настройки описан ниже.
Перечень доступных метрик#
Метрики предоставляют подключенные модули SynGX - nginx-module-vts, ngx_http_extstatus_module, nginx_upstream_check_module, ngx_stream_upstream_check_module, sts (nginx-module-stream-sts, nginx-module-sts), ngx_hashicorp_vault_module. Необходимо учесть, что некоторые модули являются динамическими, то есть, требуется их дополнительное подключение и настройка (рассмотрено в разделе «Подключение динамических модулей SynGX»).
Для доступа к конкретной группе метрик необходимо через командную строку отправить GET-запрос типа (запрос к модулю SynGX):
{ip-адрес сервера либо 127.0.0.1}/{location}
, где {location} - адрес, по которому можно получить метрики из конкретного модуля SynGX. Адрес настраивается в конфигурации SynGX.
Пример GET-запроса для отображения HTML страницы:
localhost:8080/status_html
Далее подробно рассмотрим, какие метрики может выдавать каждый указанный модуль.
Модуль nginx-module-vts
Данный модуль предоставляет возможность получения статистики по запросам в разрезе виртуальных серверов в формате html-страницы, а также можно настроить выдачу в форматах json и prometheus. Помимо этого, рассматриваемый модуль может выдавать статистику по использованию кеша для статистического содержимого в форматах json и prometheus. Модуль обеспечивает предоставление следующих видов метрик:
main:
время безотказной работы ((nowMsec - loadMsec)/1000); nowMsec, loadMsec - в миллисекундах;
connections:
всего подключений и запросов (аналогично stub_status_module в NGINX);
sharedZones:
информация об объеме общей памяти, используемой модулем nginx-module-vts;
serverZones:
объем трафика (входящий/исходящий), количество запросов и ответов и коэффициент попадания в кеш на каждую зону сервера;
объем общего трафика (входящий/исходящий), количество запросов и ответов (имя зоны) и коэффициент совпадений;
filterZones:
объем трафика (входящий/исходящий), количество запросов и ответов, а также коэффициент попадания в кеш для каждой зоны сервера, отфильтрованной с помощью vhost_traffic_status_filter_by_set_key директивы;
общий объем трафика (входящий / исходящий), количество запросов и ответов (имя зоны *) и коэффициент совпадений, отфильтрованные с помощью vhost_traffic_status_filter_by_set_key директивы .
upstreamZones:
объем трафика (входящий/исходящий) и количество запросов и ответов на сервер в каждой вышестоящей группе;
текущие настройки (weight, maxfails, failtimeout…) в synx.conf
состояние серверов по результатам пассивной проверки работоспособности (доступно только в формате prometheus)
cacheZones:
объем трафика (входящий/исходящий), размер (capacity/used) и коэффициент попаданий на каждую зону кэша при использовании директивы proxy_cache.
Пример конфигурации для получения метрик приведен ниже:
server {
...
location /vts_html {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
location /vts_json {
vhost_traffic_status_display;
vhost_traffic_status_display_format json;
}
location /vts_prometheus {
vhost_traffic_status_display;
vhost_traffic_status_display_format prometheus;
}
}
Пример вывода метрик модуля в формате HTML:
Пример вывода метрик модуля в формате JSON:
Пример вывода метрик модуля в формате Prometheus:
# HELP syngx_mtx_info Nginx info
# TYPE syngx_mtx_info gauge
syngx_mtx_info{hostname="6179ed2dd90b",module_version="v0.2.2",version="1.24.0"} 1
# HELP syngx_mtx_start_time_seconds Nginx start time
# TYPE syngx_mtx_start_time_seconds gauge
syngx_mtx_start_time_seconds 1741938706.782
# HELP syngx_mtx_main_connections Nginx connections
# TYPE syngx_mtx_main_connections gauge
syngx_mtx_main_connections{status="accepted"} 7
syngx_mtx_main_connections{status="active"} 1
syngx_mtx_main_connections{status="handled"} 7
syngx_mtx_main_connections{status="reading"} 0
syngx_mtx_main_connections{status="requests"} 7
syngx_mtx_main_connections{status="waiting"} 0
syngx_mtx_main_connections{status="writing"} 1
# HELP syngx_mtx_main_shm_usage_bytes Shared memory [example_name] info
# TYPE syngx_mtx_main_shm_usage_bytes gauge
syngx_mtx_main_shm_usage_bytes{shared="max_size"} 2097152
syngx_mtx_main_shm_usage_bytes{shared="used_size"} 14067
syngx_mtx_main_shm_usage_bytes{shared="used_node"} 4
# HELP syngx_mtx_server_bytes_total The request/response bytes
# TYPE syngx_mtx_server_bytes_total counter
# HELP syngx_mtx_server_requests_total The requests counter
# TYPE syngx_mtx_server_requests_total counter
# HELP syngx_mtx_server_request_seconds_total The request processing time in seconds
# TYPE syngx_mtx_server_request_seconds_total counter
# HELP syngx_mtx_server_request_seconds The average of request processing times in seconds
# TYPE syngx_mtx_server_request_seconds gauge
# HELP syngx_mtx_server_request_duration_seconds The histogram of request processing time
# TYPE syngx_mtx_server_request_duration_seconds histogram
# HELP syngx_mtx_server_cache_total The requests cache counter
# TYPE syngx_mtx_server_cache_total counter
syngx_mtx_server_bytes_total{host="localhost",direction="in"} 435
syngx_mtx_server_bytes_total{host="localhost",direction="out"} 24520
syngx_mtx_server_requests_total{host="localhost",code="1xx"} 0
syngx_mtx_server_requests_total{host="localhost",code="2xx"} 5
syngx_mtx_server_requests_total{host="localhost",code="3xx"} 0
syngx_mtx_server_requests_total{host="localhost",code="4xx"} 0
syngx_mtx_server_requests_total{host="localhost",code="5xx"} 0
syngx_mtx_server_request_seconds_total{host="localhost"} 0.002
syngx_mtx_server_request_seconds{host="localhost"} 0.001
syngx_mtx_server_cache_total{host="localhost",status="miss"} 1
syngx_mtx_server_cache_total{host="localhost",status="bypass"} 0
syngx_mtx_server_cache_total{host="localhost",status="expired"} 0
syngx_mtx_server_cache_total{host="localhost",status="stale"} 0
syngx_mtx_server_cache_total{host="localhost",status="updating"} 0
syngx_mtx_server_cache_total{host="localhost",status="revalidated"} 0
syngx_mtx_server_cache_total{host="localhost",status="hit"} 0
syngx_mtx_server_cache_total{host="localhost",status="scarce"} 0
syngx_mtx_server_bytes_total{host="marat",direction="in"} 85
syngx_mtx_server_bytes_total{host="marat",direction="out"} 172
syngx_mtx_server_requests_total{host="marat",code="1xx"} 0
syngx_mtx_server_requests_total{host="marat",code="2xx"} 1
syngx_mtx_server_requests_total{host="marat",code="3xx"} 0
syngx_mtx_server_requests_total{host="marat",code="4xx"} 0
syngx_mtx_server_requests_total{host="marat",code="5xx"} 0
syngx_mtx_server_request_seconds_total{host="marat"} 0.000
syngx_mtx_server_request_seconds{host="marat"} 0.000
syngx_mtx_server_cache_total{host="marat",status="miss"} 0
syngx_mtx_server_cache_total{host="marat",status="bypass"} 0
syngx_mtx_server_cache_total{host="marat",status="expired"} 0
syngx_mtx_server_cache_total{host="marat",status="stale"} 0
syngx_mtx_server_cache_total{host="marat",status="updating"} 0
syngx_mtx_server_cache_total{host="marat",status="revalidated"} 0
syngx_mtx_server_cache_total{host="marat",status="hit"} 0
syngx_mtx_server_cache_total{host="marat",status="scarce"} 0
syngx_mtx_server_bytes_total{host="*",direction="in"} 520
syngx_mtx_server_bytes_total{host="*",direction="out"} 24692
syngx_mtx_server_requests_total{host="*",code="1xx"} 0
syngx_mtx_server_requests_total{host="*",code="2xx"} 6
syngx_mtx_server_requests_total{host="*",code="3xx"} 0
syngx_mtx_server_requests_total{host="*",code="4xx"} 0
syngx_mtx_server_requests_total{host="*",code="5xx"} 0
syngx_mtx_server_request_seconds_total{host="*"} 0.002
syngx_mtx_server_request_seconds{host="*"} 0.000
syngx_mtx_server_cache_total{host="*",status="miss"} 1
syngx_mtx_server_cache_total{host="*",status="bypass"} 0
syngx_mtx_server_cache_total{host="*",status="expired"} 0
syngx_mtx_server_cache_total{host="*",status="stale"} 0
syngx_mtx_server_cache_total{host="*",status="updating"} 0
syngx_mtx_server_cache_total{host="*",status="revalidated"} 0
syngx_mtx_server_cache_total{host="*",status="hit"} 0
syngx_mtx_server_cache_total{host="*",status="scarce"} 0
# HELP syngx_mtx_upstream_down Upstream server passive hc state, 0 means server is ON, 1 means server is OFF (down)
# TYPE syngx_mtx_upstream_down gauge
# HELP syngx_mtx_upstream_bytes_total The request/response bytes
# TYPE syngx_mtx_upstream_bytes_total counter
# HELP syngx_mtx_upstream_requests_total The upstream requests counter
# TYPE syngx_mtx_upstream_requests_total counter
# HELP syngx_mtx_upstream_request_seconds_total The request Processing time including upstream in seconds
# TYPE syngx_mtx_upstream_request_seconds_total counter
# HELP syngx_mtx_upstream_request_seconds The average of request processing times including upstream in seconds
# TYPE syngx_mtx_upstream_request_seconds gauge
# HELP syngx_mtx_upstream_response_seconds_total The only upstream response processing time in seconds
# TYPE syngx_mtx_upstream_response_seconds_total counter
# HELP syngx_mtx_upstream_response_seconds The average of only upstream response processing times in seconds
# TYPE syngx_mtx_upstream_response_seconds gauge
# HELP syngx_mtx_upstream_request_duration_seconds The histogram of request processing time including upstream
# TYPE syngx_mtx_upstream_request_duration_seconds histogram
# HELP syngx_mtx_upstream_response_duration_seconds The histogram of only upstream response processing time
# TYPE syngx_mtx_upstream_response_duration_seconds histogram
syngx_mtx_upstream_down{upstream="u1",backend="127.0.0.1:10001",hc="passive"} 0
syngx_mtx_upstream_bytes_total{upstream="u1",backend="127.0.0.1:10001",direction="in"} 79
syngx_mtx_upstream_bytes_total{upstream="u1",backend="127.0.0.1:10001",direction="out"} 177
syngx_mtx_upstream_requests_total{upstream="u1",backend="127.0.0.1:10001",code="1xx"} 0
syngx_mtx_upstream_requests_total{upstream="u1",backend="127.0.0.1:10001",code="2xx"} 1
syngx_mtx_upstream_requests_total{upstream="u1",backend="127.0.0.1:10001",code="3xx"} 0
syngx_mtx_upstream_requests_total{upstream="u1",backend="127.0.0.1:10001",code="4xx"} 0
syngx_mtx_upstream_requests_total{upstream="u1",backend="127.0.0.1:10001",code="5xx"} 0
syngx_mtx_upstream_request_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
syngx_mtx_upstream_request_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.002
syngx_mtx_upstream_response_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
syngx_mtx_upstream_response_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.002
# HELP syngx_mtx_cache_usage_bytes THe cache zones info
# TYPE syngx_mtx_cache_usage_bytes gauge
# HELP syngx_mtx_cache_bytes_total The cache zones request/response bytes
# TYPE syngx_mtx_cache_bytes_total counter
# HELP syngx_mtx_cache_requests_total The cache requests counter
# TYPE syngx_mtx_cache_requests_total counter
syngx_mtx_cache_usage_bytes{cache_zone="mycache",cache_size="max"} 9223372036854771712
syngx_mtx_cache_usage_bytes{cache_zone="mycache",cache_size="used"} 0
syngx_mtx_cache_bytes_total{cache_zone="mycache",direction="in"} 79
syngx_mtx_cache_bytes_total{cache_zone="mycache",direction="out"} 177
syngx_mtx_cache_requests_total{cache_zone="mycache",status="miss"} 1
syngx_mtx_cache_requests_total{cache_zone="mycache",status="bypass"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="expired"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="stale"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="updating"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="revalidated"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="hit"} 0
syngx_mtx_cache_requests_total{cache_zone="mycache",status="scarce"} 0
Модуль ngx_http_extstatus_module
Данный модуль предоставляет возможность получения детальной статистики по HTTP-запросам в разрезе кодов HTTP-ответов в форматах json и prometheus (нужна настройка в конфигурации SynGX). Помимо этого, он может выдавать статистику по использованию TLS-соединений и статистику по сертификатам в форматах json и prometheus (нужна настройка в конфигурации SynGX), а также статистику соединений в разрезе worker процессов.
Название метрики |
Описание метрики |
|---|---|
|
Текущее количество установленных подключений |
|
Текущее количество доступных подключений |
|
количество активных соединений |
|
количество принятых запросов |
|
количество обработанных запросов |
|
количество запросов |
|
Текущее число соединений, в которых SynGX в настоящий момент читает заголовок запроса |
|
Текущее число соединений, в которых SynGX в настоящий момент отвечает клиенту |
|
Текущее число бездействующих клиентских соединений в ожидании запроса |
|
Время запуска (старта) SynGX |
|
Текущее время получения метрики |
|
Количество 2XX HTTP-ответов |
|
Количество 3XX HTTP-ответов |
|
Количество 4XX HTTP-ответов |
|
Количество 5XX HTTP-ответов |
|
Количество 200 HTTP-ответов |
|
Количество 403 HTTP-ответов |
|
Общее количество ответов, всего |
|
Количество TLS Handshake |
|
Количество неудавшихся TLS Handshake |
|
Количество переиспользованных сессий |
|
Текущее количество подключений, которые может установить worker процесс - как для входящих запросов, так и для прокси-запросов |
|
Текущее количество установленных подключений на worker процесс |
|
Максимальный объем памяти, выделенный для хранения данных в разделяемой памяти для зоны |
|
Свободный объем разделяемой памяти для зоны в байтах |
|
Свободный объем разделяемой памяти для зоны в процентах |
|
Период времени (в секундах), за который собираются статистические данные |
|
Время начала периода сбора статистики |
|
Время окончания периода сбора статистики |
|
Количество запросов за период для указанного HTTP-метода и кода состояния |
|
Среднее время выполнения запросов (в секундах) за период для указанного HTTP-метода и кода состояния |
|
Максимальное время выполнения запроса (в секундах) за период для указанного HTTP-метода и кода состояния |
|
Точное время, когда был выполнен самый медленный запрос за период для указанного HTTP-метода и кода состояния |
|
Количество запросов за всё время работы для указанного HTTP-метода и кода состояния |
|
Массив объектов со статистикой по использованию http proxy cache (директивы proxy_cache_path и proxy_cache) |
Объект со статистикой по использованию http proxy cache
Поле |
Описание |
|---|---|
|
Путь из директивы proxy_cache_path |
|
Одноименный параметр из директивы proxy_cache_path |
|
Одноименный параметр из директивы proxy_cache_path |
|
Кеш считается «холодным», пока proxy-cache-loader не просканирует директорию с закешированными файлами. Этот процесс запускается через минуту после старта сервера. Завершение процесса зависит от количества файлов в директории. |
|
Размер в байтах занятого места на диске всеми закешированными ответами (актуально только при cold=0) |
|
Количество файлов в кеше (актуально только при cold=0) |
|
Размер файловой системы в байтах, на которой находится директория с кешом |
|
Размер свободного места в байтах в файловой системе, на которой находится директория с кешом |
|
Количество ответов и сумма размеров всех ответов со статусом hit |
|
Количество ответов и сумма размеров всех ответов со статусом miss |
|
Количество ответов и сумма размеров всех ответов со статусом expired |
|
Количество ответов и сумма размеров всех ответов со статусом bypass |
|
Количество ответов и сумма размеров всех ответов со статусом stale |
|
Количество ответов и сумма размеров всех ответов со статусом revalidated |
|
Количество ответов и сумма размеров всех ответов со статусом updating |
Кеш статусы ответов
Статус |
Описание |
|---|---|
|
Ответ отдан из кеша, данные в кеше валидны |
|
Данных в кеше для этого запроса не нашлось, был сделан запрос к вышестоящему серверу |
|
Данные в кеше есть, но время жизни истекло, был сделан запрос к вышестоящему серверу |
|
Запрос был пропущен мимо кеша в соответствии с директивой proxy_cache_bypass |
|
Данные в кеше есть, время жизни истекло, но ответ все равно был отдан из кеша в соответствии с директивой proxy_cache_use_stale |
|
Тоже что expired, но запрос на вышестоящий сервер делается с заголовком If-Modified-Since, в соответствии с директивой proxy_cache_revalidate on; |
|
Данные в кеше есть, время жизни истекло, но ответ все равен был отдан из кеша, т.к. запрос к вышестоящему серверу на обновление данных уже находится в процессе выполнения, а в конфигурации указана директива proxy_cache_lock on или proxy_cache_use_stale updating |
Рекомендация: для отслеживания утилизации соединений используйте метрики established_connections_total и available_connections_total. Метрики active_connection, reading, writing, waiting дают неверный результат, если произошло аварийное завершение worker процесса.
В случае превышения метрикой syngx_worker_connections_established значения, заданного в директиве worker_connections в error.log будет выдана ошибка "worker connections are not enough", при этом новое соединение не будет установлено.
Пример конфигурации для получения метрик приведен ниже:
http {
snx_http_extstatus_request_time timer=10s cache_time=off;
...
server {
...
location /status_prometheus {
snx_http_extstatus_prometheus on;
}
location /status_json {
snx_http_extstatus_json on;
}
location /certificates_metrics_json {
snx_http_certificates_status_json on;
}
location /certificates_metrics_prometheus {
snx_http_certificates_status_prometheus on;
}
...
}
...
}
Пример вывода метрик модуля в формате JSON:
{
"established_connections_total": 10,
"available_connections_total": 8694,
"active_connections": 1,
"accepts": 1,
"handled": 1,
"requests": 1,
"reading": 0,
"writing": 1,
"waiting": 0,
"syngx_uptime": 1741340815,
"syngx_time": 1741340815,
"responses": {
"2xx": 0,
"3xx": 0,
"4xx": 0,
"5xx": 0,
"codes": {},
"total": 0
},
"ssl": {
"handshakes": 0,
"handshakes_failed": 0,
"session_reuses": 0
},
"workers": [
{
"pid": 1249596,
"connections": {
"established": 5,
"available": 4091
}
},
{
"pid": 1249597,
"connections": {
"established": 4,
"available": 4092
}
}
],
"shared_memory_stat": [
{
"example_name": {
"maxSize (bytes)": 2080768,
"free (bytes)": 2068480,
"free (%)": 99.41
}
},
{
"extstatus_shm_zone": {
"maxSize (bytes)": 37531648,
"free (bytes)": 37519360,
"free (%)": 99.97
}
}
],
"request_time_stat_period (s)": 10,
"request_time_stat_period_start": "2025-02-28T10:41:14.242+03:00",
"request_time_stat_period_end": "2025-02-28T10:41:24.239+03:00",
"request_time_stat": [
{
"GET": [
{
"200": {
"num": 9,
"time_avg (s)": 0.000778,
"time_max (s)": 0.004,
"time_max_event_time": "2025-02-28T10:40:47.952+03:00",
"global_num": 9
}
}
]
},
{
"OPTIONS": [
{
"501": {
"num": 2,
"time_avg (s)": 0.015,
"time_max (s)": 0.029,
"time_max_event_time": "2025-02-28T10:40:54.666+03:00",
"global_num": 2
}
}
]
}
],
"caches": [
{
"path": "/tmp/nginx/cache0",
"keys_zone": "cache0",
"cold": 1,
"max_size": 15728640,
"size": 0,
"file_count": 0,
"fs_size": 106769133568,
"fs_available": 82180239360,
"hit": {
"responses": 0,
"bytes": 0
},
"miss": {
"responses": 0,
"bytes": 0
},
"expired": {
"responses": 0,
"bytes": 0
},
"bypass": {
"responses": 0,
"bytes": 0
},
"stale": {
"responses": 0,
"bytes": 0
},
"revalidated": {
"responses": 0,
"bytes": 0
},
"updating": {
"responses": 0,
"bytes": 0
}
}
]
}
Пример вывода метрик модуля в формате Prometheus:
# HELP syngx_established_connections_total Total number of established connections
# TYPE syngx_established_connections_total gauge
# HELP syngx_available_connections_total Total number of available connections
# TYPE syngx_available_connections_total gauge
# HELP syngx_active_connections Number of active connections
# TYPE syngx_active_connections gauge
# HELP syngx_connections_accepted_total Total number of accepted connections
# TYPE syngx_connections_accepted_total counter
# HELP syngx_connections_dropped_total Total number of dropped connections
# TYPE syngx_connections_dropped_total counter
# HELP syngx_handled Number of handled connections
# TYPE syngx_handled counter
# HELP syngx_http_requests_total Total number of http requests
# TYPE syngx_http_requests_total counter
# HELP syngx_reading Number of requests in reading state
# TYPE syngx_reading gauge
# HELP syngx_writing Number of requests in writing state
# TYPE syngx_writing gauge
# HELP syngx_http_requests_current Number of request in reading or writing state
# TYPE syngx_http_requests_current gauge
# HELP syngx_connections_idle Number of idle connections
# TYPE syngx_connections_idle gauge
# HELP syngx_uptime Syngx uptime
# TYPE syngx_uptime counter
# HELP syngx_time Syngx time
# TYPE syngx_time counter
syngx_established_connections_total 10
syngx_available_connections_total 8694
syngx_active_connections 1
syngx_connections_accepted_total 4
syngx_connections_dropped_total 1
syngx_handled 4
syngx_http_requests_total 4
syngx_reading 0
syngx_writing 1
syngx_connections_idle 0
syngx_http_requests_current 1
syngx_uptime 652
syngx_time 1741341467
# HELP syngx_http_requests Total number of http requests by response codes
# TYPE syngx_http_requests counter
syngx_http_requests{code="2xx"} 1
syngx_http_requests{code="3xx"} 0
syngx_http_requests{code="4xx"} 2
syngx_http_requests{code="5xx"} 0
syngx_http_requests{code="200"} 1
syngx_http_requests{code="404"} 2
syngx_http_requests{code="total"} 3
# HELP syngx_ssl_handshakes Total number of ssl handshakes
# TYPE syngx_ssl_handshakes counter
# HELP syngx_ssl_handshakes_failed_total Total number of failed ssl handshakes
# TYPE syngx_ssl_handshakes_failed_total counter
# HELP syngx_ssl_handshakes_total Total number of ssl handshakes
# TYPE syngx_ssl_handshakes_total counter
# HELP syngx_ssl_session_reuses Total number of ssl session reuses
# TYPE syngx_ssl_session_reuses counter
syngx_ssl_handshakes 0
syngx_ssl_handshakes_failed_total 0
syngx_ssl_handshakes_total 0
syngx_ssl_session_reuses 0
# HELP syngx_worker_connections_available Current number of connections that worker can establish - both for incoming requests and for proxied requests
# TYPE syngx_worker_connections_available counter
syngx_worker_connections_available{worker="1249596"} 4091
syngx_worker_connections_available{worker="1249597"} 4092
syngx_worker_connections_available{worker="1249600"} 511
# HELP syngx_worker_connections_established The current number of establishe connections on the worker
# TYPE syngx_worker_connections_established counter
syngx_worker_connections_established{worker="1249596"} 5
syngx_worker_connections_established{worker="1249597"} 4
syngx_worker_connections_established{worker="1249600"} 1
# HELP syngx_shm_max_size_bytes Shared memory total size
# TYPE syngx_shm_max_size_bytes gauge
# HELP syngx_shm_free_bytes Shared memory free size
# TYPE syngx_shm_free_bytes gauge
# HELP syngx_shm_free_percent Shared memory free in percent size
# TYPE syngx_shm_free_percent gauge
syngx_shm_max_size_bytes{zone="example_name"} 2080768
syngx_shm_free_bytes{zone="example_name"} 2072576
syngx_shm_free_percent{zone="example_name"} 99.61
syngx_shm_max_size_bytes{zone="extstatus_shm_zone"} 37531648
syngx_shm_free_bytes{zone="extstatus_shm_zone"} 37519360
syngx_shm_free_percent{zone="extstatus_shm_zone"} 99.97
# HELP syngx_request_time_stat_period_seconds Duration of the request time statistics period in seconds
# TYPE syngx_request_time_stat_period_seconds gauge
# HELP syngx_request_time_stat_period_start_seconds Start time of the request time statistics period in seconds
# TYPE syngx_request_time_stat_period_start_seconds gauge
# HELP syngx_request_time_stat_period_end_seconds End time of the request time statistics period in seconds
# TYPE syngx_request_time_stat_period_end_seconds gauge
# HELP syngx_request_time_stat_num Total number of requests for method and status code
# TYPE syngx_request_time_stat_num counter
# HELP syngx_request_time_stat_time_avg_seconds Average request time in seconds for method and status code
# TYPE syngx_request_time_stat_time_avg_seconds gauge
# HELP syngx_request_time_stat_time_max_seconds Maximum request time in seconds for method and status code
# TYPE syngx_request_time_stat_time_max_seconds gauge
# HELP syngx_request_time_stat_time_max_event_time_seconds Event time for maximum request time for method and status code
# TYPE syngx_request_time_stat_time_max_event_time_seconds gauge
# HELP syngx_request_time_stat_global_num Global total number of requests for method and status code
# TYPE syngx_request_time_stat_global_num counter
syngx_request_time_stat_period_seconds 10.000
syngx_request_time_stat_period_start_seconds 1740728474.242
syngx_request_time_stat_period_end_seconds 1740728484.239
syngx_request_time_stat_num{method="GET",status_code="200"} 9
syngx_request_time_stat_time_avg_seconds{method="GET",status_code="200"} 0.000778
syngx_request_time_stat_time_max_seconds{method="GET",status_code="200"} 0.004
syngx_request_time_stat_time_max_event_time_seconds{method="GET",status_code="200"} 1740728447.952
syngx_request_time_stat_global_num{method="GET",status_code="200"} 10
syngx_request_time_stat_num{method="OPTIONS",status_code="501"} 2
syngx_request_time_stat_time_avg_seconds{method="OPTIONS",status_code="501"} 0.015000
syngx_request_time_stat_time_max_seconds{method="OPTIONS",status_code="501"} 0.029
syngx_request_time_stat_time_max_event_time_seconds{method="OPTIONS",status_code="501"} 1740728454.666
syngx_request_time_stat_global_num{method="OPTIONS",status_code="501"} 2
# HELP syngx_proxy_cache_cold A boolean value indicating whether the cache loader process is still loading data from disk into the cache
# TYPE syngx_proxy_cache_cold gauge
# HELP syngx_proxy_cache_size The current size of the cache
# TYPE syngx_proxy_cache_size gauge
# HELP syngx_proxy_cache_max_size Maximum size of http proxy cache as specified in configuration
# TYPE syngx_proxy_cache_max_size gauge
# HELP syngx_proxy_cache_file_count Number of files stored in the http proxy cache
# TYPE syngx_proxy_cache_file_count gauge
# HELP syngx_proxy_cache_fs_size Filesystem size in bytes
# TYPE syngx_proxy_cache_fs_size gauge
# HELP syngx_proxy_cache_fs_available Available free space on the filesystem
# TYPE syngx_proxy_cache_fs_available gauge
# HELP syngx_proxy_cache_responses_count Total number of responses by cache status
# TYPE syngx_proxy_cache_responses_count counter
# HELP syngx_proxy_cache_responses_bytes Total size of responses in bytes by cache status
# TYPE syngx_proxy_cache_responses_bytes counter
syngx_proxy_cache_cold{path="/tmp/nginx/cache0",zone="cache0"} 0
syngx_proxy_cache_max_size{path="/tmp/nginx/cache0",zone="cache0"} 15728640
syngx_proxy_cache_size{path="/tmp/nginx/cache0",zone="cache0"} 0
syngx_proxy_cache_file_count{path="/tmp/nginx/cache0",zone="cache0"} 0
syngx_proxy_cache_fs_size{path="/tmp/nginx/cache0",zone="cache0"} 106769133568
syngx_proxy_cache_fs_available{path="/tmp/nginx/cache0",zone="cache0"} 82181652480
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="hit"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="hit"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="miss"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="miss"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="expired"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="expired"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="bypass"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="bypass"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="stale"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="stale"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="revalidated"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="revalidated"} 0
syngx_proxy_cache_responses_count{path="/tmp/nginx/cache0",zone="cache0",status="updating"} 0
syngx_proxy_cache_responses_bytes{path="/tmp/nginx/cache0",zone="cache0",status="updating"} 0
Пример вывода метрик модуля по сертификатам в формате JSON:

Пример вывода метрик модуля по сертификатам в формате Prometheus:

Параметры директивы snx_http_extstatus_request_time:#
cache_time
syntax:
cache_time=*on/off*default:
oncontext:
httpПараметрcache_timeуказывает брать закэшированное время или из системы
timer
syntax:
timer=*time*default:
1000mscontext:
httpПараметрtimerуказывает интервал сбора статистики
Модуль nginx_upstream_check_module
Данный модуль предоставляет возможность учета текущего состояния вычислительного узла в группе балансировки на уровне секции http (на уровне L7 модели OSI) при распределении запросов. При базовой настройке конфигурации, он будет выдавать метрики в виде HTML-страницы. Однако, администратор может настроить выдачу в формате json или prometeus.
Данный модуль может отображать статусы по разным видам проверок healthcheck - tcp, ssl_hello, http, https.
Информация по настройке модуля приведена в разделе «Настройка активной проверки работоспособности узлов (active healthcheck)» выше.
Пример конфигурации для получения метрик приведен ниже:
server {
...
location /l7status_html {
check_status html;
}
location /l7status_json {
check_status json;
}
location /l7status_prometheus {
check_status prometheus;
}
}
Пример вывода метрик модуля в формате HTML:

Пример вывода метрик модуля в формате JSON:
Пример вывода метрик модуля в формате Prometheus:
Модуль ngx_stream_upstream_check_module
Данный модуль предоставляет возможность учета текущего состояния вычислительного узла в группе балансировки на уровне секции stream (на уровне L4 модели OSI) при распределении запросов. При базовой настройке конфигурации, он будет выдавать метрики в виде HTML-страницы. Однако, администратор может настроить выдачу в формате json или prometeus.
Данный модуль может отображать статусы по разным видам проверок healthcheck - udp, tcp, http, ssl_hello, tcp_tls.
Информация по настройке модуля приведена в разделе «Настройка активной проверки работоспособности узлов (active healthcheck)» выше.
Пример конфигурации для получения метрик приведен ниже:
http {
server {
...
location /l4hc_status_html {
l4check_status html;
}
location /l4hc_status_json {
l4check_status json;
}
location /l4hc_status_prometheus {
l4check_status prometheus;
}
...
}
Пример вывода метрик модуля в формате HTML:
.
Пример вывода метрик модуля в формате JSON:
.
Пример вывода метрик модуля в формате Prometheus:
Модули sts (nginx-module-stream-sts, nginx-module-sts)
Описание модулей:
nginx-module-stream-sts - данный модуль предназначен для сбора статистики на уровне L4 OSI (UDP и TCP соединения);
nginx-module-sts - этот модуль добавляет возможность отображения статистики по запросам на уровне L4.
Модуль nginx-module-sts обеспечивает предоставление следующих видов метрик:
main:
время безотказной работы ((nowMsec - loadMsec)/1000); nowMsec, loadMsec - в миллисекундах;
connections:
всего подключений и запросов;
streamServerZones:
информация о трафике (входящий/исходящий), количество запросов и ответов, а также соотношение статусов (1xx, 2xx…) для каждого сервера в секции stream;
streamFilterZones:
информация об общем трафике (входящий/исходящий), количестве запросов и ответов, а также о соотношении совпадений состояния (1xx, 2xx…) для каждого сервера в секции stream, отфильтрованного с помощью директивы server_traffic_status_filter_by_set_key.
информация о трафике (входящий/исходящий), количестве запросов и ответов для <имя зоны *> и коэффициенте совпадений, отфильтрованная с помощью директивы server_traffic_status_filter_by_set_key.
streamUpstreamZones
объем трафика (входящий/исходящий) и количество запросов и ответов на сервер в каждой группе балансировки;
текущие настройки (weight, maxfails, failtimeout…) в synx.conf
состояние серверов по пассивной проверки работоспособности (доступно только в формате prometheus)
После установки и подключения модуля необходимо добавить конфигурацию в конфигурационный файл SynGX.
Пример базовой настройки модуля sts дан ниже:
Задать директиву «server_traffic_status_zone» на уровне
streamв конфигурационном файле SynGX (syngx.conf):
stream {
server_traffic_status_zone;
server {
...
}
}
Добавить подключение сбора статистики на уровне директив
httpв конфигурационном файле SynGX (syngx.conf), добавить тестовый сервер:
http {
stream_server_traffic_status_zone;
server {
listen <port>;
server_name stream_sts_module;
location /status_html {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
location /status_json {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format json;
}
location /status_prometheus {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format prometheus;
}
}
}
Пример вывода метрик модуля в формате HTML:
Пример вывода метрик модуля в формате JSON:

Пример вывода метрик модуля в формате Prometheus:
# HELP nginx_sts_info Nginx info
# TYPE nginx_sts_info gauge
nginx_sts_info{hostname="6179ed2dd90b",version="1.24.0"} 1
# HELP nginx_sts_start_time_seconds Nginx start time
# TYPE nginx_sts_start_time_seconds gauge
nginx_sts_start_time_seconds 1741940885.397
# HELP nginx_sts_main_connections Nginx connections
# TYPE nginx_sts_main_connections gauge
nginx_sts_main_connections{status="accepted"} 13
nginx_sts_main_connections{status="active"} 1
nginx_sts_main_connections{status="handled"} 13
nginx_sts_main_connections{status="reading"} 0
nginx_sts_main_connections{status="requests"} 12
nginx_sts_main_connections{status="waiting"} 0
nginx_sts_main_connections{status="writing"} 1
# HELP nginx_sts_main_shm_usage_bytes Shared memory [stream_server_traffic_status] info
# TYPE nginx_sts_main_shm_usage_bytes gauge
nginx_sts_main_shm_usage_bytes{shared="max_size"} 1048575
nginx_sts_main_shm_usage_bytes{shared="used_size"} 13255
nginx_sts_main_shm_usage_bytes{shared="used_node"} 2
# HELP nginx_sts_server_bytes_total The request/response bytes
# TYPE nginx_sts_server_bytes_total counter
# HELP nginx_sts_server_connects_total The connects counter
# TYPE nginx_sts_server_connects_total counter
# HELP nginx_sts_server_session_seconds_total The session duration time
# TYPE nginx_sts_server_session_seconds_total counter
# HELP nginx_sts_server_session_seconds The average of session duration time in seconds
# TYPE nginx_sts_server_session_seconds gauge
# HELP nginx_sts_server_session_duration_seconds The histogram of session duration in seconds
# TYPE nginx_sts_server_session_duration_seconds histogram
nginx_sts_server_bytes_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",direction="in"} 79
nginx_sts_server_bytes_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",direction="out"} 178
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="1xx"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="2xx"} 1
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="3xx"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="4xx"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="5xx"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="200"} 1
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="400"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="403"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="500"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="502"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="503"} 0
nginx_sts_server_connects_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP",code="total"} 1
nginx_sts_server_session_seconds_total{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP"} 0.002
nginx_sts_server_session_seconds{listen="TCP:11000:127.0.0.1",port="11000",protocol="TCP"} 0.000
# HELP nginx_sts_upstream_down Upstream server passive hc state, 0 means server is ON, 1 means server is OFF (down)
# TYPE nginx_sts_upstream_down gauge
# HELP nginx_sts_upstream_bytes_total The request/response bytes
# TYPE nginx_sts_upstream_bytes_total counter
# HELP nginx_sts_upstream_connects_total The upstream connects counter
# TYPE nginx_sts_upstream_connects_total counter
# HELP nginx_sts_upstream_session_seconds_total The session duration time in seconds
# TYPE nginx_sts_upstream_session_seconds_total counter
# HELP nginx_sts_upstream_session_seconds The average of session duration in seconds
# TYPE nginx_sts_upstream_session_seconds gauge
# HELP nginx_sts_upstream_response_connect_seconds_total The time to connect to the upstream server
# TYPE nginx_sts_upstream_response_connect_seconds_total counter
# HELP nginx_sts_upstream_response_connect_seconds The average of time to connect to the upstream server
# TYPE nginx_sts_upstream_response_connect_seconds gauge
# HELP nginx_sts_upstream_response_firstbyte_seconds_total The time to receive the first byte of data
# TYPE nginx_sts_upstream_response_firstbyte_seconds_total counter
# HELP nginx_sts_upstream_response_firstbyte_seconds The average of time to receive the first byte of data
# TYPE nginx_sts_upstream_response_firstbyte_seconds gauge
# HELP nginx_sts_upstream_response_session_seconds_total The session duration time to the upstream server
# TYPE nginx_sts_upstream_response_session_seconds_total counter
# HELP nginx_sts_upstream_response_session_seconds The average of session duration time to the upstream server
# TYPE nginx_sts_upstream_response_session_seconds gauge
# HELP nginx_sts_upstream_session_duration_seconds The histogram of session duration time in seconds
# TYPE nginx_sts_upstream_session_duration_seconds histogram
# HELP nginx_sts_upstream_response_connect_duration_seconds The histogram of time to connect to the upstream server
# TYPE nginx_sts_upstream_response_connect_duration_seconds histogram
# HELP nginx_sts_upstream_response_firstbyte_duration_seconds The histogram of time to receive the first byte of data
# TYPE nginx_sts_upstream_response_firstbyte_duration_seconds histogram
# HELP nginx_sts_upstream_response_session_duration_seconds The histogram of session duration time to the upstream server
# TYPE nginx_sts_upstream_response_session_duration_seconds histogram
nginx_sts_upstream_down{upstream="u1",backend="127.0.0.1:10001",hc="passive"} 0
nginx_sts_upstream_bytes_total{upstream="u1",backend="127.0.0.1:10001",direction="in"} 79
nginx_sts_upstream_bytes_total{upstream="u1",backend="127.0.0.1:10001",direction="out"} 178
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="1xx"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="2xx"} 1
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="3xx"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="4xx"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="5xx"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="200"} 1
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="400"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="403"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="500"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="502"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="503"} 0
nginx_sts_upstream_connects_total{upstream="u1",backend="127.0.0.1:10001",code="total"} 1
nginx_sts_upstream_session_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
nginx_sts_upstream_session_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.000
nginx_sts_upstream_response_connect_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
nginx_sts_upstream_response_connect_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.000
nginx_sts_upstream_response_firstbyte_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
nginx_sts_upstream_response_firstbyte_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.000
nginx_sts_upstream_response_session_seconds_total{upstream="u1",backend="127.0.0.1:10001"} 0.002
nginx_sts_upstream_response_session_seconds{upstream="u1",backend="127.0.0.1:10001"} 0.000
Модуль ngx_hashicorp_vault_module
Данный модуль предоставляет возможность отображения статистики работы модуля.
Пример конфигурации для получения метрик приведен ниже:
http {
server {
...
location /get_json {
ngx_hashicorp_vault_json on;
}
location /get_prometheus {
ngx_hashicorp_vault_prometheus on;
}
...
}
Пример вывода метрик модуля в формате JSON:
.
Пример вывода метрик модуля в формате Prometheus:

Примечание: Значение параметра expiration_days для сертификата при запросе статистики содержит актуальное значение, если этот сертификат был успешно получен из HashiCorp Vault и он указан в одной из соответствующих директив (например, ssl_certificate или других). Если полученный из HashiCorp Vault сертификат не используется в работе SynGX, значение „expiration_days“ для этого сертификата при запросе статистики будет равно 0.