美文网首页
【Hazelcast学习】Management Center、R

【Hazelcast学习】Management Center、R

作者: 伊丽莎白2015 | 来源:发表于2022-05-15 23:52 被阅读0次

    如果想要查看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

    相关文章

      网友评论

          本文标题:【Hazelcast学习】Management Center、R

          本文链接:https://www.haomeiwen.com/subject/agwvurtx.html