外部 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 运算符,可以通过使用带有自定义配置的 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 节点之间通信以识别可能出现的网络问题的指标。

全局标签

  • cluster=<name>:集群名称。如果从多个集群收集指标,则此标签有助于识别它们属于哪个集群。

  • node=<node>:报告指标的节点的名称。

响应时间

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

在健康集群中,响应时间将保持稳定。响应时间增加可能表示集群已降级或某个节点负载过重。

标签

  • 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 个线程)。
线程池指标在使用虚拟线程时不可用。
指标名称取决于使用的 JGroups 传输协议。
指标 协议 说明

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,如果脱机,则返回 02 用于状态未知的节点;并非所有节点都与远程站点建立连接,并且不包含此信息。

健康集群显示大于零的值。
指标 说明

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

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

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