Skip to main content

Monitoring using JMX

Striim may be integrated with your existing monitoring infrastructure using JMX.

To enable this, first follow the instructions in Enabling monitoring via JMX. Health object events will then be exposed as Mbeans under the domain com.striim.metrics. The port is 8855.

The Mbeans will include the following types:

Mbean type

Mbean name format

notes

HealthReport

<component type>.<component name>

IssueReport

<component name>

StatusChangeReport

<component name>.<timestamp>

StriimMBean

<node name>.<entity name>

the entity name may be a component name, an application name, or, when no name is defined for the entity, its UUID

Sample client:

package com.striimjmxclnt;
 
import javax.management.*;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
 
public class ClientMain{
/*
   Just get the common MBeanInfo of the attributes exposed
 */
    public static void main(String[] args) {
 
        try
        {
            JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:8855/jmxrmi");
            JMXConnector connector = JMXConnectorFactory.connect(target);
            MBeanServerConnection remote = connector.getMBeanServerConnection();
 
 
            //Monitor the ROLLUP exceptionsStream
            ObjectName bean = new 
ObjectName("com.striim.metrics:type=StriimMBean,name=ROLLUP.exceptionsStream");
 
            MBeanInfo info = remote.getMBeanInfo(bean);
            MBeanAttributeInfo[] attributes = info.getAttributes();
            System.out.println("======Rollup ExceptionStream======");
            for (MBeanAttributeInfo attr : attributes)
            {
 
                System.out.println(attr.getDescription() + " " + 
remote.getAttribute(bean,attr.getName()));
            }
 
            //Monitor the Servers for Macro details individual.
            ObjectName Serverbean = new 
ObjectName("com.striim.metrics:type=StriimMBean,name=ROLLUP.MonitoringCQ");
            MBeanInfo Serverinfo = remote.getMBeanInfo(Serverbean);
            MBeanAttributeInfo[] Serverattributes = info.getAttributes();
            System.out.println("==== Server Macro info=====");
            for (MBeanAttributeInfo attr : attributes)
            {
 
                System.out.println(attr.getDescription() + " " + 
remote.getAttribute(bean,attr.getName()));
            }
 
            //Monitor app specific data.
            ObjectName Appbean = new 
ObjectName("com.striim.metrics:type=StriimMBean,name=ROLLUP.liveStream");
            MBeanInfo Appinfo = remote.getMBeanInfo(bean);
            MBeanAttributeInfo[] Appattributes = info.getAttributes();
            System.out.println("====== App specific Rollup===");
            for (MBeanAttributeInfo attr : Appattributes)
            {
 
                System.out.println(attr.getDescription() + " " + 
remote.getAttribute(bean,attr.getName()));
            }
  
            connector.close();
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            System.exit(0);
        }
    }
 
}

In a multi-server cluster, specify all the server addresses:

JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.0.2.1:8855/jmxrmi,
                                          service:jmx:rmi:///jndi/rmi://192.0.2.2:8855/jmxrmi,
                                          service:jmx:rmi:///jndi/rmi://192.0.2.3:8855/jmxrmi");

The Global.MonitoringProcessApp will run on the server that starts first. If that server goes down, Striim will run the app on one of the remaining servers, and the app will remain on that server when its original server comes back online.