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.
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.
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} >= 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 > 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
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
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