Настройка метрик в Avanpost FAM/MFA+

Состояние системы

Система мониторинга и сборка метрик публикует показатели работоспособности Avanpost FAM и готовности Avanpost FAM к приёму запросов на отдельном URI /health. 

Система предоставляет следующие показатели:

  1. Работоспособность системы (liveness probe).
  2. Готовность системы (readiness probe).

Настройка интерфейса показателей состояния Avanpost FAM

Для настройки параметров публикации интерфейса публикации метрик следует:

  1. Настроить параметры секции metrics в конфигурационном файле config.toml Avanpost FAM Server по аналогии с примером:
    [metrics]
    host = "localhost"
    port = 9089
    ПараметрНазначение
    hostХост (адрес) для метрик. Следует использовать тот же интерфейс, на котором публикуется основной интерфейс аутентификации FAM.
    portПорт, на котором доступны метрики. Следует использовать тот же интерфейс, на котором публикуется основной интерфейс аутентификации FAM.
  2. После внесения изменений в параметры сессии в config.toml следует перезапустить службу Avanpost FAM Server при помощи команды:
    sudo systemctl restart idp

Проверка доступности показателей состояния Avanpost FAM

Любым подходящим инструментом отправьте HTTP-запрос на URI (вместо значения host следует поставить фактический адрес base_url FAM Server):

Метрики системы

Система публикует мгновенные показатели работы Системы на отдельном URI /metrics. Этот URI доступен по отдельному сетевому порту и может быть размещён на отдельном сетевом интерфейсе и на отдельном хосте, изолированном от остальных веб-интерфейсов.

Примечание

В роли потребителя метрик в инфраструктуре может быть развёрнута система Prometheus, а для визуализации показателей - сформирован дашборд в Grafana.

Система предоставляет следующие показатели:

  1. Число фактов аутентификации с использованием определённого фактора аутентификации.
  2. Число фактов аутентификации в определённые приложения.
  3. Число активных сессий.
  4. Число создаваемых в момент времени новых сессий.
  5. Число завершаемых в момент времени сессий.
  6. Число создаваемых новых УЗ пользователей.
  7. Число блокируемых УЗ пользователей.
  8. Набор показателей производительности HTTP-запросов.
  9. Стандартный набор метрик языка Golang.

Настройка интерфейса публикации метрик Prometheus

Для настройки параметров публикации интерфейса публикации метрик настройте параметры секции metrics в конфигурационном файле config.toml Avanpost FAM.

Пример корректно настроенной секции metrics:

[metrics]
host = "localhost"
port = 9089
ПараметрЗначение

[metrics]

(секция настроек публикации метрик)

host

Хост (IP-адрес,) для метрик.

port

Сетевой порт, на котором доступны метрики.

После внесения изменений в параметры конфигурационного файла config.toml требуется перезапустить службу FAM Server.

Проверка доступности интерфейса публикации метрик

Любым подходящим инструментом отправьте HTTP-запрос на указанный в конфигурации host и port.

В ответ Система вернёт заголовок HTTP/1.1 200 OK и в ответе текстовый набор показателей следующего вида:

Пример

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.58e-05
go_gc_duration_seconds{quantile="0.25"} 3.45e-05
go_gc_duration_seconds{quantile="0.5"} 4.24e-05
go_gc_duration_seconds{quantile="0.75"} 4.73e-05
...

Подключение интерфейса публикации метрик к Prometheus

В конфигурационном файле /etc/prometheus/prometheus.yml в секцию scrape_configs добавьте задачу на сбор метрик с указанного хоста. 

Пример корректно настроенной секции scrape_configs в prometheus.yml:

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label job=<job_name> to any timeseries scraped from this config.
  - job_name: 'FAM'
    scrape_interval: 5s
    static_configs:
    - targets: ['localhost:9089']


Настройка метрик состояния подключений к БД PostgreSQL

Avanpost FAM предоставляет встроенные метрики для мониторинга состояния подключений к базе данных PostgreSQL через пул соединений pgx. Метрики доступны в формате JSON и могут использоваться для диагностики производительности, выявления узких мест и настройки параметров пула соединений. Собранные данные выводятся в лог на уровне логирования trace.

Для настройки параметров публикации интерфейса публикации метрик следует настроить параметры секции metrics в конфигурационном файле config.toml Avanpost FAM.

[metrics]
host = "localhost"
port = 9089

[metrics.poolStat]
enabled = true
showLogsIntervalInSeconds = 30
prettyLogs = true
ПараметрЗначение

[metrics]

(секция настроек публикации метрик)

host

Хост (адрес) для метрик.

port

Порт, на котором доступны метрики.

[poolStat]

(секция настроек для сбора статистики по пулу соединений к базе данных PostgreSQL)

enabled

Флаг, включающий или отключающий сбор статистики по пулу соединений.

showLogsIntervalInSeconds

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

prettyLogs

Флаг, определяющий формат вывода статистики в логах. При значении true статистика выводится в человекочитаемом виде (не рекомендуется по причине снижения безопасности). При значении false статистика выводится в компактном JSON-формате.

После внесения изменений в параметры конфигурационного файла config.toml требуется перезапустить службу FAM Server.

Приложение А. Справочник метрик Prometheus

Prometheus — это система мониторинга, собирающая и хранящая временные ряды данных (time series data) в виде метрик. Эти метрики представляют собой именованные значения с временной меткой и могут включать дополнительные метки. Ниже приведены метрики, используемые при анализе Avanpost FAM.

Легенда типов

  • counter — монотонно растущий счётчик (при перезапуске процесса может сбрасываться до 0).
  • gauge — текущее значение, может увеличиваться и уменьшаться.
  • histogram — гистограмма распределения, в которой экспортируются:
    • *_bucket{le="..."} — накопительное количество значений ≤ указанного порога,
    • *_sum — сумма всех наблюдённых значений,
    • *_count — общее количество наблюдений.
  • summary — квантильная статистика, в которой экспортируются:
    • *_quantile{quantile="..."} — значения квантилей,
    • *_sum и *_count — аналогично гистограмме (метрики данного вида являются счётчиками (counter), а не отдельные типы. В документации они часто помечаются как "части" гистограмм или сводок).

Метрики их описания представлены в нижеприведенной таблице:

МетрикаТипЕд. измОписание

Go runtime: GC и память

go_gc_duration_seconds

summary

секунды

Время пауз сборки мусора (GC). Используется для анализа задержек.

go_gc_duration_seconds_sum

counter

секунды

Суммарное время всех пауз GC за время работы процесса.

go_gc_duration_seconds_count

counter

количество

Общее число пауз сборки мусора.

go_gc_gogc_percent

gauge

%

Значение параметра GOGC — коэффициент, определяющий частоту GC. Например, GOGC=100 означает, что GC запускается при удвоении объёма живых объектов.

go_gc_gomemlimit_bytes

gauge

байты

Лимит виртуальной памяти (в байтах), установленный через переменную окружения GOMEMLIMIT. Влияет на частоту GC.

go_goroutines

gauge

количество

Текущее число активных Go-рутин. Важно для отслеживания утечек или перегрузки.

go_info

gauge

—

Информация о версии Go-рантайма. Постоянное значение 1с метками, например,version="go1.21.5".

go_memstats_alloc_bytes

gauge

байты

Объём памяти, аллоцированной в куче (живые объекты). Аналогично heap_alloc.

go_memstats_alloc_bytes_total

counter

байты

Общее количество байт, аллоцированных в куче за всё время (включая освобождённые).

go_memstats_buck_hash_sys_bytes

gauge

байты

Память, используемая хеш-таблицей профилирования памяти.

go_memstats_frees_total

counter

объекты

Общее число объектов,освобождённых из кучи.

go_memstats_gc_sys_bytes

gauge

байты

Память, используемая для хранения метаданных GC.

go_memstats_heap_alloc_bytes

gauge

байты

То же, что alloc_bytes - объём живой памяти в куче.

go_memstats_heap_idle_bytes

gauge

байты

Память в куче, не используемая под объекты (но может быть вновь использована).

go_memstats_heap_inuse_bytes

gauge

байты

Память в куче, находящаяся в использовании (включает фрагментацию).

go_memstats_heap_objects

gauge

объекты

Количество объектов, аллоцированных в куче.

go_memstats_heap_released_bytes

gauge

байты

Объём памяти кучи, возвращённый ОС (через madvise).

go_memstats_heap_sys_bytes

gauge

байты

Общий объём памяти, запрошенный у ОС для кучи.

go_memstats_last_gc_time_seconds

gauge

Unix sec

Временная метка последней сборки мусора.

go_memstats_mallocs_total

counter

объекты

Общее числоаллокацийв куче (включая освобождённые).

go_memstats_mcache_inuse_bytes

gauge

байты

Память, используемая структурамиmcache(локальные кэши потоков).

go_memstats_mcache_sys_bytes

gauge

байты

Памятьmcache,полученная от ОС.

go_memstats_mspan_inuse_bytes

gauge

байты

Память под структуры mspan (управляют фрагментами памяти).

go_memstats_mspan_sys_bytes

gauge

байты

Память mspan, полученная от ОС.

go_memstats_next_gc_bytes

gauge

байты

Объём памяти в куче, при котором будет запущена следующая GC.

go_memstats_other_sys_bytes

gauge

байты

Память, используемая для других системных нужд (не в куче, не в стеке).

go_memstats_stack_inuse_bytes

gauge

байты

Память, используемая стеками Go-рутин.

go_memstats_stack_sys_bytes

gauge

байты

Память стеков,полученная от ОС.

go_memstats_sys_bytes

gauge

байты

Общий объём памяти,запрошенный у ОСвсеми компонентами Go-рантайма.

go_sched_gomaxprocs_threads

gauge

количество

Значение GOMAXPROCS— максимальное число логических процессоров (P), на которых может выполняться Go-код.

go_threads

gauge

потоки ОС

Текущее число OS-потоков (M), созданных Go-рантаймом.

HTTP метрики приложения

http_requests_in_flight

gauge

количество

Число HTTP-запросов, обрабатываемых в данный момент.

http_requests_error_in_flight

gauge

количество

Число неуспешных запросов, которые в данный момент обрабатываются. Полезно для выявления "зависших" ошибок.

http_response_duration

histogram

секунды

Гистограмма времени обработки HTTP-запросов. Разбита по method,status, и другим меткам.

http_response_duration_sum

counter

секунды

Суммарное время обработки всех запросов (по комбинации меток).

http_response_duration_count

counter

количество

Общее число обработанных запросов (по комбинации меток).

Identity Provider (IDP) метрики

idp_account_disable_counter

counter

аккаунты

Общее число отключённых учётных записей.

idp_active_session_gauge

gauge

сессии

Текущее число активных сессий в IDP.

idp_application_authentication_counter

counter

аутентификации

Количество успешных входов в системы (по приложениям).

idp_authentication_factor_counter

counter

проверки

Сколько раз проверялся каждый фактор аутентификации (например, SMS, TOTP).

idp_global_session_counter

counter

сессии

Общее число созданных сессий за всё время.

idp_user_lock_counter

counter

блокировки

Сколько раз пользователи были заблокированы (например, из-за множества попыток входа).

Метрики процесса (process_*)

process_cpu_seconds_total

counter

CPU-секунды

Суммарное время CPU (пользовательское и системное), затраченное процессом.

process_max_fds

gauge

дескрипторы

Максимально допустимое число открытых файловых дескрипторов.

process_open_fds

gauge

дескрипторы

Текущее число открытых файловых дескрипторов. Контролируйте приближение к лимиту.

process_network_receive_bytes_total

counter

байты

Общее количество байт, полученных процессом по сети (TCP/UDP).

process_network_transmit_bytes_total

counter

байты

Общее количество байт, отправленных процессом по сети.

process_resident_memory_bytes

gauge

байты

RSS –  объём физической памяти, используемой процессом (не подкачивается).

process_start_time_seconds

gauge

Unix sec

Временная метка запуска процесса. Полезно для отслеживания рестартов.

process_virtual_memory_bytes

gauge

байты

Общий виртуальный объём памяти процесса.

process_virtual_memory_max_bytes

gauge

байты

Максимальный объём виртуальной памяти, разрешённый системой.

Специфические метрики API-сервиса

api_service_http_requests_in_flight

gauge

количество

Количество одновременных запросов, обрабатываемых системой в текущий момент

api_service_http_requests_error_in_flight

gauge

количество

Количество одновременных запросов, завершившихся ошибкой

api_service_http_response_duration

histogram

секунды

Длительность обработки входящих запросов

api_service_http_response_time_seconds

histogram

секунды

Время ответа на HTTP-запросы

api_service_auth_pushes_approved_total

counter

количество

Общее количество Push-уведомлений аутентификации, подтверждённых пользователями

api_service_auth_pushes_denied_total

counter

количество

Общее количество Push-уведомлений аутентификации, отклонённых пользователями

api_service_qr_signin_total

counter

количество

Общее количество попыток входа по QR-коду

api_service_total_bindings

counter

количество

Общее количество привязок устройств/факторов

Специфические метрики Push-сервиса

push_service_auth_pushes_sent_total

counter

количество

Общее количество отправленных пользователю Push-уведомлений аутентификации

push_service_alert_pushes_sent_total

counter

количество

Общее количество отправленных пользователю информационных Push-уведомлений

push_service_temp_codes_sent_total

counter

количество

Общее количество временных кодов, отправленных во внешнее хранилище

Приложение Б. Справочник метрик состояния подключений к PostgreSQL 

При настроенной опции логирования состояния подключений к PostgreSQL система будет периодически (с интервалом showLogsIntervalInSeconds) выводить в лог следующие показатели (данные логи выводятся на уровне логирования trace):

ПараметрЗначение

TotalConnections

Общее количество соединений в пуле (активных + простаивающих).

AcquiredConnections

Количество соединений, в данный момент используемых запросами.

IdleConnections

Количество простаивающих (готовых к использованию) соединений.

ConstructingConnections

Количество соединений, находящихся в процессе установки.

MaxConnections

Максимально допустимое количество соединений в пуле.

AcquireCount

Общее количество попыток получения соединения из пула.

AcquireDuration

Среднее время ожидания получения соединения.

CanceledAcquireCount

Количество отменённых попыток получения соединения.

EmptyAcquireCount

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

NewConnectionsCount

Общее количество созданных новых соединений.

MaxIdleDestroyCount

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

MaxLifetimeDestroyCount

Количество соединений, закрытых из-за истечения максимального времени жизни.


Обсуждение