单站点部署的嵌入式 Infinispan 指标

了解有关监控缓存健康状况和集群复制的指标

这是使用指标进行故障排除指南的一部分。

先决条件

  • 需要为 Keycloak 启用指标。 有关更多详细信息,请遵循通过指标获得洞察力指南。

  • 收集指标的监控系统。

指标

全局标签

cache=<name>

缓存名称。

大小

使用这两个指标监控缓存中的条目数。 如果缓存是集群的,则每个条目都有一个所有者节点和零个或多个不同节点的备份副本。

将唯一条目大小指标求和,以获得集群条目总数。
指标 描述

vendor_statistics_approximate_entries

节点存储的近似条目数,包括备份副本。

vendor_statistics_approximate_entries_unique

节点存储的近似条目数,不包括备份副本。

数据访问

以下指标监控缓存访问,例如读取、写入及其持续时间。

存储

存储操作是写入操作,用于写入或更新缓存中存储的值。

指标 描述

vendor_statistics_store_times_seconds_count

存储请求的总数。

vendor_statistics_store_times_seconds_sum

所有存储请求的总持续时间。

当启用直方图时,可以使用百分位数 buckets。 这些对于创建热图很有用,但是,收集和公开百分位数 buckets 可能会对部署性能产生负面影响。

读取

读取操作从缓存中读取值。 它分为两组,命中(如果找到值)和未命中(如果未找到值)。

指标 描述

vendor_statistics_hit_times_seconds_count

读取命中请求的总数。

vendor_statistics_hit_times_seconds_sum

所有读取命中请求的总持续时间。

vendor_statistics_miss_times_seconds_count

读取未命中请求的总数。

vendor_statistics_miss_times_seconds_sum

所有读取未命中请求的总持续时间。

当启用直方图时,可以使用百分位数 buckets。 这些对于创建热图很有用,但是,收集和公开百分位数 buckets 可能会对部署性能产生负面影响。

移除

移除操作从缓存中移除值。 它分为两组,命中(如果值存在)和未命中(如果值不存在)。

指标 描述

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

所有移除未命中请求的总持续时间。

当启用直方图时,可以使用百分位数 buckets。 这些对于创建热图很有用,但是,收集和公开百分位数 buckets 可能会对部署性能产生负面影响。

对于 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 增加最大缓存大小

锁定

写入和移除操作会持有锁,直到值在本地集群中以及远程站点中复制。

在健康的集群上,持有的锁数量应保持恒定,但死锁可能会产生暂时性的峰值。
指标 描述

vendor_lock_manager_number_of_locks_held

此节点当前持有的锁数量。

事务

事务性缓存使用单阶段提交和两阶段提交协议来完成事务。 这些指标跟踪操作持续时间。

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

所有提交请求的总持续时间。

当启用直方图时,可以使用百分位数 buckets。 这些对于创建热图很有用,但是,收集和公开百分位数 buckets 可能会对部署性能产生负面影响。

状态传输

当节点加入或离开集群时,会发生状态传输。 这是平衡存储的数据并保证所需副本数所必需的。

此操作会增加资源使用率,并且会对整体性能产生负面影响。

指标 描述

vendor_state_transfer_manager_inflight_transactional_segment_count

本地节点从其他节点请求的正在进行的事务段的数量。

vendor_state_transfer_manager_inflight_segment_transfer_count

本地节点从其他节点请求的正在进行的段的数量。

集群数据复制

集群数据复制可能是主要的故障来源。 这些指标不仅报告响应时间,即复制更新所需的时间,还报告故障。

在健康的集群上,平均复制时间将保持稳定或只有很小的变化。 故障次数不应增加。
指标 描述

vendor_rpc_manager_replication_count

成功复制的总数。

vendor_rpc_manager_replication_failures

失败复制的总数。

vendor_rpc_manager_average_replication_time

在集群中复制数据所花费的平均时间,以毫秒为单位。

成功率

可以使用表达式来计算复制成功率

(vendor_rpc_manager_replication_count)
/
(vendor_rpc_manager_replication_count
 + vendor_rpc_manager_replication_failures)

下一步

在此页上