Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

キーサーバーのメトリクス

最終更新 Markdown で表示Agent セットアップ

gokeyless キーサーバーは Prometheus のメトリクスエンドポイントを公開します。署名の性能、エラー率、接続の健全性、証明書の期限切れを監視できます。このエンドポイントは OpenTelemetry Collector の Prometheus レシーバーでもスクレイプできるため、OpenTelemetry 対応の任意のバックエンドへメトリクスを渡せます。

メトリクスエンドポイント

デフォルトでは、メトリクスは次の URL で提供されます。

http://<host>:2406/metrics

ポートは、設定ファイルの metrics_port--metrics-port フラグ、または KEYLESS_METRICS_PORT 環境変数で変更できます。

このエンドポイントが提供するのは /metrics だけです。/health/debug などの追加の HTTP エンドポイントはありません。


ヒストグラムのバケット

ヒストグラムメトリクスは、すべて同じバケット設定を使います。100 マイクロ秒から始まり、各ステップで 2 倍になる指数バケットが 15 個あり、およそ 1.64 秒まで続きます。最後に +Inf バケットがあります。

バケット 上限
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 約 1.64 s を超える値

メトリクスリファレンス

keyless_requests

Type: Counter
Labels: opcode

確立済み接続で受け取ったリクエストを、結果に関係なくすべて数えます。処理を始める前に、リクエストごとに 1 回インクリメントします。

opcode ラベルには、gokeyless プロトコルの定数名をそのまま使います。

RSA 操作

opcode ラベル ワイヤ値 説明
OpRSADecrypt 0x01 RSA の生の復号です。TLS の RSA 鍵交換で使います(TLS 1.3 では非推奨)
OpRSASignMD5SHA1 0x02 MD5+SHA1 の結合ハッシュに対する RSA PKCS#1 v1.5 署名です。TLS 1.0/1.1 のハンドシェイクで使います
OpRSASignSHA1 0x03 SHA1 に対する RSA PKCS#1 v1.5 署名です
OpRSASignSHA224 0x04 SHA224 に対する RSA PKCS#1 v1.5 署名です
OpRSASignSHA256 0x05 SHA256 に対する RSA PKCS#1 v1.5 署名です
OpRSASignSHA384 0x06 SHA384 に対する RSA PKCS#1 v1.5 署名です
OpRSASignSHA512 0x07 SHA512 に対する RSA PKCS#1 v1.5 署名です
OpRSAPSSSignSHA256 0x35 SHA256 に対する RSASSA-PSS 署名です。TLS 1.3 での主要な RSA 操作です
OpRSAPSSSignSHA384 0x36 SHA384 に対する RSASSA-PSS 署名です
OpRSAPSSSignSHA512 0x37 SHA512 に対する RSASSA-PSS 署名です

ECDSA 操作

opcode ラベル ワイヤ値 説明
OpECDSASignMD5SHA1 0x12 MD5+SHA1 の結合ハッシュに対する ECDSA 署名です
OpECDSASignSHA1 0x13 SHA1 に対する ECDSA 署名です
OpECDSASignSHA224 0x14 SHA224 に対する ECDSA 署名です
OpECDSASignSHA256 0x15 SHA256 に対する ECDSA 署名です。TLS 1.2 と TLS 1.3 で最もよく使います
OpECDSASignSHA384 0x16 SHA384 に対する ECDSA 署名です
OpECDSASignSHA512 0x17 SHA512 に対する ECDSA 署名です

その他の署名

opcode ラベル ワイヤ値 説明
OpEd25519Sign 0x18 任意長のペイロードに対する Ed25519 署名です(事前ハッシュしたダイジェストではありません)

シーリングとインフラ操作

opcode ラベル ワイヤ値 説明
OpSeal 0x21 サーバーのシーリングキーで blob を暗号化します。TLS セッションチケットに使います
OpUnseal 0x22 OpSeal で以前暗号化した blob を復号します。シーリングキーがローテーション済みの場合は ErrExpired を返します
OpRPC 0x23 サーバーに登録された名前付き関数を実行します。すべての接続種別で利用できます
OpCustom 0x24 サーバー設定で指定したカスタム関数を実行します。制限なしの接続でのみ利用できます
OpPing 0xF1 ヘルスチェックです。HSM や鍵の検索は行わず、サーバーはペイロードを OpPong としてそのまま返します

keyless_request_exec_duration_per_opcode

Type: Histogram
Labels: type, error

処理開始から応答生成までの、1 回の操作の実行時間を測ります。PKCS#11 HSM を使う操作では、プールからのセッション待ち時間と、HSM 上の暗号操作時間の両方が含まれます。

このメトリクスには、リクエストが接続セマフォのスロットを待つ時間は含まれません。その時間は keyless_request_total_duration_per_opcode で記録します。

type ラベル

このラベルでは、opcode をより粗いカテゴリにまとめます。

type ラベル 含まれる opcode
rsa OpRSADecrypt、すべての OpRSASign*、すべての OpRSAPSSSign*
ecdsa すべての OpECDSASign*
ed25519 OpEd25519Sign
rpc OpRPC
custom OpCustom
other OpSealOpUnsealOpPingOpPongOpResponseOpError
unknown 認識できない opcode バイト

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 操作中の I/O 読み取りエラーです 鍵ファイル読み取り時のディスクエラー
version mismatch プロトコルバージョンが未対応です クライアントとサーバーのバージョンずれ
bad opcode 未知の opcode を受け取りました カスタムハンドラー未設定のまま OpCustom が送られた
unexpected opcode 応答用 opcode がリクエストとして使われました クライアントが OpPongOpResponseOpError をリクエストとして送った
malformed message TLV の解析に失敗しました 破損または途中で切れたパケット
internal error 暗号以外のサーバー側障害です Sealer が nil、RPC ディスパッチエラー
certificate not found 証明書の検索に失敗しました 証明書が読み込まれていない
sealing key expired OpUnseal の blob が古すぎて復号できません TLS セッションチケットの鍵ローテーション。すでに破棄された鍵でシーリングされた blob です
remote configuration error リモートキーサーバーの設定が誤っています 到達できない、または設定が誤ったリモートキーサーバーを鍵が指している

keyless_request_total_duration_per_opcode

Type: Histogram
Labels: typeerrorkeyless_request_exec_duration_per_opcode と同じ値)

リクエストパケットをワイヤから読み取ってから、応答バイトをクライアントへ書き戻すまでの、リクエスト全体の所要時間を測ります。

total_duration = exec_duration + response_write_time

両方のタイムスタンプは、接続セマフォを取得したあとに記録します。そのため、セマフォのキュー待ち時間はどちらのヒストグラムにも含まれません。通常の負荷では、total duration と exec duration はほぼ同じです。差が広がっている場合は、クライアントへの書き戻しが遅いことを示します。たとえば、キーサーバーと Cloudflare エッジの間のネットワークバックプレッシャーです。


keyless_key_load_duration

Type: Histogram
Labels: なし

キーストアが各リクエストの秘密鍵を探して返すまでの時間を測ります。キーは SKI、SNI、サーバー IP です。

  • ファイルベースのキーストアではマップ検索であり、通常は 1 ミリ秒未満です。
  • PKCS#11 または HSM キーストアでは、鍵参照がメモリにキャッシュされていない場合、HSM へのネットワーク往復が含まれることがあります。

このメトリクスは、署名と復号の操作すべてで記録します。対象は OpRSADecrypt、すべての OpRSASign*、すべての OpRSAPSSSign*、すべての OpECDSASign*、および OpEd25519Sign です。

OpPingOpSealOpUnsealOpRPCOpCustom では記録しません。これらは秘密鍵の検索が不要です。


keyless_failed_connection

Type: Counter
Labels: なし

接続レベルのトランスポート障害を数えます。このメトリクスはネットワーク層または TLS 層の問題を表します。署名エラーや鍵の検索失敗は数えません。それらは duration ヒストグラムの error ラベルで報告します。

シナリオ 計上するか
TLS ハンドシェイクの失敗 しない
TLS ハンドシェイク前のクライアント切断(EOF) しない
TLS 後に接続の信頼レベルを判定できなかった する
確立済み接続での EOF 以外の読み取りエラー する
応答配信時の書き込みエラー する
読み取りタイムアウト(接続のグレースフルドレイン) しない
PKCS#11 プールタイムアウトを含む署名エラー しない
鍵が見つからない しない

certificate_expiration_timestamp_seconds

Type: Gauge
Labels: sourceserial_nocnhostnamescaserverclient

キーサーバーが読み込んだ各証明書の有効期限(NotAfter)を Unix タイムスタンプで報告します。証明書ごとに 1 つの時系列を出力します。

このメトリクスは次のタイミングで更新されます。

  • 起動時。サーバー認証証明書(auth_cert)と Cloudflare CA 証明書(cloudflare_ca_cert)。
  • 受信 TLS 接続が成功するたび。接続クライアントが提示したピア証明書。
ラベル 説明
source 起動時証明書はファイルパス。受信接続のピア証明書は listener: <addr>
serial_no 証明書のシリアル番号
cn Subject の Common Name
hostnames DNS Subject Alternative Name をソートし、カンマ区切りにした一覧
ca CA 証明書なら 1、それ以外は 0
server 証明書に ExtKeyUsageServerAuth があれば 1、なければ 0
client 証明書に ExtKeyUsageClientAuth があれば 1、なければ 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]))

exec duration に対応する急増がなく、ここだけが急増している場合は、キーストアの検索自体が遅い可能性があります。ディスク I/O の問題や、PKCS#11 オブジェクト列挙の遅延が考えられます。

接続失敗率

rate(keyless_failed_connection_total[5m])

0 以外の値が続く場合は、Cloudflare ネットワークとキーサーバーの間にネットワークまたは TLS の問題があります。

30 日以内に期限切れになる証明書のアラート

(certificate_expiration_timestamp_seconds - time()) / 86400 < 30

役に立ちましたか?