Higiena i zdrowie aplikacji .Net (Operating and Instrumenting) Cezary Nolewajka Getin Sp. z o.o. c.nolewajka@m2mob.com
Wstęp O czym jest ta prezentacja? Monitorowanie i raportowanie działania aplikacji Różne mechanizmy monitorowania Enterprise Management Narzędzia do monitorowania: MOM
Wstęp Dla kogo jest ta prezentacja? Projektanci oraz programiści (projekt i implementacja odpowiednich mechanizmów) Administratorzy (implementacja infrastruktury i konfiguracja Enterprise Management)
Monitorowanie - dlaczego? weryfikacja poprawności działania oraz czy system spełnia wymogi SLA przestoje w działaniu systemu powodują wymierne straty dla organizacji często do 80% czasu poświęconego rozwiązaniu problemu jest poświęcona na zidentyfikowanie problemu monitorowanie działania jest kluczowe dla diagnostyki problemów
Monitorowanie - dlaczego? (c.d.) wiele z problemów objawia się dopiero w środowisku produkcyjnym informacja o awarii systemu będzie znana zanim spostrzegą ją użytkownicy automatyzacja działania i procesów zarządzania systemami możliwość przewidywania i proaktywnego reagowania
Monitorowanie - co? Platorma systemowa Monitorowanie aplikacji Monitorowanie usług (serwisów) jako całości (SLA!) Sieć Monitorowanie sprzętu komputerowego (serwerów)
Monitorowanie - ‘zdrowa’ aplikacja? zwraca poprawne wyniki w odpowiednim czasie wydajna (np. brak zbędnych pętli, oszczędne wykorzystywanie zasobów) optymalne wykorzystanie środowiska aplikacji minimalne wykorzystanie infrastruktury (przy ciągłym zapewnieniu funkcjonalności i wymaganej wydajności)
Monitorowanie - ‘zdrowa’ aplikacja? zwalnia wykorzystywane zasoby jak tylko skończy je wykorzystywać stosuje wydajne wykorzystywanie zasobów pamięci (np. wykorzystywanie z pliku „pagefile” tylko, gdy jest to konieczne) działanie aplikacji nie wpływa negatywnie na inne aplikacje
Monitorowanie - ‘niezdrowa’ aplikacja? nie zwraca wyników zwraca wynik działania zbyt wolno, lub wydajność nie jest stabilna zwraca nieprawidłowe wyniki nie zwalnia wykorzystywanych zasobów w niewydajny sposób wykorzystuje zasoby systemu operacyjnego (np. zarządzanie pamięcią) negatywnie wpływa na działanie innych aplikacji
Monitorowanie - jak? Aspekty wyboru źródła danych Zbieranie informacji z systemów poza aplikacją (np. system, Performance Counters) Przygotowanie aplikacji tak, aby dostarczała danych o działaniu aplikacji
Monitorowanie - jak? (c.d.) Narzędzia od najprostrzych metod aż po infrastruktury VS .Net: System.Diagnostics: Trace/Debug, Performance Counter, EventLog VS.Net, Windows 2000/2003 Server: WMI (Windows Management and Instrumentation) EIF (Enterprise Instrumentation Framework) Microsoft Operations Manager 2000
Monitorowanie - po kolei... Wybór elementów i strategii monitorowania Budowanie danych bazowych (baseline) Wykorzystanie symulacji i sztucznych bodźców (testy) Przygotowanie aplikacji (instrumenting)
Najprostrze narzędzia System.Diagnostics Trace/Debug EventLog Performance Counters
Struktura przykładów int nSleep = 100; int nLoop = 1000; for (int i = 0; i <= nLoop; i++) { nSleep = nSleep - rnd.Next (10, 50); if (nSleep < 10) nSleep = 10; // do something with: // SleepValue // Loop }
System.Diagnostics - Trace/Debug WriteLine, Write, Indent, Unindent Assert TraceSwitch BooleanSwitch TraceListener
System.Diagnostics - Trace/Debug <assert assertuienabled="false" ...></assert> <trace autoflush="true" indentsize="2"> <listeners> <remove name="Default"></remove> <add name="MyListener" type="...” ... /> </listeners> </trace> <switches> <add name="SwitchName" value="2" /> </switches> </system.diagnostics>
01_DebugTrace
System.Diagnostics - Performance Counters CategoryName, CounterName NextValue (odczyt) Increment, IncrementBy, RawValue (zapis) CounterType RawData, Average, Difference, Instantaneous, Percentage, Rate
02_PerformanceCounters
System.Diagnostics - EventLog EventLog.WriteEvent Własne dzienniki zdarzeń (EventLog) Własne źródła zdarzeń (EventSource) HKLM/SYSTEM/CurrentControlSet/ Services/EventLog - uprawnienia!
03_EventLog
WMI - Windows Management and Instrumentation DMTF (Desktop Management Task Force) => CIM (Common Information Model) TDC (Technology Development Committee), 1996 CIM TDC: Compaq, CISCO, HP, IBM/Tivoli, Intel, MS, Novell, SunSoft WBEM (Web Based Enterprise Management) CIM – standard przemysłowy opracowany do reprezentowania systemów, aplikacji, sieci, urządzeń, ... WMI – implementacja WBEM i CIM zrealizowana przez MS
WMI - co można? Zarządzanie obiektami Instrumentacja aplikacji Język zapytań WQL (WMI Query Language) Wyszukiwanie definicji klas i instancji obiektów Subskrypcja zdarzeń Wywoływanie metod Dostęp do atrybutów Strongly-typed WMI Instrumentacja aplikacji Zarejestrowanie klasy w schemacie WMI Emitowanie zdarzeń Udostępnianie metod i danych
WMI - co można? (c.d.) Współpraca z wieloma systemami monitorującymi MS Operations Manager HP OpenView IBM Tivoli NetIQ inne...
WMI - Platform SDK
WMI - instrumentacja aplikacji [assembly:Instrumented("Root/WMITest")] using System.Management.Instrumentation; Zdarzenia [InstrumentationClass(InstrumentationType.Event)] Klasa bazowa BaseEvent Instrumentation.Fire () lub BaseEvent::Fire ()
WMI - instrumentacja aplikacji Obiekty [InstrumentationClass(InstrumentationType.Instance)] Klasa bazowa Instance Klasy i atrybuty publiczne mapowane na typy CLI i WMI InstallUtil !!!
04_WMIExposeEvent
06_WMICallMethod
06_WMICallMethod (c.d.)
WMI - ograniczenia w .Net Ograniczenia WMI w kodzie “managed” Nie da się udostępniać atrybutów do zapisu Nie da się udostępniać metod Nie jest wspierane tworzenie kwalifikatorów Właściwości obiektów nie mogą być definiowane jako atrybuty klucze Ograniczenia te nie dotyczą implementacji WMI w C++ „unmanaged”
05_WMIObjectClass
EIF - Enterprise Instrumentation Framework Wyklucza wady innych API konieczność uczenia się różnych API konieczność zmian w kodzie w celu dostrojenia monitorowanych danych konieczność zmian w kodzie w celu dodania kolejnego mechanizmu monitorowania EIF to rekomendowana technika instrumentacji ze względu na łatwość konfiguracji i zarządzania w środowisku produkcyjnym
EIF - architektura Event Schema bazuje na System.Management, a więc i WMI dla implementacji Event Schema Event Sources Event Sinks Request Tracing (execution flow !!!) Instrumentation API XML Configuration File nie pozwala na udostępnianie instancji obiektów !
EIF
EIF - konfiguracja TraceSessions.config EnterpriseInstrumentation.config <filters> <filter name="defaultSoftwareElementFilter" > <eventCategoryRef name="All Events"> <eventSinkRef name="wmiSink" /> <eventSinkRef name="traceSink" /> <eventSinkRef name="logSink" /> </eventCategoryRef> </filter> </filters>
Microsoft Operations Manager Strategia zarządzania systemami proponowana przez Microsoft Mechanizmy Windows 2000/2003 Server Operations Manager Systems Management Server (zarządzanie zmianami i konfiguracją) Microsoft Operations Framework (MOF) Usługi .Net Mangement Services
Microsoft Operations Manager Zarządzanie operacyjne Zarządzanie rozproszone (agenci) Zarządzanie centralne (konsola administracyjna) Reguły Ostrzeżenia Monitorowanie wydajności Pakiety Management Packs (baza wiedzy technicznej) Graficzne narzędzia raportowania Skalowalność do rozmiarów korporacyjnych Agenci Zautomatyzowanie wdrażania agentów i reguł
Podsumowanie Czy warto monitorować? Właściwy dobór zakresu i strategii Właściwy dobór sposobów notyfikacji Właściwy dobór narzędzi Nie strzelać do wróbla z armaty! WMI EIF Łączenie technik, np.: Trace + CustomTrace Listener + .config + WMI = EIF !!! (no prawie)
Bibliografia Operating .Net-Based Applications (www.microsoft.com/technet/itsolutions/ net/maintain/opnetapp/default.asp) Enterprise Instrumentation Framework Documentation WMI Platform SDK MSDN for Visual Studio .Net 2003 Operations Manager 2000 Documentation CHIP SPECIAL: MS Visual Studio .Net