在spring数据geode客户端应用程序中获取区域统计信息



我需要获得apache geode客户端缓存应用程序的区域统计信息。

设置:1定位器1台服务器1 . client-cache app

所有模块都是使用spring创建的。

缓存服务器将基于Cache .xml创建区域

Cache.xml:

<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://geode.apache.org/schema/cache"
xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd"
version="1.0" lock-lease="120" lock-timeout="60" search-timeout="300"
is-server="true" copy-on-read="false">
<pdx read-serialized="true" persistent="true">
<pdx-serializer>
<class-name>
org.apache.geode.pdx.ReflectionBasedAutoSerializer
</class-name>
</pdx-serializer>
</pdx>
<region name="track" refid="PARTITION_PERSISTENT_OVERFLOW">
<region-attributes statistics-enabled="true">
<compressor>
<class-name>org.apache.geode.compression.SnappyCompressor</class-name>
</compressor>
</region-attributes>
<index name="trackKeyIndex" from-clause="/track" expression="key" key-index="true"/>
<index name="trackTransactionNameIndex" from-clause="/track" expression="transactions[*]"/>
</region>
</cache>

缓存服务器应用程序

@SpringBootApplication
@org.springframework.data.gemfire.config.annotation.CacheServerApplication(name = "cacheServer", locators = "localhost[10334]")
@EnableClusterAware
@EnableCompression
@EnableStatistics
@EnableGemFireProperties(cacheXmlFile = "cache.xml")
public class CacheServerApplication {
public static void main(String[] args) {
SpringApplication.run(CacheServerApplication.class, args);
}
}

客户机缓存应用程序
@SpringBootApplication
@ClientCacheApplication
@EnableClusterDefinedRegions //Fetch cluster defined regions for @Resource autowired prop
@EnableStatistics
public class GeodeClientApplication {
public static void main(String[] args) {
SpringApplication.run(GeodeClientApplication.class, args);
}
}

在client-cache中获取区域统计信息的组件类。

@Component
public class TrackedInsightsCacheService {
private static Logger logger = LoggerFactory.getLogger(TrackedInsightsCacheService.class);
@Autowired
@Resource(name = "track")
private Region trackRegion;
public Object getRegionStatistics(){
RegionAttributes attributes = trackRegion.getAttributes();
if(attributes.getStatisticsEnabled()) {
return trackRegion.getStatistics();
}
return null;
}
public Object get(String key) {
return trackRegion.get(key);
}
public void put(String key, String value){
trackRegion.put(key, value);
}        
}

Autowired TrackRegion是LocalRegion。每当我执行get调用时,它首先检查本地区域,然后检查服务器区域上的键。

但是当我调用getStatistics时,它说该地区的统计数据是禁用的

我在这里错过了什么?这是获取区域统计信息的正确方法吗?

我能够通过gfsh命令行获得集群统计信息,输出如下所示,

gfsh>show metrics
Cluster-wide Metrics
Category  |        Metric         | Value
--------- | --------------------- | -----
cluster   | totalHeapSize         | 4846
cache     | totalRegionEntryCount | 1
| totalRegionCount      | 1
| totalMissCount        | 81
| totalHitCount         | 15
diskstore | totalDiskUsage        | 0
| diskReadsRate         | 0.0
| diskWritesRate        | 0.0
| flushTimeAvgLatency   | 0
| totalBackupInProgress | 0
query     | activeCQCount         | 0
| queryRequestRate      | 0.0

我在设置中有多个区域,查看集群明智的统计数据是不够的,所以寻找获得区域明智的指标数据。

getStatistics()方法返回实际Region实例的统计信息。由于您是在客户端上执行此方法,返回的实际统计信息将是本地客户端Region的,这不是您想要的。

gfsh show metrics命令实际上使用JMX检索区域统计信息,您可以在这里检查源代码并根据您的需要进行调整。

另一种选择,如果你不想使用JMX,将是编写一个自定义Geode函数,并通过使用StatisticsManager手动检索你正在寻找的统计数据。

欢呼。

相关内容

  • 没有找到相关文章

最新更新