← Cloudflare SSL/TLS / ssl / keyless-ssl / reference
Метрики сервера ключей
Сервер ключей 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-адресу сервера.
- Для файловых хранилищ ключей это операция поиска по карте, которая обычно занимает менее миллисекунды.
- Для хранилищ ключей PKCS#11 или HSM это может включать сетевой запрос к HSM, если ссылки на ключи не кэшированы в памяти.
Эта метрика фиксируется для всех операций подписи и расшифровки: 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. Для каждого сертификата формируется отдельный временной ряд.
Эта метрика обновляется:
- При запуске для сертификата проверки подлинности сервера (
auth_cert) и сертификат удостоверяющего центра Cloudflare (cloudflare_ca_cert). - При каждом успешном входящем TLS-соединении: для сертификатов, которые предоставляет подключающийся клиент.
| Метка | Описание |
|---|---|
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