【Hazelcast学习】Management Center、R

2022-05-15  本文已影响0人  伊丽莎白2015

如果想要查看Hazelcast里储存的数据,有几种方式呢?本文介绍Hazelcast监控相关的工具:

  1. Management Center: UI 管理界面
  2. Hazelcast Rest API:端点暴露
  3. 通过JMX查看数据
  4. 通过hz-cli查看数据

注:文章示例基于Hazelcast v5.1.1,关于Hazelcast与Spring的集成,看【Hazelcast学习】入门篇,以及和Spring Boot集成


1. Management Center

在线文档:https://docs.hazelcast.com/management-center/5.1/getting-started/overview

1.1 下载

可以通过Docker安装,或是MacOS homebrew安装,当然也可以下载Binary版本。我使用的是Binary版本。
Binary下载地址:https://hazelcast.com/open-source-projects/downloads/archives/#hazelcast-management_center

下载Management Center
1.2 启动Management Center

下载好了之后,在bin目录下启动start.sh,控制台打印:

2022-05-15 20:23:21,165 [ INFO] [AsyncExecutor-1] [c.h.w.s.ClusterManager]: Connecting to 0 enabled cluster(s) on startup.
2022-05-15 20:23:22,192 [ INFO] [main] [c.h.w.Launcher]: Hazelcast Management Center successfully started at http://localhost:8080/

进入http://localhost:8080,首页长这样:

Management Center Index

点击Dev Mode,Cluster Connections -> Add:

Add Connection Dashboard
1.3 示例

首先在代码中加入三个value:

@RestController
public class TestController {
    @Autowired
    private HazelcastInstance hazelcastInstance;

    @PostConstruct
    public void init() {
        IMap iMap = hazelcastInstance.getMap("testMap");
        iMap.put("user1", "user name-1");
        iMap.put("user2", "user name-2");
        iMap.put("user3", "user name-3");
    }
}

在Strorage -> Maps查看确实存了3个对象:

testMap

在Console里也提供了通过key来查看value的功能:

value

但如果你的value是一个Java对象,比如new User(1, "user name")这样的对象,那么在Management User按key取值的时候会报错。原因是Hazelcast在存的时候都会序列化(如果使用Json格式的String倒是可以的)。报错如下:

IMap get报错

解决办法:可以把包含Value对象的jar,放到hazelcast-management-center-5.1.1\bin\user-lib下。

有关更多IMap在Management Center中的使用,查看:https://docs.hazelcast.com/management-center/5.1/data-structures/map

2. Hazelcast Rest API

详情:https://docs.hazelcast.com/hazelcast/5.1/maintain-cluster/rest-api
Rest service默认是关闭的,需要手动开启:

REST service is disabled in the configuration by default.

2.1 开启Rest API

如何手动开启:<hz:rest-api enabled="true"></hz:rest-api>

<hz:hazelcast id="instance">
        <hz:config>
            <hz:cluster-name>dev</hz:cluster-name>
            <hz:network port="5701" port-auto-increment="true">
                ...
                <hz:rest-api enabled="true"></hz:rest-api>
            </hz:network>

        </hz:config>
    </hz:hazelcast>

开始后Rest API默认端口5701,访问:http://localhost:5701/hazelcast/health
返回:

{"nodeState":"ACTIVE","clusterState":"ACTIVE","clusterSafe":true,"migrationQueueSize":0,"clusterSize":2}

2.2 支持多种endpoint group
2.3 DATA Group的示例

在#2.2中说了,只有CLUSTER_READ和HEALTH_CHECK Group默认开启的,想要使用DATA Group,需要额外配置:

<hz:rest-api enabled="true">
    <hz:endpoint-group name="DATA" enabled="true"></hz:endpoint-group>
</hz:rest-api>

测试:
打开:http://localhost:5701/hazelcast/rest/maps/testMap/user1
返回数据:user name-1

3. 通过JMX查看

3.1 默认情况下,JMX Metrics相关的指标是默认开启的:

Controls whether the metrics collected are exposed to through JMX. It is enabled by default.

想要关闭,可以配置system property:hazelcast.metrics.jmx.enabled

3.2 通过JConsole查看

如果是MacOS系统,在Finder不好找路径,可以在终端用open foldername打开。

在启动Hazelcast的程序后,在JDK\bin路径下,点击jconsole,选择Hazelcast的程序,点击连接: jconsole
点击MBean,就能看到hazelcast相关的metrix了。 MBean

Metrix相关的指标,可以参考:https://docs.hazelcast.com/hazelcast/5.1/list-of-metrics

3.3 除了Metrix,我们还可以看别的指标

除了Metrics,我们还可以看IMap, ISet这些具体的数据,这块相关的就需要手动开启了,Hazelcast官网把这块内容叫JMX监控,它并不从属于Metrics的内容。
参考:https://docs.hazelcast.com/hazelcast/5.1/maintain-cluster/monitoring#monitoring-with-jmx

手动开启:<hz:property name="hazelcast.jmx">true</hz:property>

    <hz:hazelcast id="instance">
        <hz:config>
            <hz:network port="5701" port-auto-increment="true">
                ...
            </hz:network>

            <hz:properties>
                <hz:property name="hazelcast.jmx">true</hz:property>
            </hz:properties>
        </hz:config>
    </hz:hazelcast>
在开启后,可以在jconsole中看到除了之前的Metrics,还多了一项IMap了: JMX monitor

一般像IMap的size, 或者是values, entrySet, 甚至做clear操作,都不能在Metrics指标下做,Metrics更像是纯监控的指标,而IMap这个,可以通过JMX查看数据以及操作数据。


IMap

3.4 通过Java代码查看JMX

前提是先运行另一个Hazelcast客户端,开启hazelcast.jmx,然后set下JMX Port: -Dcom.sun.management.jmxremote.port=9988,在启动的时候先put一条数据:

    @PostConstruct
    public void init() {
        IMap iMap = hazelcastInstance.getMap("testMap");
        iMap.put("user1", "value1");
    }

然后是JMX代码:

public class ConnectToJMXBeans {
    private static final int PORT = 9988;

    public static void main(String[] args) throws Exception {
        // parameters for connecting to the JMX Service
        String hostname = InetAddress.getLocalHost().getHostName();
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://" + hostname + ":" + PORT
                + "/jndi/rmi://" + hostname + ":" + PORT + "/jmxrmi");

        // connect to the JMX Service
        JMXConnector jmxConnector = JMXConnectorFactory.connect(url, null);
        MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();

        // See all Beans available
        Set<ObjectName> names = new TreeSet<>(mbsc.queryNames(null, null));
        names.stream().forEach(System.out::println);

        // Metrix
        ObjectName metrics = names.stream().filter(name -> name.toString().contains("testMap") && name.toString().contains("type=Metrics")).findAny().get();
        System.out.println("putCount: " + mbsc.getAttribute(metrics, "putCount"));

        // IMap
        ObjectName imap = names.stream().filter(name -> name.toString().contains("testMap") && name.toString().contains("type=IMap")).findAny().get();
        System.out.println("size " + mbsc.getAttribute(imap, "size"));
    }
}

4. 通过hz-cli查看数据

下载页面:https://hazelcast.com/open-source-projects/downloads/archives/#hazelcast-platform
下载hazelcast-5.1.1.tar.gz,解压,bin目录下面,有个hz-cli,可以通过这个客户端加入到Hazelcast网络中。

在bin目录下输入:

./hz-cli console

通过help命令可以查看帮助: hz-cli console

示例:
首先默认进入的是default namespace。
而我们的代码中写的是:IMap iMap = hazelcastInstance.getMap("testMap");
所以可以通过ns + namespace的方式,切到testMap目录下。
然后就可以通过IMap的命令拿到数据啦:

IMap 示例 关于IMap的命令,help讲的非常非常详细: IMap Command
上一篇下一篇

猜你喜欢

热点阅读