INTEGRITY Документация

Метрики сервера ключей

Сервер ключей gokeyless предоставляет Prometheus конечная точка метрик, которую можно использовать для мониторинга производительности подписания, частоты ошибок, состояния соединений и срока действия сертификатов. Эту конечную точку также может опрашивать приемник Prometheus в OpenTelemetry Collector, что делает метрики доступными для любого бэкенда, совместимого с OpenTelemetry.

Конечная точка метрик

По умолчанию метрики доступны по адресу:

http://<host>:2406/metrics

Порт настраивается с помощью metrics_port ключ в файле конфигурации, --metrics-port флаг, либо KEYLESS_METRICS_PORT переменную окружения.

Эта конечная точка обслуживает только /metrics. Дополнительных HTTP-эндпоинтов, таких как /health или /debug.


Интервалы гистограммы

Все метрики-гистограммы используют одну и ту же конфигурацию бакетов: 15 экспоненциальных бакетов, начиная со 100 микросекунд и удваиваясь на каждом шаге вплоть до примерно 1.64 секунды, плюс финальный +Inf bucket.

Бакет Верхняя граница
1 100 мкс
2 200 мкс
3 400 мкс
4 800 мкс
5 1.6 мс
6 3.2 мс
7 6.4 мс
8 12.8 мс
9 25.6 мс
10 51.2 мс
11 102 мс
12 205 мс
13 410 мс
14 819 мс
15 ~1.64 с
+Inf Всё, что выше ~1.64 с

Справочник по метрикам

keyless_requests

Тип: Счётчик
Метки: opcode

Учитывает каждый входящий запрос, полученный через установленное подключение, независимо от результата. Увеличивается на единицу для каждого запроса до начала его обработки.

opcode метка использует полное имя константы из протокола gokeyless.

Операции RSA

opcode метка Wire-значение Описание
OpRSADecrypt 0x01 Прямое расшифрование RSA (используется при обмене ключами RSA в TLS, не поддерживается в TLS 1.3)
OpRSASignMD5SHA1 0x02 Подпись RSA PKCS#1 v1.5 по комбинированному хэшу MD5+SHA1 (используется при рукопожатии TLS 1.0/1.1)
OpRSASignSHA1 0x03 Подпись RSA PKCS#1 v1.5 по SHA1
OpRSASignSHA224 0x04 Подпись RSA PKCS#1 v1.5 по SHA224
OpRSASignSHA256 0x05 Подпись RSA PKCS#1 v1.5 по SHA256
OpRSASignSHA384 0x06 Подпись RSA PKCS#1 v1.5 по SHA384
OpRSASignSHA512 0x07 Подпись RSA PKCS#1 v1.5 по SHA512
OpRSAPSSSignSHA256 0x35 Подпись RSASSA-PSS по SHA256 (основная операция RSA в TLS 1.3)
OpRSAPSSSignSHA384 0x36 Подпись RSASSA-PSS по SHA384
OpRSAPSSSignSHA512 0x37 Подпись RSASSA-PSS по SHA512

Операции ECDSA

opcode метка Wire-значение Описание
OpECDSASignMD5SHA1 0x12 Подпись ECDSA по комбинированному хэшу MD5+SHA1
OpECDSASignSHA1 0x13 Подпись ECDSA по SHA1
OpECDSASignSHA224 0x14 Подпись ECDSA по SHA224
OpECDSASignSHA256 0x15 Подпись ECDSA по SHA256: самый распространённый вариант в TLS 1.2 и TLS 1.3
OpECDSASignSHA384 0x16 Подпись ECDSA по SHA384
OpECDSASignSHA512 0x17 Подпись ECDSA по SHA512

Другие способы подписания

opcode метка Wire-значение Описание
OpEd25519Sign 0x18 Подпись Ed25519 для данных произвольной длины (без предварительного хеширования)

Опечатывание и инфраструктурные операции

opcode метка Wire-значение Описание
OpSeal 0x21 Шифрование blob-объекта с использованием ключа запечатывания сервера. Используется для TLS session tickets
OpUnseal 0x22 Расшифровка blob, ранее зашифрованного с помощью OpSeal. Возвращает ErrExpired если ключ запечатывания был сменён
OpRPC 0x23 Выполнение именованной функции, зарегистрированной на сервере. Доступно для всех типов соединений
OpCustom 0x24 Выполнение пользовательской функции, заданной в конфигурации сервера. Доступно только для неограниченных соединений
OpPing 0xF1 Проверка работоспособности - сервер возвращает полученные данные обратно как OpPong без использования HSM или поиска ключа

keyless_request_exec_duration_per_opcode

Тип: Гистограмма
Метки: type, error

Измеряет время выполнения одной операции: от начала обработки до получения ответа. Для операций на базе PKCS#11 HSM сюда входит полное время ожидания сессии из пула плюс время выполнения криптографической операции HSM.

Эта метрика не учитывает время, которое запрос проводит в ожидании слота семафора соединений. Это время учитывается в keyless_request_total_duration_per_opcode.

type метка

Для этой метки коды операций объединены в более крупные категории:

type метка Включённые коды операций
rsa OpRSADecrypt, все OpRSASign*, все OpRSAPSSSign*
ecdsa Все OpECDSASign*
ed25519 OpEd25519Sign
rpc OpRPC
custom OpCustom
other OpSeal, OpUnseal, OpPing, OpPong, OpResponse, OpError
unknown Любой нераспознанный байт опкода

error метка

Для успешных запросов значение равно no error. Все остальные значения указывают на неудачное выполнение операции.

error метка Описание Распространённая причина
no error Операция успешно завершена ,
cryptography error Сбой HSM или операции подписи Исчерпание пула сеансов PKCS#11 (resource pool timed out), HSM вернул ошибку, несоответствие типа ключа
key not found due to no matching SKI/SNI/ServerIP Поиск ключа не дал результата Ключ не загружен в хранилище ключей, некорректный SKI в запросе
read failure Ошибка чтения ввода-вывода во время операции Ошибка диска при чтении файла ключа
version mismatch Версия протокола не поддерживается Расхождение версий клиента и сервера
bad opcode Получен неизвестный код операции OpCustom отправляется, если не настроен пользовательский обработчик
unexpected opcode Код операции ответа использован в качестве запроса Клиент отправил OpPong, OpResponse, или OpError в качестве запроса
malformed message Ошибка разбора TLV Повреждённый или усечённый пакет
internal error Некриптографический сбой на стороне сервера Sealer is nil, RPC dispatch error
certificate not found Не удалось найти сертификат Сертификат не загружен
sealing key expired OpUnseal blob слишком старый для расшифровки Ротация ключей TLS session ticket: blob запечатан ключом, который с тех пор был отозван
remote configuration error Удаленный сервер ключей настроен неверно Указывает на недоступный или неправильно настроенный удаленный сервер ключей

keyless_request_total_duration_per_opcode

Тип: Гистограмма
Метки: type, error (те же значения, что и keyless_request_exec_duration_per_opcode)

Измеряет общее время обработки запроса: от чтения пакета запроса из сети до записи байтов ответа обратно клиенту.

total_duration = exec_duration + response_write_time

Обе временные метки фиксируются уже после захвата семафора соединения, поэтому время ожидания в очереди семафора не включается ни в одну из гистограмм. При обычной нагрузке общая длительность и длительность выполнения приблизительно равны. Увеличивающийся разрыв между ними говорит о медленной записи данных обратно клиенту, например из-за обратного давления в сети между сервером ключей и периферийной сетью Cloudflare.


keyless_key_load_duration

Тип: Гистограмма
Метки: Нет

Измеряет время, которое требуется хранилищу ключей для поиска и возврата закрытого ключа по каждому запросу, с группировкой по SKI, SNI и IP-адресу сервера.

Эта метрика фиксируется для всех операций подписи и расшифровки: OpRSADecrypt, все OpRSASign*, все OpRSAPSSSign*, все OpECDSASign*, а также OpEd25519Sign.

Это не записано для OpPing, OpSeal, OpUnseal, OpRPC, или OpCustom, для которых не требуется поиск закрытого ключа.


keyless_failed_connection

Тип: Счётчик
Метки: Нет

Учитывает сбои транспортного уровня на уровне подключения. Эта метрика отражает проблемы на сетевом уровне или уровне TLS: она не учитывает ошибки подписи или поиска ключей, которые отражаются в error метка гистограмм длительности.

Сценарий Учитывается?
Сбой TLS-рукопожатия Нет
Клиент отключился до TLS-рукопожатия (EOF) Нет
Не удалось определить уровень доверия к соединению после TLS Да
Ошибка чтения (не EOF) на установленном соединении Да
Ошибка записи при доставке ответа Да
Тайм-аут чтения (плавное завершение соединения) Нет
Ошибка подписи, включая тайм-аут пула PKCS#11 Нет
Ключ не найден Нет

certificate_expiration_timestamp_seconds

Тип: Датчик
Метки: source, serial_no, cn, hostnames, ca, server, client

Указывает время истечения срока действия (NotAfter) каждого сертификата, загруженного сервером ключей, в виде метки времени Unix. Для каждого сертификата формируется отдельный временной ряд.

Эта метрика обновляется:

Метка Описание
source Путь к файлу с сертификатами для запуска; listener: <addr> для сертификатов удалённой стороны из входящих подключений
serial_no Серийный номер сертификата
cn Subject Common Name
hostnames Отсортированный список значений DNS Subject Alternative Names, разделённых запятыми
ca 1 если сертификат является сертификатом CA, 0 иначе
server 1 если сертификат включает ExtKeyUsageServerAuth, 0 иначе
client 1 если сертификат включает ExtKeyUsageClientAuth, 0 иначе

Примеры запросов PromQL

Пропускная способность подписи по типу ключа

sum by (opcode) (rate(keyless_requests[1m]))

Частота ошибок по типам

sum by (error) (
  rate(keyless_request_exec_duration_per_opcode_count{error!="no error"}[5m])
)

задержка подписания для RSA на 99-м процентиле

histogram_quantile(
  0.99,
  rate(keyless_request_exec_duration_per_opcode_bucket{type="rsa"}[5m])
)

Значение, приближающееся к 10 секундам, указывает на исчерпание пула сессий PKCS#11. См. Масштабирование и тестирование производительности и документацией вашего HSM для получения инструкций по увеличению размера пула сеансов.

задержка загрузки ключа на 99-м процентиле

histogram_quantile(0.99, rate(keyless_key_load_duration_bucket[5m]))

Всплеск здесь без соответствующего всплеска длительности выполнения указывает на то, что медленным является сам поиск в хранилище ключей: возможна проблема с дисковым вводом-выводом или задержка перечисления объектов PKCS#11.

Частота сбоев подключений

rate(keyless_failed_connection_total[5m])

Устойчиво ненулевое значение указывает на проблемы с сетью или TLS между сетью Cloudflare и вашим сервером ключей.

Уведомление об истечении срока действия сертификата в течение 30 дней

(certificate_expiration_timestamp_seconds - time()) / 86400 < 30