Co to je WLDF a jak mi to pomůže

WLDF pomáhá odpovědět na záludné otázky které dávají lidé z provozu vývojářům poté co se spustí aplikace do produkce. Otázky jako „proč je ta aplikace tak pomalá?“, „proč potřebuje tolik paměti?“ nebo „co se v aplikaci vlastně děje?“ atd.

WLDF to umožňuje pomocí aplikačních sledovačů, které se připojí buď pomocí JMX rozhraní, AOP do běžícího kódu nebo filtrováním log souborů. Náhledem do aktuálního stavu konfigurace aplikace, jejich aktuálních dat a historického vývoje klíčových nastavených parametrů je možné vědět o aplikaci více informací. Takže budeme moct lépe odpovědět na otázky lidí z provozu.

WLDF komponenty

WLDF runtime část se skládá v podstatě ze dvou hlavních komponent: sledovače (watchers) a notifikace (notification). Sledovače sledují chod severu z kolektoru podle nastavených pravidel a posílají notifikace.

Sledování se dělá pomocí kolektorů (collectors) nahlížejících na log soubory, pomocí JMX rozhraní nebo pomocí vloženého kódu do aplikace. Jestli je nějaká z podmínek sledovače splněna, tak se posílá notifikace buď pomocí E-mailu, JMS, JMX a další, nebo se udělá diagnostický náhled. Data se podle potřeby ukládají do archivu pomocí Archivátoru (Archiver), který je ukládá do souborů nebo databáze.

WLDFarch

WLDF má ještě navíc část pro analýzu výsledků (Data Accessor) a vytváření diagnostických náhledů (Diagnostic image capture) na konfiguraci serveru.

WLDF1WLDF2

Všechno se to konfiguruje ve WebLogic konzole a ukládá do konfigurace serveru. Pro přístup k historickým náhledům je potřeba doinstalovat rozšíření konzole. Popis viz dále.

Sledování chodu serveru

Ke sledování chodu se používají Sledovače (Watches) v oddělených vláknech. Ty fungují i v případě, že je Vaše aplikace přetížena. Sledovače můžou sledovat jak JMX data, log soubory nebo instrumentační data.

Vlastnosti sledovačů se nastavují pomocí podmínek za kterých se spustí nějaká notifikace.

Příklady podmínek (pro jednoduchost jako fragment XML, i když nastavování je ve WEB konzole):

  • JMX podmínka, která bude splněná, když bude na serveru otevřeno 10 nebo více soketů:
    <watch> 
<name>myWatch</name>
<enabled>true</enabled>
<rule-type>Harvester</rule-type>
<rule-expression>${com.bea:Name=myserver,Type=ServerRuntime//SocketsOpenedTotalCount} &gt;= 10</rule-expression>
<alarm-type>AutomaticReset</alarm-type>
<alarm-reset-period>60000</alarm-reset-period>
<notification>myMailNotif,myJMXNotif,mySNMPNotif</notification>
</watch>
  • Nebo podmínka pro hledání log souboru a hledání chyby BEA-000360 v něm:
    <watch> 
<name>myLogWatch</name>
<rule-type>Log</rule-type>
<rule-expression>MSGID='BEA-000360'</rule-expression>
<severity>Info</severity>
<notification>myMailNotif2</notification>
</watch>
  • Další podmínka pro sledování instrumentovaného kódu a aplikačních dat v něm:
  <watch>
<name>myInstWatch</name>
<enabled>true</enabled>
<rule-type>EventData</rule-type>
<rule-expression>(PAYLOAD &gt; 100000000) AND (MONITOR = 'Servlet_Around_Service')</rule-expression>
<alarm-type xsi:nil="true"></alarm-type>
<notification>mySMTPNotification</notification>
</watch>

Posílaní notifikací

Když je splněna podmínka v konfiguraci sledovače, tak se spustí notifikace v něm nadefinovaná. Notifikace může být například zavoláni JMX, poslani zprávy do JMS, poslání emailu, vytvoření SNMP události nebo vytvoření diagnostického náhledu.

Příklad E-mail notifikace:

    <smtp-notification> 
<name>myMailNotif2</name>
<enabled>true</enabled>
<mail-session-jndi-name>myMailSession</mail-session-jndi-name>
<subject>WebLogic diagnostic message</subject>
<recipient>username@emailservice.com</recipient>
</smtp-notification>

WLDF-QL jazyk pro psaní podmínek monitorování serveru

WLDF-QL (Query language) je jednoduchý jazyk podobný SQL pro popis podmínek WLF frameworku. Obsahuje operátory, literály a proměnné. Mezi operátory patří klasické AND, OR, NOT, (, ), >, <, LIKE, IN atd.

Literály jsou jakékoli konstanty. Řetězce jsou v uvozovkách. Znak „_“ znamená jakýkoli řetězec (wildcard) a pomocí znaku „\“ se vkládají speciální znaky. Reference na Java typy se dá také použít.

Proměnné představují jak ty které si v kódu můžete vytvořit samy a taky ty, které reprezentují data z aplikačního servru a jsou naplňovány dynamicky. Mezi globální proměnné naplňované serverem patří například

  • SERVER – jméno serveru
  • SUBSYSTEM – subsystém serveru, jako JMS, JDBC atd
  • THRED – jméno thredu (vlákna) ve kterém kód běží
  • USERID – ID uživatele
  • a další


Pro instrumentation jsou k dispozici další proměnné jako:

  • CLASSNAME – jméno třídy jointpointu
  • RETVAT – návratová hodnota jointpointu
  • LINENUM – číslo řádku ve zdrojáku který se právě sleduje
  • a další

Pro zjednodušení práce s WLDF je možné využít taky knihoven monitorů a akcí. Ty jsou jak pro oblast serveru i aplikace. Například monitor EJB_Before_EntityEjbSemanticMethods je spuštěn před všemy set* a get* metodami entity beanů.


Pro kompletní popis viz WLDF-QL referenční manuál: http://e-docs.bea.com/wls/docs92/wldf_configuring/appendix_query.html


Mbean server harvester sledovač

MBean harvester umožňuje sledovat všechny Mbean typy, instance a atributy mbeanů označené jako harvestovatelné a běžící na tom samém serveru. Seznam všech těchto beanů poskytuje WLDFHarvesterRuntimeMBean který je součástí WLDF.

Pro konfigurace harvesteru je potřeba vybrat mbeany, které se budou sledovat a interval, ve kterém se bude sledovat. Příklad definice diagnostického modulu který sleduje ServerRuntimeMBean každých 5 sekund:

  <harvester>
<enabled>true</enabled>
<sample-period>5000</sample-period>
<harvested-type>
<name>weblogic.management.runtime.ServerRuntimeMBean</name>
</harvested-type>
<harvested-type>
<name>myMBeans.MySimpleStandard</name>
<harvested-instance>myCustomDomain:Name=myCustomMBean1</harvested-instance>
<harvested-instance>myCustomDomain:Name=myCustomMBean2</harvested-instance>
</harvested-type>
</harvester>

Instrumentation sledovač

Instrumentační sledovač umožňuje nahlížet na běžící kód a jeho data za chodu aplikace. Používá na to prostředků manipulace s java kompilovaným kódem, všeobecně známým jako „bytecode instrumentation“. Práce s ním a jeho konfigurace je trochu složitější. Pro jeho pochopení je potřeba mít základy Aspect Oriented Programing (AOP). Pro jeho popis se používá speciální terminologie přezvaná z AOP a rozšířená o prostředí aplikačního serveru.

Instrumetation Scope popisuje rozsah v kterém se kód bude měnit, jako sever, cluster, concept, servis, configuration. Scope je zapsaný v konfiguraci každého monitoru

  • Jointpoint je vstupní bod ve třídě která se sleduje
  • Pointcut je formulace která popisuje co se bude v kódu dít když se narazí na jointpoint
  • Diagnostic location je relativní pozice v kódu kde se bude dít diagnostická aktivita. Například before (před), after (po), around (kolem)
  • Diagnostic monitor je diagnostický kód který sleduje aplikační kód v místě jointpointu. Monitor má svůj scope. WLDF poskytuje knihovnu monitorů, viz níže.
  • Diagnostic action – akce která se vykoná v propojení s diagnostickým monitorem

Příklad nastavení instrumentačního monitoru který vyvolává TraceAction pro všechny get* metody ve specifických třídách:

     <wldf-instrumentation-monitor> 
<name>MyCustomMonitor</name>
<enabled>true</enabled>
<action>TraceAction</action>
<location-type>before</location-type>
<pointcut>call( * com.foo.bar.* get*(...));</pointcut>
</wldf-instrumentation-monitor>

Pro detailní popis viz http://e-docs.bea.com/wls/docs92/wldf_configuring/config_instrumentation.html#wp1085104

Diagnostické náhledy

WLDFdiag
Diagnostický náhled je možné udělat na požádání nebo jako notifikaci na nějaký sledovač. Je to jakýsi ekvivalent dump souboru na Unixu pro aplikační server. Je ale v lépe čitelné formě.


Diagnostický náhled musí mít nadefinovaný cílový adresář pro vytvoření souborů (dump-ů).


Obsah náhledu je zip soubor s hromadou XML souborů popisující aktuální konfiguraci serveru. Obsahuje kompletní popis konfigurace serveru,aplikací v něm a taky obsah běžících služeb jako JNDI, JMS, JTA, JVM. K běžícím službám přikládá kromě konfigurace i informaci o stavu, počtu připojení, počtu zpráv atd.





Instalace a konfigurace WLDF

Konfigurační část WLDF je součástí Weblogic konzole. Část pro analýzu historických dat tam ale není. Je potřeba doinstalovat extenzi konzole a to zkopírováním jar aplikace do console-ext adresáře v doméně. Podrobný popis je tady: http://e-docs.bea.com/wls/docs92/wldf_console_ext/install_display.html




WLDFext

Reference


Introduction to WLDF: http://dev2dev.bea.com/pub/a/2006/06/wldf.html
Configuring and using WLDF: http://e-docs.bea.com/wls/docs92/wldf_configuring/index.html
WLDF console extension: http://e-docs.bea.com/wls/docs92/wldf_console_ext/index.html
WLDF configuration files - schema reference: http://e-docs.bea.com/wls/docs92/schemaref/diagnostics/index.html