Описание метрик
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_requests | counter | Количество HTTP-запросов, принятых gateway для обработки. Учитываются и запросы, заблокированные фильтром. |
netgap_gateway_errors | counter | Количество ошибок обработки на стороне gateway. Блокировки фильтром ошибками не считаются. |
netgap_gateway_blocked_requests | counter | Количество запросов, заблокированных фильтром HTTP-запросов на стороне gateway; с разбивкой по методу, пути и причине. |
netgap_gateway_processing_time_seconds | histogram | Время обработки запроса в gateway. |
netgap_gateway_total_latency_seconds | histogram | Полная задержка от получения запроса gateway до отправки ответа клиенту. |
netgap_gateway_netgap_latency_seconds | histogram | Задержка внутри компонентов Netgap без времени вызова целевого сервиса. |
netgap_gateway_target_call_time_seconds | histogram | Время вызова целевого сервиса, полученное от executor и отраженное на стороне gateway. |
netgap_gateway_queue_size | gauge | Текущий размер очереди запросов gateway. |
netgap_gateway_connection_pool_size | gauge | Текущий размер пула ожидающих клиентских соединений. |
Метрики очереди gateway
Очередь gateway используется для передачи запросов executor-у. Эти метрики помогают увидеть накопление нагрузки и дисбаланс между поступлением и обработкой запросов.
| Метрика | Тип | Что показывает |
|---|---|---|
netgap_gateway_request_queue_pushes | counter | Сколько запросов было помещено в очередь. |
netgap_gateway_request_queue_pops | counter | Сколько запросов было извлечено из очереди executor-ом. |
Если pushes растет быстрее, чем pops, а netgap_gateway_queue_size увеличивается, это обычно означает, что executor или целевые сервисы не успевают обрабатывать текущую нагрузку.
Метрики пула соединений gateway
Пул соединений хранит клиентские соединения, ожидающие ответа от executor. Эти метрики полезны для контроля жизненного цикла соединений и поиска таймаутов.
| Метрика | Тип | Что показывает |
|---|---|---|
netgap_gateway_connection_pool_inserts | counter | Сколько соединений было добавлено в пул ожидания. |
netgap_gateway_connection_pool_removes | counter | Сколько соединений было извлечено из пула при доставке ответа. |
netgap_gateway_connection_pool_expires | counter | Сколько соединений истекло по таймауту ожидания. |
netgap_gateway_connection_pool_closed | counter | Сколько соединений было закрыто. |
Рост netgap_gateway_connection_pool_expires обычно требует проверки latency, доступности executor и времени ответа целевых сервисов.
Метрики netgap-executor
Executor получает запросы из gateway, выполняет HTTP-вызовы в приватной зоне и возвращает ответы обратно. Метрики executor показывают фактическую обработку запросов и ошибки вызова целевых сервисов.
| Метрика | Тип | Что показывает |
|---|---|---|
netgap_executor_requests | counter | Количество запросов, полученных executor для обработки. Учитываются и запросы, заблокированные фильтром. |
netgap_executor_errors | counter | Количество ошибок на стороне executor. Блокировки фильтром ошибками не считаются. |
netgap_executor_blocked_requests | counter | Количество запросов, заблокированных фильтром HTTP-запросов перед вызовом целевого сервиса; с разбивкой по методу, пути и причине. |
netgap_executor_processing_time_seconds | histogram | Полное время обработки запроса executor-ом. |
netgap_executor_target_call_time_seconds | histogram | Время HTTP-вызова целевого сервиса из executor. |
Если netgap_executor_errors растет вместе с увеличением netgap_executor_target_call_time_seconds, вероятная причина находится на стороне целевого сервиса или сетевого пути до него.
Метрики фильтра HTTP-запросов
Если включён фильтр HTTP-запросов (http_filter в режиме AllowList), каждый компонент считает собственные блокировки: шлюз — на границе контура до постановки запроса в очередь, исполнитель — перед вызовом целевого сервиса. Обе метрики имеют одинаковый набор меток.
| Метка | Значения | Назначение |
|---|---|---|
method | HTTP-метод запроса | Какая операция запрашивалась. |
path | Путь запроса в том виде, в каком его прислал клиент | К какому ресурсу шло обращение. |
reason | path, 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_seconds | gauge | Начало срока действия сертификата внутреннего транспорта, Unix-время в секундах. |
netgap_internal_certificate_not_after_timestamp_seconds | gauge | Окончание срока действия сертификата внутреннего транспорта, Unix-время в секундах. |
netgap_internal_certificate_validity_seconds | gauge | Полный срок жизни сертификата — разница между окончанием и началом срока действия. |
netgap_internal_certificate_expires_in_seconds | gauge | Остаток до истечения сертификата на момент сбора метрик; отрицательное значение означает, что сертификат уже просрочен. |
Метки серий:
| Метка | Назначение |
|---|---|
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 при нагрузочном тестировании;
- заблаговременное планирование перевыпуска сертификатов внутреннего транспорта по остатку срока их действия.