INTEGRITY Dokumentace

Metriky serveru klíčů

Key server gokeyless zpřístupňuje Prometheus koncový bod metrik, který můžete použít ke sledování výkonu podepisování, chybovosti, stavu připojení a platnosti certifikátů. Tento koncový bod může sbírat i OpenTelemetry Collector Prometheus receiver, čímž zpřístupní metriky libovolnému backendu kompatibilnímu s OpenTelemetry.

Endpoint metrik

Ve výchozím nastavení jsou metriky dostupné na adrese:

http://<host>:2406/metrics

Port lze nakonfigurovat pomocí metrics_port klíč ve vašem konfiguračním souboru, --metrics-port příznak, nebo KEYLESS_METRICS_PORT proměnná prostředí.

Tento endpoint obsluhuje pouze /metrics. Neexistují žádné další HTTP koncové body, jako například /health nebo /debug.


Segmenty histogramu

Všechny metriky typu histogram sdílejí stejnou konfiguraci košů: 15 exponenciálních košů, které začínají na 100 mikrosekundách a s každým krokem se zdvojnásobují až na přibližně 1.64 sekundy, plus poslední +Inf bucket.

Bucket Horní mez
1 100 µs
2 200 µs
3 400 µs
4 800 µs
5 1.6 ms
6 3.2 ms
7 6.4 ms
8 12.8 ms
9 25.6 ms
10 51.2 ms
11 102 ms
12 205 ms
13 410 ms
14 819 ms
15 ~1.64 s
+Inf Cokoli nad ~1.64 s

Referenční přehled metrik

keyless_requests

Typ: Čítač
Popisky: opcode

Počítá každý příchozí požadavek přijatý přes navázané připojení, bez ohledu na výsledek. Zvyšuje se jednou pro každý požadavek, ještě než začne jakékoli zpracování.

opcode štítek používá celý název konstanty z protokolu gokeyless.

Operace RSA

opcode štítek Wire value Popis
OpRSADecrypt 0x01 Přímé dešifrování RSA: používá se při výměně klíčů RSA v TLS (zastaralé v TLS 1.3)
OpRSASignMD5SHA1 0x02 Podpis RSA PKCS#1 v1.5 nad kombinovaným hashem MD5+SHA1: handshake TLS 1.0/1.1
OpRSASignSHA1 0x03 Podpis RSA PKCS#1 v1.5 nad SHA1
OpRSASignSHA224 0x04 Podpis RSA PKCS#1 v1.5 nad SHA224
OpRSASignSHA256 0x05 Podpis RSA PKCS#1 v1.5 nad SHA256
OpRSASignSHA384 0x06 Podpis RSA PKCS#1 v1.5 nad SHA384
OpRSASignSHA512 0x07 Podpis RSA PKCS#1 v1.5 nad SHA512
OpRSAPSSSignSHA256 0x35 Podpis RSASSA-PSS nad SHA256: primární operace RSA v TLS 1.3
OpRSAPSSSignSHA384 0x36 Podpis RSASSA-PSS nad SHA384
OpRSAPSSSignSHA512 0x37 Podpis RSASSA-PSS nad SHA512

Operace ECDSA

opcode štítek Wire value Popis
OpECDSASignMD5SHA1 0x12 Podpis ECDSA nad kombinovaným hašem MD5+SHA1
OpECDSASignSHA1 0x13 Podpis ECDSA nad SHA1
OpECDSASignSHA224 0x14 Podpis ECDSA nad SHA224
OpECDSASignSHA256 0x15 Podpis ECDSA nad SHA256, nejběžnější v TLS 1.2 a TLS 1.3
OpECDSASignSHA384 0x16 Podpis ECDSA nad SHA384
OpECDSASignSHA512 0x17 Podpis ECDSA nad SHA512

Jiné podepisování

opcode štítek Wire value Popis
OpEd25519Sign 0x18 Podpis Ed25519 nad datovým obsahem libovolné délky (nikoli předem hašovaným digestem)

Operace zapečetění a infrastruktury

opcode štítek Wire value Popis
OpSeal 0x21 Zašifruje blob pomocí pečetícího klíče serveru, který se používá pro TLS session tickets
OpUnseal 0x22 Dešifrování blobu dříve zašifrovaného pomocí OpSeal. Vrací ErrExpired pokud došlo k rotaci pečetícího klíče
OpRPC 0x23 Provede pojmenovanou funkci registrovanou na serveru. K dispozici pro všechny typy připojení
OpCustom 0x24 Provede vlastní funkci nastavenou v konfiguraci serveru. K dispozici pouze pro neomezená připojení
OpPing 0xF1 Kontrola stavu: server vrátí payload zpět jako OpPong bez použití HSM nebo vyhledávání klíče

keyless_request_exec_duration_per_opcode

Typ: Histogram
Popisky: type, error

Měří dobu potřebnou k provedení jedné operace, od zahájení zpracování až po vytvoření odpovědi. U operací podporovaných HSM PKCS#11 zahrnuje tato doba i čekání na relaci z fondu a čas kryptografické operace HSM.

Tato metrika nezahrnuje čas, který požadavek stráví čekáním na uvolnění místa v semaforu připojení. Ten je zachycen v keyless_request_total_duration_per_opcode.

type štítek

Pro tento popisek jsou opcode kódy seskupeny do hrubších kategorií:

type štítek Zahrnuté opcode kódy
rsa OpRSADecrypt, všechny OpRSASign*, všechny OpRSAPSSSign*
ecdsa Všechny OpECDSASign*
ed25519 OpEd25519Sign
rpc OpRPC
custom OpCustom
other OpSeal, OpUnseal, OpPing, OpPong, OpResponse, OpError
unknown Jakýkoli nerozpoznaný bajt opkódu

error štítek

U úspěšných požadavků je hodnota no error. Všechny ostatní hodnoty značí neúspěšnou operaci.

error štítek Popis Obvyklá příčina
no error Operace byla úspěšně dokončena ,
cryptography error Operace HSM nebo podepisování se nezdařila Vyčerpání fondu relací PKCS#11 (resource pool timed out), HSM vrátil chybu, nesoulad typu klíče
key not found due to no matching SKI/SNI/ServerIP Vyhledání klíče nevrátilo žádný výsledek Klíč není načten v keystore, nesprávné SKI v požadavku
read failure Chyba čtení I/O během operace Chyba disku při čtení souboru s klíčem
version mismatch Nepodporovaná verze protokolu Nesoulad verzí klienta a serveru
bad opcode Přijat neznámý opcode OpCustom odeslané bez nakonfigurovaného vlastního handleru
unexpected opcode Jako požadavek byl použit opkód odpovědi Klient odeslal OpPong, OpResponse, nebo OpError jako požadavek
malformed message Chyba analýzy TLV Poškozený nebo zkrácený paket
internal error Nekryptografické selhání na straně serveru Sealer is nil, RPC dispatch error
certificate not found Vyhledání certifikátu se nezdařilo Certifikát nebyl načten
sealing key expired OpUnseal blob je příliš starý na dešifrování Rotace klíče TLS session ticket - blob zapečetěný klíčem, který byl mezitím zneplatněn
remote configuration error Vzdálený key server je nesprávně nakonfigurován Klíč odkazuje na nedostupný nebo nesprávně nakonfigurovaný vzdálený server klíčů

keyless_request_total_duration_per_opcode

Typ: Histogram
Popisky: type, error (stejné hodnoty jako keyless_request_exec_duration_per_opcode)

Měří celkovou dobu potřebnou ke zpracování požadavku, od přečtení paketu požadavku ze sítě až po zápis bajtů odpovědi zpět klientovi.

total_duration = exec_duration + response_write_time

Obě časové značky se zaznamenávají až poté, co je semafor připojení již podržen, takže doba čekání ve frontě semaforu není zahrnuta v žádném z histogramů. Za běžné zátěže jsou celková doba trvání a doba provádění přibližně stejné. Rostoucí rozdíl mezi nimi značí pomalý zápis zpět klientovi, například síťový tlak mezi key serverem a Cloudflare edge.


keyless_key_load_duration

Typ: Histogram
Popisky: Žádné

Měří dobu, za kterou keystore vyhledá a vrátí soukromý klíč pro každý požadavek, rozdělenou podle SKI, SNI a IP adresy serveru.

Tato metrika se zaznamenává pro všechny operace podepisování a dešifrování: OpRSADecrypt, všechny OpRSASign*, všechny OpRSAPSSSign*, všechny OpECDSASign*, a OpEd25519Sign.

Je ne zaznamenané pro OpPing, OpSeal, OpUnseal, OpRPC, nebo OpCustom, které nevyžadují vyhledání privátního klíče.


keyless_failed_connection

Typ: Čítač
Popisky: Žádné

Počítá selhání přenosu na úrovni připojení. Tato metrika odráží problémy na síťové nebo TLS vrstvě, nezahrnuje chyby podepisování ani chyby vyhledávání klíčů, které se hlásí v error štítek histogramů doby trvání.

Scénář Počítá se?
Selhání TLS handshake Ne
Klient se odpojil ještě před TLS handshake (EOF) Ne
Selhání při určování úrovně důvěryhodnosti připojení po TLS Ano
Chyba čtení jiná než EOF na navázaném spojení Ano
Chyba zápisu při doručování odpovědi Ano
Časový limit čtení: řízené ukončení spojení Ne
Chyba podepisování, včetně vypršení časového limitu fondu PKCS#11 Ne
Klíč nenalezen Ne

certificate_expiration_timestamp_seconds

Typ: Ukazatel
Popisky: source, serial_no, cn, hostnames, ca, server, client

Uvádí čas vypršení platnosti (NotAfter) každého certifikátu načteného key serverem jako časové razítko Unix. Pro každý certifikát se generuje jedna časová řada.

Tato metrika se aktualizuje:

Popisek Popis
source Cesta k souboru se spouštěcími certifikáty; listener: <addr> pro certifikáty protistrany z příchozích spojení
serial_no Sériové číslo certifikátu
cn Subject Common Name
hostnames Seřazený seznam alternativních názvů subjektu DNS oddělených čárkami
ca 1 pokud je certifikát certifikátem CA, 0 jinak
server 1 pokud certifikát obsahuje ExtKeyUsageServerAuth, 0 jinak
client 1 pokud certifikát obsahuje ExtKeyUsageClientAuth, 0 jinak

Příklady dotazů PromQL

Propustnost podepisování podle typu klíče

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

Míra chyb podle typu chyby

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

99. percentil latence podepisování pro RSA

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

Hodnota blížící se 10 sekundám značí vyčerpání fondu relací PKCS#11. Více informací najdete v Škálování a benchmarking a v dokumentaci k vašemu HSM najděte pokyny, jak zvětšit velikost session poolu.

99. percentil latence načtení klíče

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

Nárůst zde bez odpovídajícího nárůstu doby provádění naznačuje, že pomalé je samotné vyhledávání v keystore: může jít o problém se vstupně-výstupními operacemi disku nebo o zpoždění při výčtu objektů PKCS#11.

Míra selhání připojení

rate(keyless_failed_connection_total[5m])

Trvale nenulová hodnota značí problémy se sítí nebo TLS mezi sítí Cloudflare a vaším key serverem.

Alert on certificate expiry within 30 days

(certificate_expiration_timestamp_seconds - time()) / 86400 < 30