← Cloudflare SSL/TLS / ssl / keyless-ssl / reference
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/metricsPort 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_timeObě č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.
- U úložišť klíčů založených na souborech jde o vyhledání v mapě, které obvykle trvá méně než milisekundu.
- U úložišť klíčů PKCS#11 nebo HSM to může zahrnovat síťovou komunikaci s HSM, pokud odkazy na klíče nejsou uloženy v mezipaměti.
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:
- Při spuštění se pro certifikát ověřování serveru (
auth_cert) a certifikát CA Cloudflare (cloudflare_ca_cert). - Při každém úspěšném příchozím TLS spojení, pro certifikáty protistrany předložené připojujícím se klientem.
| 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