外部 Infinispan 指标

了解关于监控外部 Infinispan 性能的指标

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

先决条件

已启用的 Infinispan 服务器指标

Infinispan 在 /metrics 端点中公开指标。默认情况下,它们是启用的。我们建议启用属性 name-as-tags,因为它使指标名称独立于缓存名称。

要在 Infinispan 服务器中配置指标,只需如下面的 XML 所示启用即可。

infinispan.xml
<infinispan>
    <cache-container statistics="true">
        <metrics gauges="true" histograms="false" name-as-tags="true" />
    </cache-container>
</infinispan>

在使用 Kubernetes 中的 Infinispan Operator 时,可以通过使用带有自定义配置的 ConfigMap 来启用指标。下面显示了一个示例。

ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-config
data:
  infinispan-config.yaml: >
    infinispan:
      cacheContainer:
        metrics:
          gauges: true
          namesAsTags: true
          histograms: false
infinispan.yaml CR
apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
  name: infinispan
  annotations:
    infinispan.org/monitoring: 'true' (1)
spec:
  configMapName: "cluster-config" (2)
1 为部署启用监控
2 使用自定义配置设置 ConfigMap 名称。

更多信息可以在Infinispan 文档Infinispan operator 文档中找到。

集群和网络

本节介绍用于监控 Infinispan 节点之间通信的指标,以识别可能的网络问题。

全局标签

cluster=<name>

集群名称。如果正在收集来自多个集群的指标,则此标签有助于识别它们所属的位置。

node=<node>

报告指标的节点的名称。

所有以 vendor_jgroups_ 为前缀的指标名称仅用于故障排除和调试目的。指标名称可能会在 Keycloak 的后续版本中更改,恕不另行通知。因此,我们建议不要在仪表板或监控和警报中使用它们。

响应时间

以下指标公开了远程请求的响应时间。响应时间是在两个节点之间测量的,包括处理时间。所有请求都通过这些指标进行测量,并且响应时间应在整个集群生命周期内保持稳定。

在健康的集群中,响应时间将保持稳定。响应时间的增加可能表明集群性能下降或节点负载过重。

标签

node=<node>

它标识发送方节点。

target_node=<node>

它标识接收方节点。

指标 描述

vendor_jgroups_stats_sync_requests_seconds_count

到接收方节点的同步请求数。

vendor_jgroups_stats_sync_requests_seconds_sum

到接收方节点的同步请求的总持续时间

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

带宽

Infinispan 接收和发送的所有字节都由这些指标收集。此外,所有内部消息(如心跳)也被计算在内。它们允许计算每个节点当前使用的带宽。

指标名称取决于正在使用的 JGroups 传输协议。
指标 协议 描述

vendor_jgroups_tcp_get_num_bytes_received

TCP

节点接收的总字节数。

vendor_jgroups_udp_get_num_bytes_received

UDP

vendor_jgroups_tunnel_get_num_bytes_received

TUNNEL

vendor_jgroups_tcp_get_num_bytes_sent

TCP

节点发送的总字节数。

vendor_jgroups_tunnel_get_num_bytes_sent

UDP

vendor_jgroups_tunnel_get_num_bytes_sent

TUNNEL

线程池

监控线程池大小是一个很好的指标,表明节点负载过重。接收到的所有请求都会添加到线程池进行处理,当线程池已满时,请求将被丢弃。重传机制确保了可靠的通信,但会增加资源使用量。

在健康的集群中,线程池永远不应接近其最大大小(默认为 200 个线程)。
虚拟线程不可用线程池指标。当使用 OpenJDK 21 运行时,默认启用虚拟线程。
指标名称取决于正在使用的 JGroups 传输协议。默认的传输协议是 TCP。
指标 协议 描述

vendor_jgroups_tcp_get_thread_pool_size

TCP

线程池中当前线程数。

vendor_jgroups_udp_get_thread_pool_size

UDP

vendor_jgroups_tunnel_get_thread_pool_size

TUNNEL

vendor_jgroups_tcp_get_largest_size

TCP

池中曾经同时存在的最大线程数。

vendor_jgroups_udp_get_largest_size

UDP

vendor_jgroups_tunnel_get_largest_size

TUNNEL

流控制

流控制负责将消息发送者的速率调整为最慢接收者的速率。这是通过基于信用的系统实现的,其中每个发送者在发送时会减少其信用额度。当信用额度降至 0 以下时,发送者会阻止,并且仅在收到来自接收者的补充消息时才恢复发送消息。

以下指标显示了阻止的消息数和平均阻止时间。当值不为零时,可能表明接收者已过载,并可能降低集群性能。

每个节点都有两个独立的流控制协议,UFC 用于单播消息,MFC 用于多播消息。

健康的集群显示所有指标的值均为零。
指标 描述

vendor_jgroups_ufc_get_number_of_blockings

流控制阻止发送者发送单播消息的次数。

vendor_jgroups_ufc_get_average_time_blocked

尝试发送单播消息时,流控制中的平均阻止时间(以毫秒为单位)。

vendor_jgroups_mfc_get_number_of_blockings

流控制阻止发送者发送多播消息的次数。

vendor_jgroups_mfc_get_average_time_blocked

尝试发送多播消息时,流控制中的平均阻止时间(以毫秒为单位)。

重传

JGroups 提供可靠的消息传递。当消息在网络上丢失或接收者无法处理消息时,需要重传。重传会增加资源使用量,并且通常是系统过载的信号。

随机早期丢弃 (RED) 监控发送者队列。当队列几乎满时,消息将被丢弃,并且必须进行重传。它可以防止线程被满的发送者队列阻塞。

健康的集群显示所有指标的值均为零。
指标 描述

vendor_jgroups_unicast3_get_num_xmits

重传消息的数量。

vendor_jgroups_red_get_dropped_messages

发送者丢弃的消息总数。

vendor_jgroups_red_get_drop_rate

发送者丢弃的所有消息的百分比。

网络分区

集群大小

集群大小指标报告集群中存在的节点数。如果它不同,则可能表明节点正在加入、关闭,或者在最坏的情况下,正在发生网络分区。

健康的集群在所有节点中显示相同的值。
指标 描述

vendor_cluster_size

集群中的节点数。

跨站点状态

跨站点状态报告与其他站点的连接状态。如果在线,则返回值为 1,如果离线,则返回值为 0。值 2 用于状态未知的节点上;并非所有节点都建立与远程站点的连接,并且不包含此信息。

健康的集群显示大于零的值。
指标 描述

vendor_jgroups_site_view_status

单站点状态(如果在线则为 1)。

标签

site=<name>

目标站点的名称。

网络分区事件

集群中的网络分区可能由于多种原因而发生。此指标无助于预测网络分裂,但会发出已发生分裂以及集群已合并的信号。

健康的集群显示此指标的值为零。
指标 描述

vendor_jgroups_merge3_get_num_merge_events

检测和修复网络分裂的次数。

Infinispan 缓存

本节中的指标有助于监控 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

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

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

锁定

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

在健康的集群中,持有的锁的数量应保持恒定,但死锁可能会造成临时峰值。
指标 描述

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

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

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

状态转移

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

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

指标 描述

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)

跨站点数据复制

与集群数据复制类似,本节中的指标衡量将数据复制到其他站点所需的时间。

在健康的集群中,平均跨站点复制时间将保持稳定或变化很小。

标签

site=<name>

指示接收站点。

指标 描述

vendor_rpc_manager_cross_site_replication_times_seconds_count

跨站点请求的总数。

vendor_rpc_manager_cross_site_replication_times_seconds_sum

所有跨站点请求的总持续时间。

vendor_rpc_manager_replication_times_to_site_seconds_count

跨站点请求的总数。此指标更详细,具有每个站点的计数器。

vendor_rpc_manager_replication_times_to_site_seconds_sum

所有跨站点请求的总持续时间。此指标更详细,具有每个站点的持续时间。

vendor_rpc_manager_number_xsite_requests_received_from_site

此节点处理的跨站点请求的总数。此指标更详细,具有每个站点的计数器。

vendor_x_site_admin_status

站点状态。值为 1 表示在线。此值对 Infinispan CLI 命令 bring-onlinetake-offline 做出反应。

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

下一步

在此页面上