Hazelcast Headless Monitoring ;)

Hazelcast Headless Monitoring ;)

Since it’s Halloween I thought I would offer up some useful tips on how to perform JMX monitoring for those DevOps types that don’t want to log into a web application or use a GUI of any sort, headless even!

Enable JMX on the Hazelcast Management Center

Please refer to the official documentation here: Clustered JMX via Management Center

This is done by adding startup parameters to the startup file:

{hazelcast_home}/mancenter/startMancenter.sh
    java -Dhazelcast.mc.jmx.enabled=true -Dhazelcast.mc.jmx.port=8081 -jar mancenter-3.7.war

You can test it using jconsole which is included with most java distributions. For a connection just use IP:PORT as identified by the port above and the ip address of the server hosting ManCenter.

JMXTerm

Now head over to JMXTerm to get jmxterm-{version}-uber.jar file which all of the following examples are based on.

In this example we can list all the nodes for a given cluster:

One very nice feature of JMXTerm is how it will list bean for a given domain. A domain is just the name of the MBean so in our case it is will be in the form of ManagementCenter[nameofcluster]. In my case I am using the default cluster name of dev

Now create a file named getMemberList.jmx which contains the following:

beans -d ManagementCenter[dev]

Now you can create a shell file that contains the following:

java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:8081 -v silent -n < getMemberList.jmx | grep Members

And this will yield a dynamic way of listing all Hazelcast members for a given cluster:

$./listMembers.sh ManagementCenter[dev]:name="192.168.1.184:5701",type=Members ManagementCenter[dev]:name="192.168.1.184:5702",type=Members ManagementCenter[dev]:name="192.168.1.184:5703",type=Members

Now we can use the output from this script to create the input for future scripts. In the following example we are going to query every member for HeapFreeMemory:

./listMembers.sh | awk -F\" {'print "get -d ManagementCenter[dev] -b name=" "\""$2"\"" ",type=Members HeapFreeMemory"'} > getHeapFreeMemory.jmx

Now we just pass getHeapFreeMemory.jmx into jmxterm:

java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:8081 -v silent -n < getHeapFreeMemory.jmx

And we get the available heap memory from each member of our cluster:

HeapFreeMemory = 20727296;

HeapFreeMemory = 20746592;

HeapFreeMemory = 20749472;

And here is an example of listing the Map sizes for a pair of maps:

get -d ManagementCenter[dev] -b name=Customers,type=Maps -s OwnedEntryCount
    
    get -d ManagementCenter[dev] -b name=Orders,type=Maps -s OwnedEntryCount

So now that we can query the cluster and distributed objects maybe you want to send this via email:

Create a memberList.txt file from our jmxterm script:

./listMembers.sh > memberList.txt

Now uuencode and sendmail the file to yourself:

uuencode ./memberList.txt | sendmail -s "current member list" [email protected]

There is a wealth of information available via the Hazelcast Management Center and when paired with JMXTerm DevOps becomes much easier!