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 |
| |
IssueReport |
| |
StatusChangeReport |
| |
StriimMBean |
| 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.