fb
WSO2 5 min

Hoe controleer je de serverstatus van WSO2-producten?

Luis_Bustamante.jpg
Luis Bustamante
Integration Consultant
Running WSO2
Scroll

Ongeacht welk WSO2-product je gebruikt, het is belangrijk om voor het product dat je gebruikt te weten wat de huidige serverstatus is, zodat je de juiste processen in gang kunt zetten. Moet je WSO2 opstarten, uitschakelen, of laten runnen omdat alles prima loopt? Dat kun je handmatig controleren door in te loggen in de carbon console, maar als het automatisch moet runnen, dan is dit is dit geen zinvolle optie meer. In deze blog leg ik uit hoe je de serverstatus van WSO2 kunt controleren zonder in te loggen.

Intern staat de WSO2-server altijd op één van de volgende statussen: STARTING, RUNNING, IN_MAINTENANCE, RESTARTING of SHUTTING_DOWN. Ik neem aan dat deze allemaal voor zich spreken, dus in de rest van deze blog richt ik me op het de procedure om de huidige status van een geïnstalleerd WSO2-product te achterhalen.

De twee belangrijkste methodes om de status van de WSO2-server te weten te komen zijn: het aanroepen van de SOAP API’s en daarnaast door het met de JMX-RMI via de MBean te achterhalen.

Banner-WSO2-Community-1-14

Statuscontrole via de SOAP API

WSO2 bevat een uitgebreide lijst met admin services. De lijst is in te zien als je de server opstart met de ingeschakelde OSGI-console door ./wso2server.sh –DosgiConsole te gebruiken en dan de opdracht osgi> listAdminServices in de console uit te voeren.

Vanuit deze lijst geeft de service ‘ServerAdmin’ de statusinformatie over de server. Deze informatie is ook via de SOAP beschikbaar. Dus als de carbon.xml <HideAdminServiceWSDLs> flag op ‘false’ staat, kan de wsdl van de service opgehaald worden via deze URL: https://[WSO2-HOST]:9443/services/ServerAdmin?wsdl 

De WSDL bevat een lijst met operaties waar je er twee van kunt gebruiken om de status te controleren. De namen van de operaties zijn “getServerStatus” en “isAlive”. Ze worden allebei naar het server eindpunt op https://[WSO2-HOST]:9443/services/ServerAdmin gepost als SOAP-requests.

Hieronder beschrijf ik de aanvragen van deze operaties en voorbeelden van de antwoorden die server kan geven:

isAlive Operatie

Het gebruik van deze operatie vereist geen parameters en geeft een binaire true/false terug, afhankelijk van of de WSO2 server ‘live’ is. Dit is handig voor liveness probing.

isAlive aanvraag:

<soap:Envelope xmlns_soap="http://www.w3.org/2003/05/soap-envelope" xmlns_xsd="http://org.apache.axis2/xsd">
   <soap:Header/>
   <soap:Body>
      <xsd:isAlive/>
   </soap:Body>
</soap:Envelope>

Voorbeeld van een isAlive respons:

<soapenv:Envelope xmlns_soapenv="http://www.w3.org/2003/05/soap-envelope">   <soapenv:Body> 
 

 
      <ns:isAliveResponse xmlns_ns="http://org.apache.axis2/xsd">
 <ns:return>true</ns:return>
 </ns:isAliveResponse>
 </soapenv:Body>
 </soapenv:Envelope>

getServerStatus operatie

Deze operatie geeft één van de eerder genoemde interne WSO2 statussen terug. Dit is vooral handig als je processen in gang wilt zetten op een specifiek punt in de levenscyclus van de instance. Er zijn ook nu geen aanvraagparameters nodig.

getServerStatus aanvraag:

<soap:Envelope xmlns_soap=”http://www.w3.org/2003/05/soap-envelope” xmlns_xsd=”http://org.apache.axis2/xsd”>
 

   <soap:Header/>
<soap:Body>
<xsd:getServerStatus/>
</soap:Body>
</soap:Envelope>

Voorbeeld van een getServerStatus respons:

<soapenv:Envelope xmlns_soapenv="http://www.w3.org/2003/05/soap-envelope">   <soapenv:Body> 
 

 
      <ns:getServerStatusResponse xmlns_ns="http://org.apache.axis2/xsd">
 <ns:return>RUNNING</ns:return>
 </ns:getServerStatusResponse>
 </soapenv:Body>
 </soapenv:Envelope>

Als je curl wilt gebruiken om de aanvraag naar de server te versturen, kun je de aanvraag in het XML-bestand ‘getServerStatus.xml’ opslaan en deze opdracht uitvoeren:

curl -k -H "Content-Type: application/soap+xml;charset=UTF-8;"  -H "SOAPAction:urn:getServerStatus " --basic -u "user:password" --data @getServerStatus.xml https://host:9443/services/ServerAdmin

Statuscontrole via JMX-RMI

Als het controleren van de status via SOAP-services geen optie is, dan is er een andere standaardmogelijkheid om de status direct vanaf de MBean te controleren. Als het draaiende java-proces ‘org.wso2.carbon.bootstrap.Bootstrap’ is de MBean ServerAdmin blootgesteld. Deze MBean bevat de attributen “Alive” en “ServerStatus” die dezelfde informatie geven als de SOAP-aanvragen. De attributen kunnen handmatig bekeken worden door de Java Monitoring Console te gebruiken, die gemakkelijk te openen is met deze opdracht: $jconsole, zoals in de volgende screenshots te zien is.

Alive attribute:

Hier zie je “Alive = true” vermeld staan bij de ‘attribute value’:

Alive Attribute-WSO2.png

ServerStatus attribute:

Hier is als voorbeeld het attribuut “ServerStatus = RUNNING” te zien:

Servers Status Attribute - WSO2.png

Als de server attributen echter met een code opgehaald moeten worden, zal er een verbinding met het process MBean opgezet worden via ‘JMX remote method invocation’ (RMI).

De volgende code laat zien hoe je deze verbinding met java kunt maken:

import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;   

… 

String JMX_SERVICE_URL = "service:jmx:rmi://[host]:11111/jndi/rmi://[host]:9999/jmxrmi"; 

//Provide credentials required by server for user authentication            HashMap   environment = new HashMap();
String[]  credentials = new String[] {"user", "password"};            environment.put (JMXConnector.CREDENTIALS, credentials); 

//Create an RMI connection Client and connect to RMI Server            JMXServiceURL url = new JMXServiceURL(JMX_SERVICE_URL);            JMXConnector jmxc = JMXConnectorFactory.connect(url, environment); 

//Get an MBeanServerConnection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); 

//Construct the ObjectName for the Carbon MBean
ObjectName mBeanName = new ObjectName("org.wso2.carbon:type=ServerAdmin");            ServerAdminMBean mBeanProxy = JMX.newMBeanProxy(mbsc, mBeanName,ServerAdminMBean.class); 

System.out.println("Status: " + mBeanProxy.getServerStatus());
System.out.println("is alive: " + mBeanProxy.isAlive()); 

jmxc.close();

De volledige code en een gecompileerde versie zijn op GitHub via https://github.com/luisguillo/wso2-server-probe beschikbaar.

Conclusie

Applicaties op basis van WSO2-carbon beiden verschillende mogelijkheden om de te controleren of de applicatie in werking is, waaronder de SOAP service en JMX MBean. Omdat het een java-webapplicatie zijn er ook nog andere mogelijkheden, maar het zou kunnen dat je daarmee niet de huidige WSO2 serverstatus die we in deze blog bespreken te pakken krijgt.