Extension de mesure des demandes

Certaines applications peuvent avoir besoin de points d'instrumentation supplémentaires dans le flux des mesures de demandes. Par exemple, vous pouvez chercher à comprendre le temps de réponse à un système dorsal unique tel qu'il est illustré par le graphique d'appel suivant.

HTTP request /trade/scenario      ------------------------------> 172 ms
Servlet/trade/scenario          --------------------------------> 130 ms
Servlet/call to unique back-end system -------------------------->38 ms

Request metrics utilise un "jeton" or "corrélateur" lors du traçage du flux de chaque demande à travers le système. Pour créer le graphique d'appel ci-dessus avec cette instrumentation, connectez-vous au flux de la demande et exécutez l'API ARM (Application Response Measurement) appropriée pour permettre à l'agent ARM de collecter les données et au fournisseur ARM de créer le graphique d'appel.

Request metrics expose l'API Correlation Service (service de corr‚lation) afin de permettre un branchement sur le flux de la demande. L'exemple suivant présente l'un des flux typiques auquel une application instrumentée doit se conformer pour se connecter à un flux de mesures de demandes :
  1. Créez un objet ArmTransaction qui exécute différents appels d'instrumentation tels qu'un démarrage ou un arrêt. L'encapsuleur Arm de service de corrélation (PmiRmArmTx) encapsule cet objet avant qu'il ne soit inséré dans le flux des mesures de demandes.
  2. Remplissez l'objet ArmTransaction avec un objet ArmCorrelator appropriée. Cet objet encapsule les octets effectifs du corrélateur ARM.
  3. Exécutez la méthode start sur l'objet ArmTransaction, en marquant le début de la méthode instrumentée.
  4. Instanciez un objet PmiRmArmTx en utilisant la méthode statique sur la classe PmiRmArmTxFactory, puis peuplez l'objet PmiRmArmTx avec l'objet ArmTransaction ci-dessus.
  5. Transmettez l'objet PmiRmArmTx ci-dessus au service de corrélation en l'envoyant dans la pile du service de corrélation en utilisant sur l'objet PmiRmArmStack les méthodes présentées.
  6. Effectuez les tâches de la méthode en cours d'instrumentation. Le service de corrélation s'occupe de réaliser le flux de l'objet ArmTransaction nécessaire, ce qui génère les résultats présentés dans la vue du graphique d'appel des temps de transaction.
  7. A la fin de l'exécution de la méthode instrumentée, accédez à l'objet PmiRmArmTx à partir du service de corrélation en utilisant les méthodes présentées sur la classe PmiRmArmStack, accédez à l'objet ArmTransaction et réalisez un arrêt pour indiquez le fin de la transaction.

Consultez ces informations lors de l'utilisation de l'API ARM avec le service de corrélation dans le cadre d'une instrumentation de servlet.

Les fichiers binaires arm40 doivent être installés conformément aux instructions d'installation fournies par le fournisseur de l'implémentation. Une fois l'installation terminée, redémarrez le serveur. Les enregistrements de trace sont alors générés dans le fichier SystemOut.log, indiquant l'instanciation de l'implémentation ARM appropriée. L'exemple suivant illustre l'un des flux de travaux classiques lors de l'utilisation de l'API ARM conjointement au service de corrélation dans le cadre d'une instrumentation de servlet.

public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

PmiRmArmTx artrax =
// The factory detects the currently active ARM implementation (specified by user through 
// admin console) and instantiates an appropriate ARM wrapper object

    PmiRmArmTxFactory.createPmiRmArmTx();
ArmTransaction at = newArmTx();
if (null == at)
            out.println("Got a null ArmTransaction");
ArmCorrelator arc = newArmCorr();
at.start(arc);
try {
	artrax.setArmTransaction(at);
	PmiRmArmStack.pushTransaction(artrax);
} catch (Exception e) {
	System.out.println("Caught 1 exception" + e);
}

PmiRmArmTx atxwrp = PmiRmArmStack.peekTransaction();

if (atxwrp == null)
	out.println("Armtransaction is null");

//getArmType
try {
	out.println("ARMTYPE is"+ PmiRmArmTx.getARMType());
} catch (Exception e) {
	out.println(e);
}
//getting correlator bytes
try {
	if (null == atxwrp.getCorrelatorBytes())
		out.println("Got a null Correlator");
} catch (Exception e) {
	out.println(e);
}

//blocked/unblocked
long blkid = 0;
try {
	out.println(blkid = atxwrp.blocked());
} catch (Exception e) {
	out.println(e);
}

try {
	out.println(atxwrp.unblocked(blkid));
} catch (Exception e) {
	out.println(e);
}
try {
	atxwrp = PmiRmArmStack.popTransaction();
	ArmTransaction art = (ArmTransaction) atxwrp.getArmTransaction();
	art.stop(ArmConstants.STATUS_GOOD);
} catch (Exception e) {
	out.println(e);
}

}



private ArmTransaction newArmTx() {

	ArmTransactionFactory txFactory = null;
try {
	String sWasName = "WebSphere";
	String appName = "t23xpimage/t23xpimage/server1";
	String sCellName = appName.substring(0, appName.indexOf("/"));
	String sNodeInstance =
			appName.substring(appName.indexOf("/") + 1, appName.length());
	sNodeInstance = sNodeInstance.replace('/', '.');
	txFactory =	(ArmTransactionFactory)                   
	newObjectInstance("org.opengroup.arm40.sdk.ArmTransactionFactoryImpl");
	ArmApplication app = null; // 149297
	ArmApplicationDefinition appDef = null; //LIDB3207
	appDef =				txFactory.newArmApplicationDefinition(sWasName, null, null);
	app = txFactory.newArmApplication(appDef, sCellName, sNodeInstance, null);

	String[] idnames = { "request_type" };
	String[] idvalues = { "URI" };
	String[] ctxnames = { "URI" };
	ArmIdentityPropertiesTransaction props =
			txFactory.newArmIdentityPropertiesTransaction(
					idnames,
					idvalues,
					ctxnames,
					null);
	ArmTransactionDefinition atd =
				txFactory.newArmTransactionDefinition(
					appDef,
					"URI",
					props,
					(ArmID) null);
	ArmTransaction at = txFactory.newArmTransaction(app, atd);
	return at;
} catch (Exception e) {
	System.out.println(e);
	return null;
}

}

private ArmCorrelator newArmCorr() {

	ArmTransactionFactory txFactory = null;
try {
	String sWasName = "WebSphere";
	String appName = "t23xpimage/t23xpimage/server1";
	txFactory =
	(ArmTransactionFactory) newObjectInstance("org.opengroup.arm40.sdk.ArmTransactionFactoryImpl");

	ArmCorrelator arc =txFactory.newArmCorrelator(
					PmiRmArmStack.peekTransaction().getCorrelatorBytes());
	return arc;
} catch (Exception e) {
	System.out.println(e);
	return null;
}

}
Remarque : Cette rubrique fait référence à un ou plusieurs des fichiers journaux de serveur d'applications. Il est recommandé de configurer le serveur de telle sorte qu'il utilise l'infrastructure de journalisation et de trace HPEL (High Performance Extensible Logging) à la place des fichiers SystemOut.log, SystemErr.log, trace.log et activity.log sur les systèmes distribués et IBM® i. Vous pouvez également utiliser HPEL conjointement avec vos fonctions de journalisation z/OS natives. Si vous utilisez l'infrastructure HPEL, vous pouvez accéder à toutes les informations de journalisation et de trace en utilisant l'outil de ligne de commande LogViewer à partir de votre répertoire bin de profil de serveur. Pour plus d'informations sur l'utilisation de HPEL, voir les informations sur l'utilisation de HPEL en vue du traitement des incidents liés aux applications.

Il existe plusieurs procédures d'utilisation de l'objet PmiRmArmStack. Dans le scénario présenté dans cet exemple, du code accède à un objet PmiRmArmTx figurant dans la pile, extrait le corrélateur et appellent les méthodes blocked et unblocked. Il s'agit d'une scénario classique dans lequel un corrélateur est envoyé avec un protocole non pris en charge. Dans ce scénario, la transaction Arm figure déjà dans la pile.

1			PmiRmArmTx artrax =
2				PmiRmArmStack.peekTransaction();
3			if( artrax != null )
4	                        {
5	                                    try
6	                                    {
7				    byte[] cbytes = artrax.getCorrelatorBytes();
8	                                        stuffBytesIntoOutboundMessage( msg, cbytes);
9	                                         long blockedId = 0;
10	                                        try
11	                                        {
12	                                           blockedId = artrax.blocked();
13	                                         }
14	                                         catch( NoSuchMethodException nsme )
15	                                         {
16	                                             // must not be running ARM4 or eWLM
17	                                         }
18	                                           sendMsg( msg );
19	                                        try
20	                                        {
21	                                           artrax.blocked( blockedId );
22	                                         }
23	                                         catch( NoSuchMethodException nsme )
24	                                         {
25	                                             // must not be running ARM4 or eWLM
26	                                         }
27	                    
28	                                     }
29	                                     catch( Exception e )
30	                                     {
31	                                        report a problem;
32	                                     }
33			}
 

Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cprf_corrservinterface
Nom du fichier : cprf_corrservinterface.html