310 likes | 392 Views
Intelligens rendszerfelügyelet. Alkalmazások és alkamazás-kiszolgálók monitorozása. Kocsis Imre ikocsis @ mit.bme.hu. Felügyelet és szoftverplatformok. Alkalmazások. Virtuális gép / futtatókörnyezet. Middleware. Operációs rendszer. HW. Felügyelet és szoftverplatformok.
E N D
Intelligens rendszerfelügyelet Alkalmazások és alkamazás-kiszolgálók monitorozása Kocsis Imre ikocsis@mit.bme.hu
Felügyelet és szoftverplatformok Alkalmazások Virtuális gép / futtatókörnyezet Middleware Operációs rendszer HW
Felügyelet és szoftverplatformok Nagyon Fontos J2EE Alkalmazás WebSphereApplication Server 6.1 IBM JDK WebSphere MQ És ha Windows a platform? AIX IBM xSeriesModel 630
Felügyelet és szoftverplatformok Használat mon.: ~ Alkalmazások ? Virtuális gép / futtatókörnyezet Middleware Operációs rendszer OS monitorozása HW HW mon.: ~
Szolgáltatás-hibabehatárolás és -állapotvizsgálat • Fenomenologikus, szolgáltatás szintű vizsgálat • Teljesítmény- és szolgáltatásbiztonsági jellemzők • N.B.: ezzel még foglalkozunk • Használt erőforrások felügyelete • Miért nem elegendőek? • Nagyon Fontos J2EE Alkalmazás: • A futtatókörnyezet Java folyamata fut • A szolgáltatásunk mégsem elérhető • Ok…?
Alkalmazás állapotának követése • Generikus fogalmak: fut/nem fut • Ezekre persze vannak alacsony/magas szintű eszközök • „Munkavégzés” metrikái • Messze nem teljesen fedhető a már vizsgált eszközökkel • Mik ezek? később tárgyaljuk • Keretrendszer (ha van) belső állapota • Java: heapmemory, GC, szálak tulajdonságai, … • J2EE alkalmazáskiszolgáló: threadpool-ok, … • Állapot az adott alkalmazás fogalmi rendszerében • Pl. „fontos” aktív objektumok kivételei
Állapot megfigyelhetőségének támogatása • Saját logállományok • Integráció a központosított felügyelethez… • Szükséges vs. elégséges felbontás? ( tisztán „push”) • Platformszintű eseménykezelés kihasználása • Windows Eventlog • syslogd • Saját menedzsment-eszközök • Integráció?
Platform távfelügyeleti támogatás kihasználása • Amiket láttunk, elméletileg működhetnek: • SNMP, CIM-XML, WMI, WS-Management (WinRM), … • Mi határozza meg a praktikus alkalmazhatóságot? • Fejlesztési támogatás kiszolgáló- és kliensoldalon • (Kvázi-)szabványos API és implementációk megléte a gyakorlatban fontosabb lehet, mint a protokoll szabványossága/nyíltsága • Bár a WMI nem (csak) ezért nem nyílt protokollszinten
Alkalmazás-környezetek és szabványos/platforminstrumentáció • OS – Windows: WMI • OS – UNIX-ok és Linux-ok: CIMOM-ok? • .NET technológiák: WMI • PHP, RubyonRails, Python, …: nem jellemző • J2SE és J2EE: JMX
JMX (Java Management Extensions) „Kibocsájtó”: Java CommunityProcess (JCP) Megalkotók: Sun, IBM, Apache, BEA, … Verzió: JMX 2.0, JSR255 (2008) Cél: A Java platform és alkalmazások menedzsmentjének szabványosítása, szerver és kliens oldali API-k és elvárt szolgáltatások megadásával Impl.: J2SE 5.0-tól és J2EE 1.4-től kötelező
JMX: alapvető jellemzők • Összetett, API-orientált szabvány • „Java-ból menedzselünk akár távoli Java-t” • Mik lehetnek a tervezői döntések? • Java objektumok metódusainak hívása távolról • Legyen valami menedzsment objektum-bróker • Lokális Java objektumok „feliratkozása” provider-nek • A lokális feliratkozottak távolról lekérdezése • Hívások kezelése • Mindenképpen legyen egyszerűbb, mint az RMI… • … de az implementáció használhatja persze (nyíltság?)
Mbean-ek • „ManagedBean”: alapvetően egy Java objektum • Bean osztály: elnevezési, létrehozási és viselkedési konvenciók • Szinte akármit reprezentálhat • Platform MBean-ek (MXBean): JVM erőforrások • EE környezetek szolgáltatásai (JDBC, tranzakciókezelés, …) • Saját modell
MBeanServer • MBean-eket nyilvántartó objektum • Publikus interfészén: • Létrehozás/törlés • MBean-ek név és név-minta szerinti keresése • MBean-ek attribútum- és metódushalmazának lekérdezése • MBean attribútumok olvasása és írása, metódusok hívása • az MBean-ek által létrehozott jelzésekre feliratkozás • Távoli és lokális interfészei különböznek
MBeanServer interfészek • Távoli/lokális: MBeanServerConnection • http://java.sun.com/j2se/1.5.0/docs/api/javax/management/class-use/MBeanServerConnection.html • Távoli: MBeanServer • http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html
Konnektorok • MBeanServer(-ek) lokális elérése: factory • staticMBeanServerManagementFactory.getPlatformMBeanServer() //java.lang.management • Másik JVM-ből?
MBean-ekmetaadatai • MBeanServer kliens Descriptor: „a metaadatmeataadata” (név/érték párok)
Mbean-ek nevei • Az MBean-ekre objektum-referenciánk nincs! Objektum-név: • Domain név: egyszerű, nem hierarchikus névtérkezelés • Kulcs tulajdonságok rendezetlen halmaza • Az „eredeti” típus (Java osztály) nem jelenik meg! Catalina:type=Cache,host=localhost,path=/tomcat-docs Catalina:type=Cache,host=localhost,path=/servlets-examples Catalina:type=ThreadPool,name=jk-8009 java.lang:type=Runtime java.util.logging:type=Logging com.sun.management:type=HotSpotDiagnostic
Platform MBeanServer inicializálása java -Dcom.sun.management.jmxremote.port=9004 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ DummyServer FIGYELEM: NEM BIZTONSÁGOS!
JConsole és JVisualVM • Eclipse, mint Java folyamat • JConsole: <JDK6_HOME>\bin\jconsole.exe • Csatlakozás az Eclipse Java folyamatra (Attach API) • Képességek áttekintése • JVisualVM: <JDK6_HOME>\bin\jvisualvm.exe • Csatlakozás az Eclipse Java folyamatra (Attach API) • JConsoleplugin installálása • Képességek áttekintése
Programozott hozzáférés [néhány kihagyott import] import javax.management.*; publicclassMyClient { publicstaticvoid main(String[] args){ JMXServiceURLaddress = null; JMXConnectorconnector = null; MBeanServerConnectionconnection = null; try { address = newJMXServiceURL("service:jmx:rmi:///jndi/rmi://"+ "localhost:9004/jmxrmi"); } catch (MalformedURLException e) {e.printStackTrace(); System.exit(1);}
Programozott hozzáférés try { //valós esetben itt kellene még egy paraméter-HashMap connector = JMXConnectorFactory.connect(address); connection = connector.getMBeanServerConnection(); } catch (IOException e) { e.printStackTrace(); System.exit(1); } […] String[] domains = connection.getDomains(); Integer mbc = connection.getMBeanCount(); Set<ObjectName> names = connection.queryNames(null, null); […]
Szkriptelt hozzáférés • Programozott megoldások sokszor feleslegesek • Unix/Linux: bash/ksh/perl/… • Windows: VB, PowerShell, .bat • A Java nyelv ≠ JVM/Java platform • A .NET CLR-re is több nyelv fordítható • JVM-re épülő szkriptnyelvek (fordítás/interpretálás): • Groovy • JRuby • JavaScript JConsole script shell
Linkek • JMX technologypage (Sun): • http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/ • JMX tutorial: • http://java.sun.com/j2se/1.5.0/docs/guide/jmx/tutorial/tutorialTOC.html • A Tutorial-ban az instrumentáció legalapvetőbb kérdései: • http://java.sun.com/j2se/1.5.0/docs/guide/jmx/tutorial/essential.html#wp1053098 • Egy kliensoldali súlypontú áttekintés: • https://unixlinux.tmit.bme.hu//JMX • JMX adatbiztonság-menedzsment (autentikáció/titkosítás): • http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
Java 2 Platform, EnterpriseEdition Management Specification „Kibocsájtó”: Java CommunityProcess (JCP) Megalkotók: Sun, IBM, BEA, … Verzió: JSR77 (2006) Cél: A J2EE platform menedzsmentjéhez standard modellek
Alkalmazáskiszolgálók felügyelete • JMX: szabványos „adatmodell” nincs • Szabványos attribútumok és metódusok; • Szabványos nevek • J2SE környezetben nincs is sok értelme • Kivéve: platform MBean-ek • J2EE: sok szabványos fogalom • Servlet-ek és konténereik, EJB-k és konténereik, aszinkron üzenetküldés (JMS), …
JSR-77 • Egy J2EE környezet objektumait milyen néven kell menedzsment célokra elérhetővé tenni • Gyakorlatilag JMX-nevek, • amikben mindenképpen szerepeljen értékkel: • j2eeType • name • <szülő-j2eeType-ok> (mi a szülő szabvány) • Elérés: praktikusan JMX és EJB • Támogatás a gyártók részéről: erősen változó
Névhierarchia MitInfJ2EEDomain:j2eeType=J2EEApplication,name=LabPortal, J2EEServer=SauronServer
Linkek • Mi az a J2EE platform…? • http://en.wikipedia.org/wiki/J2EE • …egy J2EE alkalmazásszerver például képes futtatni szervleteket: • http://en.wikipedia.org/wiki/Servlet • Platform MBeanServer használata a Jboss J2EE (4.0.2+) alkalmazáskiszolgáló esetén: • http://www.jboss.org/community/docs/DOC-10521 • Platform MBeanServer használata a Tomcat 5.5 szervletkonténer esetén: • http://tomcat.apache.org/tomcat-5.5-doc/monitoring.html