תיעוד 65
מדדי שרת המפתחות
עודכן לאחרונה: 3 ביוני 2026
שרת המפתחות gokeyless חושף נקודת קצה של מדדי Prometheus שאפשר להשתמש בה כדי לעקוב אחרי ביצועי חתימה, שיעורי שגיאה, תקינות חיבורים ותפוגת אישורים. אפשר גם לאסוף את נקודת הקצה הזו באמצעות מקלט Prometheus של OpenTelemetry Collector, וכך להפוך את המדדים לזמינים לכל backend תואם OpenTelemetry.
#נקודת קצה של המדדים
כברירת מחדל, המדדים מוגשים בכתובת:
http://<host>:2406/metricsאפשר להגדיר את הפורט באמצעות המפתח metrics_port בקובץ התצורה, הדגל --metrics-port, או משתנה הסביבה KEYLESS_METRICS_PORT.
נקודת הקצה מגישה רק את /metrics. אין נקודות קצה נוספות של HTTP כמו /health או /debug.
#דליים של היסטוגרמה
כל מדדי ההיסטוגרמה חולקים את אותה תצורת דליים: 15 דליים מעריכיים שמתחילים ב-100 מיקרו-שניות, מוכפלים בכל צעד עד כ-1.64 שניות, ועוד דלי +Inf אחרון.
| דלי | גבול עליון |
|---|---|
| 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 שניות |
הערה
בשימוש במודול אבטחת חומרה (HSM) עם מאגר סשנים של PKCS#11, פסק הזמן להמתנה למאגר קבוע בקוד על 10 שניות. לכן אירוע של מיצוי המאגר תמיד יופיע בדלי +Inf. עליות בתצפיות +Inf בפעולות חתימה עם error="cryptography error" הן אינדיקציה ישירה לרוויה של מאגר הסשנים של PKCS#11.
#מדריך המדדים
#keyless_requests
סוג: Counter
תוויות: opcode
סופר כל בקשה נכנסת שהתקבלה על חיבור שכבר הוקם, בלי קשר לתוצאה. עולה באחד לכל בקשה לפני שמתחיל עיבוד כלשהו.
תווית opcode משתמשת בשם הקבוע המלא מפרוטוקול gokeyless.
#פעולות RSA
תווית opcode | ערך על הקו | תיאור |
|---|---|---|
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 | ערך על הקו | תיאור |
|---|---|---|
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 | ערך על הקו | תיאור |
|---|---|---|
OpEd25519Sign | 0x18 | חתימת Ed25519 על מטען באורך שרירותי (לא גיבוב שחושב מראש) |
#פעולות איטום ותשתית
תווית opcode | ערך על הקו | תיאור |
|---|---|---|
OpSeal | 0x21 | הצפנת blob באמצעות מפתח האיטום של השרת. משמש לכרטיסי סשן של TLS |
OpUnseal | 0x22 | פענוח blob שהוצפן קודם על ידי OpSeal. מחזיר ErrExpired אם מפתח האיטום הסתובב |
OpRPC | 0x23 | הפעלת פונקציה בעלת שם שנרשמה בשרת. זמין לכל סוגי החיבורים |
OpCustom | 0x24 | הפעלת פונקציה מותאמת שהוגדרה בתצורת השרת. זמין רק לחיבורים לא מוגבלים |
OpPing | 0xF1 | בדיקת תקינות. השרת מהדהד את המטען בחזרה כ-OpPong, בלי מעורבות של HSM או חיפוש מפתח |
#keyless_request_exec_duration_per_opcode
סוג: Histogram
תוויות: type, error
מודד את הזמן לביצוע פעולה אחת, מהרגע שבו העיבוד מתחיל ועד שנוצרת תשובה. בפעולות שמגובות ב-HSM של PKCS#11, הזמן כולל את כל ההמתנה לסשן מהמאגר וגם את זמן הפעולה הקריפטוגרפית ב-HSM.
המדד הזה לא כולל זמן שבו בקשה ממתינה לחריץ בסמפור החיבור. זמן זה נלכד ב-keyless_request_total_duration_per_opcode.
#תווית type
ערכי opcode מקובצים לקטגוריות גסות יותר עבור תווית זו:
תווית type | ערכי opcode כלולים |
|---|---|
rsa | OpRSADecrypt, כל OpRSASign*, כל OpRSAPSSSign* |
ecdsa | כל OpECDSASign* |
ed25519 | OpEd25519Sign |
rpc | OpRPC |
custom | OpCustom |
other | OpSeal, OpUnseal, OpPing, OpPong, OpResponse, OpError |
unknown | כל בית opcode שלא מזוהה |
הערה
OpPing מקובץ ל-other יחד עם OpSeal ו-OpUnseal. אי אפשר להפריד במדד הזה את חביון הלוך-חזור של Ping מחביון פעולות seal ו-unseal.
#תווית 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 | חיפוש המפתח לא החזיר תוצאה | המפתח לא נטען ב-keystore, SKI שגוי בבקשה |
read failure | שגיאת קריאה של קלט/פלט במהלך הפעולה | שגיאת דיסק בקריאת קובץ מפתח |
version mismatch | גרסת הפרוטוקול אינה נתמכת | פער גרסאות בין הלקוח לשרת |
bad opcode | התקבל opcode לא מוכר | נשלח OpCustom בלי handler מותאם מוגדר |
unexpected opcode | opcode של תשובה שימש כבקשה | הלקוח שלח OpPong, OpResponse או OpError כבקשה |
malformed message | כשל בניתוח TLV | חבילה פגומה או קטועה |
internal error | כשל בצד השרת שאינו קריפטוגרפי | ה-Sealer הוא nil, שגיאת ניתוב RPC |
certificate not found | חיפוש האישור נכשל | האישור לא נטען |
sealing key expired | ה-blob של OpUnseal ישן מדי לפענוח | סיבוב מפתח של כרטיס סשן TLS: ה-blob נאטם במפתח שכבר יצא משימוש |
remote configuration error | שרת מפתחות מרוחק מוגדר באופן שגוי | המפתח מצביע לשרת מפתחות מרוחק לא נגיש או שגוי בתצורה |
#keyless_request_total_duration_per_opcode
סוג: Histogram
תוויות: type, error (אותם ערכים כמו ב-keyless_request_exec_duration_per_opcode)
מודד את הזמן הכולל למילוי בקשה, מרגע שחבילת הבקשה נקראת מהקו ועד שבתים של התשובה נכתבים בחזרה ללקוח.
total_duration = exec_duration + response_write_timeשתי חותמות הזמן נלכדות אחרי שסמפור החיבור כבר מוחזק, ולכן זמן ההמתנה בתור של הסמפור לא נכלל באף אחת משתי ההיסטוגרמות. בעומס רגיל, המשך הכולל ומשך הביצוע שווים בקירוב. פער גדל ביניהם מעיד על כתיבה איטית בחזרה ללקוח, למשל לחץ נגדי ברשת בין שרת המפתחות לקצה של Cloudflare.
#keyless_key_load_duration
סוג: Histogram
תוויות: אין
מודד את הזמן שלוקח ל-keystore לאתר ולהחזיר את המפתח הפרטי לכל בקשה, לפי SKI, SNI וכתובת IP של השרת.
- במאגרי מפתחות שמגובים בקבצים, זהו חיפוש במפה, ובדרך כלל הוא קצר ממילישנייה.
- במאגרי מפתחות של PKCS#11 או HSM, זה עשוי לכלול הלוך-חזור ברשת אל ה-HSM אם הפניות למפתחות אינן שמורות במטמון בזיכרון.
המדד נרשם לכל פעולות החתימה והפענוח: OpRSADecrypt, כל OpRSASign*, כל OpRSAPSSSign*, כל OpECDSASign* ו-OpEd25519Sign.
הוא לא נרשם עבור OpPing, OpSeal, OpUnseal, OpRPC או OpCustom, שאינם דורשים חיפוש מפתח פרטי.
#keyless_failed_connection
סוג: Counter
תוויות: אין
סופר כשלי תעבורה ברמת החיבור. המדד הזה משקף בעיות בשכבת הרשת או TLS. הוא לא סופר שגיאות חתימה או כשלי חיפוש מפתח, שמדווחים בתווית error של היסטוגרמות המשך.
| תרחיש | נספר? |
|---|---|
| כשל בלחיצת יד של TLS | לא |
| הלקוח התנתק לפני לחיצת היד של TLS (EOF) | לא |
| כשל בקביעת רמת האמון של החיבור אחרי TLS | כן |
| שגיאת קריאה שאינה EOF בחיבור שהוקם | כן |
| שגיאת כתיבה בעת מסירת תשובה | כן |
| פסק זמן בקריאה, ניקוז חיבור מסודר | לא |
| שגיאת חתימה, כולל פסק זמן של מאגר PKCS#11 | לא |
| מפתח לא נמצא | לא |
#certificate_expiration_timestamp_seconds
סוג: Gauge
תוויות: source, serial_no, cn, hostnames, ca, server, client
מדווח את זמן התפוגה (NotAfter) של כל אישור ששרת המפתחות טען, כחותמת זמן Unix. נפלטת סדרת זמן אחת לכל אישור.
המדד מתעדכן:
- בהפעלה, עבור אישור האימות של השרת (
auth_cert) ועבור אישור ה-CA של Cloudflare (cloudflare_ca_cert). - בכל חיבור TLS נכנס שהצליח, עבור אישורי העמית שהציג הלקוח המתחבר.
| תווית | תיאור |
|---|---|
source | נתיב קובץ לאישורים של ההפעלה. listener: <addr> לאישורי עמית מחיבורים נכנסים |
serial_no | מספר סידורי של האישור |
cn | Subject Common Name |
hostnames | רשימה ממוינת, מופרדת בפסיקים, של שמות DNS ב-Subject Alternative Name |
ca | 1 אם האישור הוא אישור CA, 0 אחרת |
server | 1 אם האישור כולל ExtKeyUsageServerAuth, 0 אחרת |
client | 1 אם האישור כולל ExtKeyUsageClientAuth, 0 אחרת |
הערה
server_utilization הוא מדד GaugeVec רשום ששרת המפתחות אף פעם לא כותב אליו. מכיוון שאף ערכי תוויות לא נקבעים, הוא לא פולט שום סדרת זמן בפלט של /metrics. אל תשתמשו בו.
#שאילתות PromQL לדוגמה
#תפוקת חתימה לפי סוג מפתח
sum by (opcode) (rate(keyless_requests[1m]))#שיעור שגיאות לפי סוג שגיאה
sum by (error) (
rate(keyless_request_exec_duration_per_opcode_count{error!="no error"}[5m])
)#חביון חתימה באחוזון 99 עבור RSA
histogram_quantile(
0.99,
rate(keyless_request_exec_duration_per_opcode_bucket{type="rsa"}[5m])
)ערך שמתקרב ל-10 שניות מציין מיצוי של מאגר הסשנים של PKCS#11. ראו Scaling and benchmarking ואת תיעוד ה-HSM להנחיה על הגדלת גודל מאגר הסשנים.
#חביון טעינת מפתח באחוזון 99
histogram_quantile(0.99, rate(keyless_key_load_duration_bucket[5m]))עלייה כאן בלי עלייה מקבילה במשך הביצוע מרמזת שחיפוש ה-keystore עצמו איטי: ייתכן שזו בעיית קלט/פלט של דיסק או עיכוב במניית אובייקטים של PKCS#11.
#שיעור כשלי חיבור
rate(keyless_failed_connection_total[5m])שיעור מתמשך שאינו אפס מציין בעיות רשת או TLS בין רשת Cloudflare לשרת המפתחות.
#התראה על תפוגת אישור בתוך 30 יום
(certificate_expiration_timestamp_seconds - time()) / 86400 < 30