使用外部 Infinispan 部署的 Keycloak

本文件包含可用於監控您部署效能的 Keycloak 指標詳細資訊。

本文檔中描述的部署適用於多站點部署。在此架構中,Keycloak 節點使用外部 Infinispan 來儲存快取資料。

如果您的部署未使用外部 Infinispan,請查閱Keycloak 叢集部署指南。

啟用 Keycloak 指標

Keycloak 在管理介面端點 /metrics 上公開指標。若要啟用,請使用建置時間選項 --metrics-enabled=true

在 Kubernetes 叢集上,使用 Keycloak Operator,可以透過在 Keycloak CR addionalOptions 中啟用指標,如下所示

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  labels:
    app: keycloak
  name: keycloak
spec:
  additionalOptions:
    - name: metrics-enabled
      value: 'true'

其他資訊可以在此處找到。

Keycloak HTTP 指標

本節說明用於監控 Keycloak HTTP 請求處理的指標。

處理時間

這些指標公開處理時間,以監控 Keycloak 效能以及處理請求所需的時間。

在健全的叢集上,平均處理時間將保持穩定。處理時間的峰值或增加可能是某些節點負載過高的早期徵兆。

標籤

  • outcome:更一般的結果標籤。

  • status:HTTP 狀態碼。

  • uri:請求的 URI。

指標 描述

http_server_requests_seconds_count

已處理的請求總數。

http_server_requests_seconds_sum

所有已處理請求的總持續時間。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。

作用中請求

目前的作用中請求數也可用。

指標 描述

http_server_active_requests

目前的作用中請求數

頻寬

以下指標有助於監控 Keycloak 使用的頻寬和消耗的流量,以及接收或傳送的請求和回應所消耗的流量。

指標 描述

http_server_bytes_written_count

傳送的回應總數。

http_server_bytes_written_sum

傳送的總位元組數。

http_server_bytes_read_count

接收的請求總數。

http_server_bytes_read_sum

接收的總位元組數。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。

Infinispan 快取

Keycloak 在嵌入式 Infinispan 快取中快取資料。本節中的指標有助於監控快取健康狀況。

全域標籤

  • cache=<name>:快取名稱。

大小

使用這兩個指標監控快取中的項目數。如果快取是叢集的,則每個項目都有一個擁有者節點和零個或多個不同節點的備份副本。

將唯一項目大小指標相加,以取得叢集的項目總數。
指標 描述

vendor_statistics_approximate_entries

節點儲存的近似項目數,包括備份副本。

vendor_statistics_approximate_entries_unique

節點儲存的近似項目數,不包括備份副本。

資料存取

以下指標監控快取存取,例如讀取、寫入及其持續時間。

儲存

儲存作業是寫入作業,用於寫入或更新快取中儲存的值。

指標 描述

vendor_statistics_store_times_seconds_count

儲存請求總數。

vendor_statistics_store_times_seconds_sum

所有儲存請求的總持續時間。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。

讀取

讀取作業從快取讀取值。它分為兩組,找到值則為命中,未找到則為未命中。

指標 描述

vendor_statistics_hit_times_seconds_count

讀取命中請求總數。

vendor_statistics_hit_times_seconds_sum

所有讀取命中請求的總持續時間。

vendor_statistics_miss_times_seconds_count

讀取未命中請求總數。

vendor_statistics_miss_times_seconds_sum

所有讀取未命中請求的總持續時間。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。

移除

移除作業從快取中移除值。它分為兩組,如果值存在則為命中,如果值不存在則為未命中。

指標 描述

vendor_statistics_remove_hit_times_seconds_count

移除命中請求總數。

vendor_statistics_remove_hit_times_seconds_sum

所有移除命中請求的總持續時間。

vendor_statistics_remove_miss_times_seconds_count

移除未命中請求總數。

vendor_statistics_remove_miss_times_seconds_sum

所有移除未命中請求的總持續時間。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。

對於 usersrealms 快取,資料庫失效會轉換為移除作業。這些指標可以很好地指示資料庫實體修改的頻率,因此會從快取中移除。

讀取和移除作業的命中率

可以使用運算式來計算 Prometheus 等系統中快取的命中率。例如,讀取作業的命中率可以表示為

vendor_statistics_hit_times_seconds_count/(vendor_statistics_hit_times_seconds_count+vendor_statistics_miss_times_seconds_count)

讀取/寫入比率

可以使用運算式來計算快取的讀寫比率,使用上述指標

(vendor_statistics_hit_times_seconds_count+vendor_statistics_miss_times_seconds_count)/(vendor_statistics_hit_times_seconds_count+vendor_statistics_miss_times_seconds_count+vendor_statistics_remove_hit_times_seconds_count+vendor_statistics_remove_miss_times_seconds_count+vendor_statistics_store_times_seconds_count)

逐出

逐出是限制快取大小的程序,當快取滿時,會移除項目,以便為要快取的新項目騰出空間。由於 Keycloak 會在 usersrealmsauthorization 中快取資料庫實體,因此資料庫存取始終會進行逐出事件。

指標 描述

vendor_statistics_evictions

逐出事件總數。

逐出率

逐出的快速增加和資料庫 CPU 使用率非常高,表示 usersrealms 快取對於順暢的 Keycloak 運作而言太小,因為資料需要非常頻繁地從資料庫重新載入,這會減慢回應速度。如果記憶體足夠,請考慮使用 CLI 選項 cache-embedded-users-max-countcache-embedded-realms-max-count 來增加最大快取大小

交易

交易快取使用單階段提交和兩階段提交通訊協定來完成交易。這些指標會追蹤操作持續時間。

PESSMISTIC 鎖定模式使用單階段提交,並且不會建立提交請求。
在健全的叢集中,回滾次數應保持為零。死鎖應該很少見,但它們會增加回滾次數。
指標 描述

vendor_transactions_prepare_times_seconds_count

準備請求總數。

vendor_transactions_prepare_times_seconds_sum

所有準備請求的總持續時間。

vendor_transactions_rollback_times_seconds_count

回滾請求總數。

vendor_transactions_rollback_times_seconds_sum

所有回滾請求的總持續時間。

vendor_transactions_commit_times_seconds_count

提交請求總數。

vendor_transactions_commit_times_seconds_sum

所有提交請求的總持續時間。

啟用長條圖時,可以使用百分位數儲存區。這些對於建立熱圖很有用,但收集和公開百分位數儲存區可能會對部署效能產生負面影響。