Перейти к основному содержимому

Описание метрик

Netgap публикует технические метрики компонентов gateway и executor через функцию Метрики (metrics). Метрики помогают контролировать поток запросов, ошибки, задержки обработки и состояние внутренних очередей.

Важно: метрики предназначены для прикладного мониторинга и алертинга. Они не содержат тела запросов, тела ответов, значений HTTP-заголовков или других пользовательских данных. В /metrics передаются только агрегированные бизнес- и технические показатели: счетчики событий, распределения длительности, текущие размеры очередей и другие числовые значения, необходимые для контроля состояния Netgap.

Группы метрик​

Netgap использует три основных типа метрик Prometheus:

ТипНазначениеПример использования
counterМонотонно растущий счетчик событий.Количество запросов, ошибок, операций с очередью.
histogramРаспределение длительности операций по bucket-ам.Latency, время обработки, время вызова целевого сервиса.
gaugeТекущее значение, которое может расти и уменьшаться.Размер очереди запросов, размер пула соединений.

Для histogram-метрик с суффиксом _seconds значения указываются в секундах. В Prometheus такие метрики обычно представлены сериями _bucket, _sum и _count.

Метрики netgap-gateway​

Gateway принимает клиентские HTTP-запросы, ставит их в очередь для executor и возвращает клиенту ответ. Метрики gateway показывают входящую нагрузку, ошибки, задержки и состояние внутренних структур.

МетрикаТипЧто показывает
netgap_gateway_requestscounterКоличество HTTP-запросов, принятых gateway для обработки. Учитываются и запросы, заблокированные фильтром.
netgap_gateway_errorscounterКоличество ошибок обработки на стороне gateway. Блокировки фильтром ошибками не считаются.
netgap_gateway_blocked_requestscounterКоличество запросов, заблокированных фильтром HTTP-запросов на стороне gateway; с разбивкой по методу, пути и причине.
netgap_gateway_processing_time_secondshistogramВремя обработки запроса в gateway.
netgap_gateway_total_latency_secondshistogramПолная задержка от получения запроса gateway до отправки ответа клиенту.
netgap_gateway_netgap_latency_secondshistogramЗадержка внутри компонентов Netgap без времени вызова целевого сервиса.
netgap_gateway_target_call_time_secondshistogramВремя вызова целевого сервиса, полученное от executor и отраженное на стороне gateway.
netgap_gateway_queue_sizegaugeТекущий размер очереди запросов gateway.
netgap_gateway_connection_pool_sizegaugeТекущий размер пула ожидающих клиентских соединений.

Метрики очереди gateway​

Очередь gateway используется для передачи запросов executor-у. Эти метрики помогают увидеть накопление нагрузки и дисбаланс между поступлением и обработкой запросов.

МетрикаТипЧто показывает
netgap_gateway_request_queue_pushescounterСколько запросов было помещено в очередь.
netgap_gateway_request_queue_popscounterСколько запросов было извлечено из очереди executor-ом.

Если pushes растет быстрее, чем pops, а netgap_gateway_queue_size увеличивается, это обычно означает, что executor или целевые сервисы не успевают обрабатывать текущую нагрузку.

Метрики пула соединений gateway​

Пул соединений хранит клиентские соединения, ожидающие ответа от executor. Эти метрики полезны для контроля жизненного цикла соединений и поиска таймаутов.

МетрикаТипЧто показывает
netgap_gateway_connection_pool_insertscounterСколько соединений было добавлено в пул ожидания.
netgap_gateway_connection_pool_removescounterСколько соединений было извлечено из пула при доставке ответа.
netgap_gateway_connection_pool_expirescounterСколько соединений истекло по таймауту ожидания.
netgap_gateway_connection_pool_closedcounterСколько соединений было закрыто.

Рост netgap_gateway_connection_pool_expires обычно требует проверки latency, доступности executor и времени ответа целевых сервисов.

Метрики netgap-executor​

Executor получает запросы из gateway, выполняет HTTP-вызовы в приватной зоне и возвращает ответы обратно. Метрики executor показывают фактическую обработку запросов и ошибки вызова целевых сервисов.

МетрикаТипЧто показывает
netgap_executor_requestscounterКоличество запросов, полученных executor для обработки. Учитываются и запросы, заблокированные фильтром.
netgap_executor_errorscounterКоличество ошибок на стороне executor. Блокировки фильтром ошибками не считаются.
netgap_executor_blocked_requestscounterКоличество запросов, заблокированных фильтром HTTP-запросов перед вызовом целевого сервиса; с разбивкой по методу, пути и причине.
netgap_executor_processing_time_secondshistogramПолное время обработки запроса executor-ом.
netgap_executor_target_call_time_secondshistogramВремя HTTP-вызова целевого сервиса из executor.

Если netgap_executor_errors растет вместе с увеличением netgap_executor_target_call_time_seconds, вероятная причина находится на стороне целевого сервиса или сетевого пути до него.

Метрики фильтра HTTP-запросов​

Если включён фильтр HTTP-запросов (http_filter в режиме AllowList), каждый компонент считает собственные блокировки: шлюз — на границе контура до постановки запроса в очередь, исполнитель — перед вызовом целевого сервиса. Обе метрики имеют одинаковый набор меток.

МеткаЗначенияНазначение
methodHTTP-метод запросаКакая операция запрашивалась.
pathПуть запроса в том виде, в каком его прислал клиентК какому ресурсу шло обращение.
reasonpath, methodПричина блокировки: путь не совпал ни с одним правилом (ответ 403) или метод не разрешён для совпавшего пути (ответ 405).

Важно: в метку path попадает путь из строки запроса вместе с query-строкой. На потоке произвольных или сканирующих запросов это даёт высокую кардинальность серий, поэтому в контурах, открытых в недоверенную сеть, метку path рекомендуется обобщать или отбрасывать на стороне сбора (metric_relabel_configs в Prometheus), оставляя разбивку по method и reason.

Заблокированные запросы не попадают в гистограммы latency шлюза и в netgap_executor_target_call_time_seconds: ответ отдаётся до очереди, а целевой сервис не вызывается. Рост netgap_executor_blocked_requests при неизменном netgap_gateway_blocked_requests означает, что политики шлюза и исполнителя разошлись — см. Заблокированные запросы.

Метрики внутреннего транспорта (mTLS)​

Все соединения между компонентами Netgap выполняются по mTLS с авторизацией по SPIFFE ID — см. Внутренний транспорт (mTLS). Каждый компонент публикует срок жизни собственного leaf-сертификата внутреннего транспорта, чтобы приближение истечения отслеживалось мониторингом, а не обнаруживалось по отказу рукопожатий.

Метрики общие для всех компонентов: имена не содержат имени компонента, а сам компонент различается ресурсными атрибутами экспортера (service_name). Значения публикуются по одной серии на каждый ролевой SPIFFE ID сертификата.

МетрикаТипЧто показывает
netgap_internal_certificate_not_before_timestamp_secondsgaugeНачало срока действия сертификата внутреннего транспорта, Unix-время в секундах.
netgap_internal_certificate_not_after_timestamp_secondsgaugeОкончание срока действия сертификата внутреннего транспорта, Unix-время в секундах.
netgap_internal_certificate_validity_secondsgaugeПолный срок жизни сертификата — разница между окончанием и началом срока действия.
netgap_internal_certificate_expires_in_secondsgaugeОстаток до истечения сертификата на момент сбора метрик; отрицательное значение означает, что сертификат уже просрочен.

Метки серий:

МеткаНазначение
spiffe_idРолевой SPIFFE ID из SAN сертификата, например spiffe://netgap.local/netgap-executor/default/http1-request-reader. Если сертификат несет несколько ролей, публикуется отдельная серия на каждую.
issuerИздатель (Issuer) сертификата — позволяет отличать сертификаты разных УЦ и контуров.

Важно: криптографический материал в метрики не попадает. В /metrics выводятся только временные границы срока действия и идентификационные метки spiffe_id и issuer; приватный ключ и содержимое сертификата не экспортируются.

Метрики регистрируются при старте компонента по фактически загруженной конфигурации internal_transport, поэтому отсутствие серий означает, что компонент не поднялся: конфигурация без корректного сертификата отклоняется до запуска сетевых мостов.

Примеры PromQL​

Скорость входящих запросов на gateway за последние 5 минут:

rate(netgap_gateway_requests[5m])

Скорость ошибок gateway:

rate(netgap_gateway_errors[5m])

95-й перцентиль полной latency gateway:

histogram_quantile(0.95, rate(netgap_gateway_total_latency_seconds_bucket[5m]))

95-й перцентиль времени вызова целевого сервиса executor-ом:

histogram_quantile(0.95, rate(netgap_executor_target_call_time_seconds_bucket[5m]))

Разница между поступлением запросов в очередь и их извлечением:

rate(netgap_gateway_request_queue_pushes[5m]) - rate(netgap_gateway_request_queue_pops[5m])

Текущий размер очереди gateway:

netgap_gateway_queue_size

Скорость блокировок фильтром на шлюзе с разбивкой по причине:

sum by (reason) (rate(netgap_gateway_blocked_requests[5m]))

Доля заблокированных запросов во входящем потоке шлюза:

sum(rate(netgap_gateway_blocked_requests[5m])) / sum(rate(netgap_gateway_requests[5m]))

Блокировки на исполнителе — признак расхождения политик компонентов (кандидат в правило алертинга):

sum(rate(netgap_executor_blocked_requests[5m])) > 0

Сертификаты внутреннего транспорта, которым осталось меньше 30 суток (кандидат в правило алертинга):

netgap_internal_certificate_expires_in_seconds < 30 * 24 * 3600

Уже просроченные сертификаты внутреннего транспорта:

netgap_internal_certificate_expires_in_seconds <= 0

Доля израсходованного срока жизни сертификата:

1 - netgap_internal_certificate_expires_in_seconds / netgap_internal_certificate_validity_seconds

Результат и доставка​

Результат работы метрик — Prometheus endpoint /metrics, который отдает текущий набор метрик Netgap в текстовом формате Prometheus. Приложение не отправляет метрики в Prometheus самостоятельно: Prometheus опрашивает endpoint по своему расписанию.

Для визуализации можно использовать Grafana. Готовый дашборд метрик Netgap включается в поставку/релиз и может использоваться как стартовая точка для production-мониторинга.

Варианты применения​

  • алерты по росту ошибок gateway или executor;
  • контроль блокировок фильтром HTTP-запросов и обнаружение расхождения политик шлюза и исполнителя;
  • контроль backlog через размер очереди и разницу pushes/pops;
  • анализ latency отдельно для Netgap и целевого сервиса;
  • выявление таймаутов клиентских соединений через метрики connection pool;
  • оценка пропускной способности и планирование ресурсов;
  • сравнение поведения разных версий Netgap при нагрузочном тестировании;
  • заблаговременное планирование перевыпуска сертификатов внутреннего транспорта по остатку срока их действия.