mercredi 17 mars 2010
L’objectif de cette fonctionnalité est de tracer en log le passage d’un flux applicatif dans une architecture n tiers. Cela a pour intérêt de pourvoir identifier unitairement en cas de problème le flux client quelque soit les sauts de protocole ou d’instance.
Cette option mise en place, Weblogic injecte un identifiant Œ sur une première requête (dans ou hors Weblogic) et propage cet identifiant sur l’ensemble des protocoles traversés (HTTP/RMI/JMS/JDBC/Transaction).
On peut récupérer cet identifiant :
ü En le traçant dans son propre log (custom)
ü En utilisant les aspects Weblogic pour notifier l’événement sans modification de code ‘
La mise en place de ce log nécessite un paramétrage dans le domaine et l’ajout d’un fichier de configuration dans l’application à tracer (dans le cas de l’utilisation d’aspect).
L’exemple implémente un EAR qui sur requêtage HTTP propage une chaine de caractère en passant par une Servlet, un EJB Session, un post dans une Queue puis une récupération par un MDB.
Pour le custom log, l’identifiant est remonté dans la sortie standard sur l’appel de la Servlet (doGet), de l’EJB (message) et du MDB (onMessage).
Pour le log par aspect, l’événement est remonté après exécution de la Servlet, après l’appel de la méthode, après l’envoi du message sur la queue et après réception du message sur le MDB. La notification est faite dans le file store Ž du module de diagnostique sur la partie EventsDataArchive. L’information pourra être extraite dans un fichier XML pour exploitation et analyse.
CONTEXT
L’activation de l’option de contexte permet de mettre en place dans Weblogic l’injection de l’identifiant et de pouvoir récupérer celui-ci dans son propre code via l’interface suivante :
import weblogic.diagnostics.context.DiagnosticContextHelper;
DiagnosticContextHelper.getContextId()
Via la console d’administration Weblogic ou un scripte WLST, effectuer les actions suivantes sur le domaine (l’ensemble des instances mises en jeux).
· Activer l’option Diagnostic Context.
Diagnostic à Context à ${server name} à Enable
Activation de l’exemple et résultat dans les traces de la sortie standard :
Servlet
protected void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String leMessageServlet = DiagnosticContextHelper.getContextId() + " : SERVLET message={" + request.getParameter("message") + "} - instance={" + System.getProperty("weblogic.Name") + "}";
System.out.println( leMessageServlet );
EJB
public String message(String message) {
String leMessageEjb = DiagnosticContextHelper.getContextId() + " : EJB message={" + message + "} - instance={" + System.getProperty("weblogic.Name") + "}";
System.out.println(leMessageEjb);
MDB
public void onMessage(javax.jms.Message message) {
String leMessageMdb = DiagnosticContextHelper.getContextId() + " : MDB message={" + message + "} - instance={" + System.getProperty("weblogic.Name") + "}";
System.out.println(leMessageMdb);
Log managed1 (côté Servlet)
<24 nov. 2009 11 h 03 VET>
<24 nov. 2009 11 h 03 VET>
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : SERVLET message={HELLO} - instance={managed1}
Log managed3 (côté EJB/JMS)
<24 nov. 2009 11 h 03 VET>
<24 nov. 2009 11 h 03 VET>
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : EJB message={HELLO-71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f} - instance={managed3}
71bc061dacce84fe:61092fcb:12526d2df38:-8000-000000000000000f : MDB message={TextMessage[ID:<193523.1259076896515.0>, HELLO-71bc061dacce84fe:61092fcb...]} - instance={managed3}
APPLICATION
Ajouter dans l’EAR/WAR/JAR le fichier suivant META-INF/weblogic-diagnostics.xml (le plus simple étant dans l’EAR)
xml version='1.0' encoding='UTF-8'?>
<wldf-resource xmlns="http://www.bea.com/ns/weblogic/weblogic-diagnostics" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-diagnostics http://www.bea.com/ns/weblogic/weblogic-diagnostics/1.1/weblogic-diagnostics.xsd">
<name>weblogic-diagnosticsname>
<instrumentation>
<enabled>trueenabled>
<wldf-instrumentation-monitor>
<name>Servlet_Before_Servicename>
<enabled>trueenabled>
<action>TraceActionaction>
wldf-instrumentation-monitor>
<wldf-instrumentation-monitor>
<name>EJB_After_SessionEjbMethodsname>
<enabled>trueenabled>
<action>TraceActionaction>
wldf-instrumentation-monitor>
<wldf-instrumentation-monitor>
<name>JMS_After_MessageSentname>
<enabled>trueenabled>
<action>TraceActionaction>
wldf-instrumentation-monitor>
<wldf-instrumentation-monitor>
<name>MDB_After_MessageReceivedname>
<enabled>trueenabled>
<action>TraceActionaction>
wldf-instrumentation-monitor>
instrumentation>
wldf-resource>
DOMAINE
Via la console d’administration Weblogic ou un scripte WLST, effectuer les actions suivantes sur le domaine.
· Activer l’option Diagnostic Context (sur toutes les instances).
Diagnostic à Context à ${server name} à Enable
· Créer un Diagnostic Modules
Diagnostic à Diagnostic Modules à New à ${module name}
· Targeter le sur les instances
Diagnostic à Diagnostic Modules à ${module name} à Targets
· Créer une entrée DyeInjection dans Instrumentation
Diagnostic à Diagnostic Modules à ${module name} à Instrumentation à Add à DyeInjection
· Redamarrer les instances, déployer l’application est activer la pour activer les composants JEE tracés.
· Regarder le résultat dans le filestore EventsDataArchive
Diagnostic à Log Files à EventsDataArchive à View
· On peut observer le même contexte ID sur les différents appels qui correspond à une même activation (flux)
EXTRACTION
Les données du file store peuvent être visualisées via la console, mais cette méthode est peut pratique et rend impossible l’agrégation sur des domaines et instances différents.
Une commande WLST permet d’extraire les données du File Store issue de la partie EventDataArchive (il vous faut au préalable arrêter l’instance associée).
exportDiagnosticData(storeDir="${domaine_home}/servers/${server_name}/data/store/diagnostics",logicalName="EventsDataArchive", exportFileName="C:/Temp/server1-events.xml")
Exemple avec un filter sur un ID de context
exportDiagnosticData(storeDir="${domaine_home}/servers/${server_name}/data/store/diagnostics",
logicalName="EventsDataArchive", exportFileName="events.xml",
query="CONTEXTID='583c10bfdbd326ba:58f87d21:1126b53f6ec:-7ff3-0000000000000c2a'")
Le fichier resultant
Inscription à :
Publier les commentaires (Atom)
AUTEUR
- Jean FRANCOIS
- Carrières Sur Sein, Yvelines, France
- Consultant Oracle (Ancien consultant BEA depuis 2001), je m’occupe des expertises sur les produits Oracle : SOCLE (Weblogic, Coherence, JRockit) SOA (Service Bus, SOA Suite, BPM)
MON CV
LABEL 3D
Blogumulus by Roy Tanck and Amanda Fazani
LABEL CLOUD
AUTRES BLOG
-
Alexandre Vasseur ex (BEA | Oracle FR / Esper)
James Bayer (BEA | Oracle US)
Maxence Button ex (BEA | Oracle FR)
Marc Kelderman
Edwin Biemond (Oracle ACE)
Mark Smith (Oracle)
Chris Tomkins (Oracle)
0 commentaires:
Enregistrer un commentaire