Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v jazyku C# II.

Podobné prezentace


Prezentace na téma: "Programování v jazyku C# II."— Transkript prezentace:

1 Programování v jazyku C# II.
11.kapitola

2 Obsah Přehled technologií pro spravovatelnost aplikací WMI – základy
WMI – přístup z .NET frameworku WMI – instrumentace vlastních aplikací Monitorování aplikace pomocí MOM 2005 2/36

3 Monitorování a provoz .NET aplikací
Aplikace musí být nejenom dobře napsaná, ale i dobře provozovatelná Monitorování, instrumentace – sledování Trasování – záznam událostí a chyb v aplikaci Konfigurovatelnost – nastavení externích parametrů aplikace Na tyto vlastnosti je nutné myslet již při návrhu Dodání těchto funkcí ex-post je obtížné Dobrý objektový návrh vše zjednodušuje 3/36

4 Vize - System Definition Model
„Živá“ předloha pro fungování aplikace Design for Operations Vytvoření definice nového systému nebo jeho úprava Fungování systému podle jeho definice Dynamic Data Center Merc. Stage Shuttle Job Cache HTTP SQL Feed Store DSS FTP Potřebné zdroje Operační možnosti Politiky pro běh aplikace Automatická alokace zdrojů a konfigurace podle definice STORAGE SERVERS NETWORKING SDM dokument 4/36

5 Konfigurace aplikací Externí parametry (cesty, spojení do DB apod.) by měly být uloženy mimo aplikaci Infrastruktura v .NET Frameworku = konfigurační soubor: Pro spustitelné – JmenoExeSouboru.exe.config Pro ASP.NET aplikace – web.config Cestu lze zjistit jako: AppDomain.SetupInformation.ConfigurationFile Cestu lze nastavit při vytváření AppDomain Obsah je spojen s obsahem machine.config Tip pro VS.NET – app.config v rootu projektu tlustých aplikací je vždy správně nakopírován !!! Velká rozšíření pro Framework 2.0 a Longhorn 5/36

6 Trace, Debug Velmi podobné statické třídy
Výstup diagnostických informací: Nepodmíněný – Write, WriteLine Podmíněný – WriteIf, WriteLineIf, Assert Kód, který je volá, se kompiluje pouze tehdy, jsou-li přítomné přepínače DEBUG, TRACE Je možné nechat i v ostré verzi produktu Liší se určením - konvence je, že: DEBUG chybí v ostré verzi (je pro vývojáře) TRACE zůstává v ostré verzi (je pro provozní diagnostiku) Stavební kameny: Listener – zpracovává události Switch – abstrahuje konfiguraci 6/36

7 Event Log Zápis do/čtení z Event Logu
Možno používat systémové (Application, System, …) anebo si vytvářet vlastní Jde o starší technologii, použití z .NET frameworku není zcela přirozené Pozor na práva, řídí se přístupovými právy ke klíčům v Registry HKLM/…/Services/EventLog/… Standardně je nebude mít Network Service (účet pod kterým běží ASP.NET) v dostatečném rozsahu 7/36

8 Performance Counters Čtení hodnot čítačů výkonnosti a vytváření vlastních čítačů Jde o starší technologii, použití z .NET frameworku není zcela přirozené Pozor na práva, řídí se přístupovými právy ke klíčům v Registry Modifikaci lze najít na různých webech, ale není to podporovaný postup Standardně je nebude mít Network Service (účet pod kterým běží ASP.NET) v dostatečném rozsahu 8/36

9 Frameworky pro abstrakci událostí
Oddělují vlastní abstraktní událost („publish“) od způsobu jejího zpracování a eskalace: Databáze, Event Log, soubor na disku, WMI, message queueing, , … Konfigurace je dána konfiguračním souborem a lze ji dynamicky měnit Dostupné frameworky na MSDN: Exception Management Application Blok Enterprise Instrumentation Framework Logging Application Block 9/36

10 K čemu je WMI dobré? Sběr dat - čtení Konfigurace systému - zápis
Inventura hardwaru, výkonnostní čítače, klíče registry, Event Logy, služby, procesy, … Konfigurace systému - zápis Sdílené adresáře, NTFS oprávnění, konfigurace nastavení sítě, pagefile, … Vykonání akcí – volání metod Zastav službu, zruš proces, … Správa událostí W3SVC služba se zastavila, kabel síťové karty odpojen, nalezen nový virus, … 10/36

11 WBEM vs. WMI WBEM (Web Based Enterprise Management)
Standard navržený skupinou DMTF Velmi čistý objektový návrh Základní schéma nezávislé na OS (CIMv2) Využit v mnoha mgmt. produktech WMI (Windows Management Interface) Implementace WBEM na Windows platformě Podporováno od Windows 98 & NT4 Počínaje Windows 2000 součást OS Mnoho dalších produktů podporuje WMI Přístupné přes COM i .NET Framework 11/36

12 WMI - architektura Klienti (consumer) Nástroje, skripty Jiné aplikace
Management aplikace Služby (dotazy, události, filtrování, správa metadat, vazba klient-poskytovatel, …) Management Schema Katalog Infrastruktura Poskytovatelé (provider) Aplikace Zařízení OS (Win32) 12/36

13 Schéma – jmenné prostory
Slouží k rozlišení různých skupin tříd patřících různým aplikacím (OS, SQL, BizTalk, IIS, NLB, …) Základní jmenný prostor (namespace) se jmenuje root Základní třídy pro OS jsou ve jmenném prostoru root/CIMv2 Jmenný prostor je základ pro nastavení bezpečnosti Creating a Namespace Namespaces are used in Windows Management Instrumentation (WMI) to differentiate among the groups of classes and instances that represent particular managed environments. Because the components in a managed environment are defined by the classes and instances in a schema, each new schema or schema version requires a new namespace. For example, the root\cimv2 namespace contains the classes and instances defined in the Microsoft® Win32® schema. Namespaces are represented in WMI by the __Namespace system class and classes that derive from this system class. The __Namespace class has a single property called Name, which must be unique within the scope of the parent namespace. The Name property must be set to a string that begins with a letter. All other characters in the string can be letters, digits, or underscores. All characters are case-insensitive. Namespaces can be created using the Managed Object Format (MOF) Language or the WMI API. To create a new namespace using the MOF language, create an instance of the __Namespace system class as follows: instance of __Namespace { Name = "MyNamespace"; }; The namespace called MyNamespace is created within the current namespace. To create a namespace within a specific namespace other than the current one, use the #pragma namespace directive prior to the instance declaration. The next example shows how to create a namespace as a sibling to the root\cimv2 namespace: #pragma namespace("\\\\.\\Root\\Cimv2") instance of __Namespace { Name = "MyNamespace"; }; To create a namespace using the WMI API Call the IWbemServices::GetObject method to retrieve an IWbemClassObject pointer for the __Namespace system class. Call the IWbemClassObject::SpawnInstance method to define an instance of the __Namespace system class. Call the IWbemClassObject::Put method to set the Name property of the __Namespace instance. Call the IWbemServices::PutInstance method to create the namespace. The pInst parameter should point to the new instance. 13/36

14 Schéma – jmenné prostory
Bezpečnost Vytvářet jmenné prostory a měnit je smí pouze lokální administrátor Tedy ani Network Service ani ASPNET účty V .NET frameworku je řešením použít předem installutil.exe z SDK Další práva se pak nastavují přes MMC snapin nebo voláním API 14/36

15 Schéma - třídy Základní jednotka pro správu
Symbolizuje spravovaný objekt Přibližné analogie: Namespace = databáze, běžící aplikace Instance = instance objektu, tabulka databáze Property = vlastnost objektu, sloupec databáze Method = metoda Association = relace mezi tabulkami, asociace Win32_Process: Methods: Create, GetOwner, GetOwnerSid, Terminate Properties: Name, ProcessID, Priority, PageFaults, . . . An Instance: notepad.exe, 900, 8, 335, . . . Associations: Win32_ComputerSystem, CIM_DataFile 15/36

16 WMI události Intrinsic Events Extrinsic Events Timer Events
Systémové události („triggery“) vyvolané změnou dat nebo metadat Instance/Class/Namespace-Creation/Deletion/Modification-Event Extrinsic Events Definované poskytovateli Např. Win32_PowerManagementEvent Timer Events Systémové, periodicky nebo v daný čas 16/36

17 WMI - poskytovatelé WMI tým v MS Další týmy v MS Výrobci třetích stran
Win32 SNMP DMI (with Intel) Registry Windows NT® Event log Performance Monitor Performance Counters Active Directory™ Windows Installer WMI for WDM SCSI Disk, IDE Disk, NDIS, Keyboard, Mouse, USB HUB, Modem, ACPI, SMBIOS, Serial, Parallel, Disk Perf Další týmy v MS Exchange 2000 Systems Management Server NetMon monitors and experts Network Load Balancing SNA Server Office 2000 SQL Server™ 2000 DNS Server Application Center Monitoring IIS, NetShow™ BizTalk™ Server Clustering Services Disk Quotas, Job Objects, Ping More… Výrobci třetích stran 17/36

18 WMI klienti (consumers)
Management produkty Microsoftu Operations Manager, AppCenter, SMS Mgmt. produkty třetích stran CA, Tivoli, HP OpenView, BMC, … VS.NET – Server Explorer WMI Extension WMI Administrative Tools (CIM studio) Mnohem více funkčnosti, ale není integrováno s .NET 18/36

19 WMI v .NET Frameworku Funkce WMI jsou ve jmenném prostoru System.Management Známé prostředí a techniky Třídy, kolekce, enumerátory, foreach, delegate, event, … Jazykově neutrální – C#, VB.NET, … Generování typových tříd pro WMI třídy: MgmtClassGen.exe v .NET Framework SDK WMI Server Explorer Extension pro VS.NET Výhody IntelliSense®, kontrola při kompilaci … 19/36

20 Základní úlohy Enumerace a filtrování instancí objektů
Získání specifické instance Dotazy na instance nebo události Provádění metod Registrace k odběru událostí Zjištění vztahů mezi spravovanými objekty 20/36

21 System.Management Základní třídy ManagementObject ManagementClass
Reprezentuje objekt WMI (data) ManagementClass Reprezentuje třídu WMI (schéma) ManagementObjectSearcher Vyhledávání objektů v repository WQL – dotazovací jazyk vycházející z SQL Další způsoby hledání – Relationship, RelatedObject ManagementObjectEventWatcher Pro sledování událostí WMI (EventArrived) 21/36

22 WMI .NET Consumer API Příklad - Enumerate WMI objects using System;
using System.Management; using System.IO; public void EnumerateServices() { //Request the collection of services ManagementObjectSearcher s = new ManagementObjectSearcher(“Win32_Service”); //Enumerate through the collection foreach (ManagementObject service in s.Get()) Console.WriteLine(“Service: “+Service[“Name”]+ ” is “+Service[“State”]); return; } 22/36

23 WMI .NET Consumer API Příklad - Subscribe for events
Define the event query public void ServiceStopped() { WqlEventQuery q = new WqlEventQuery(“__InstanceModificationEvent”, 10, “TargetInstance isa Win32_Service and TargetInstance.State=‘Stopped’”); ManagementEventWatcher watcher = new ManagementEventWatcher(q); MyHandler handler = new MyHandler(); watcher.EventArrived += new EventArrivedEventHandler(handler.Arrived); watcher.Start(); Console.WriteLine(“Hit any key to stop listening…”); Console.ReadLine(); watcher.Stop(); } public class MyHandler { public void Arrived(object sender, EventArrivedEventArgs e) { ManagementBaseObject service = (ManagementBaseObject)(e.NewEvent["TargetInstance"]); Console.WriteLine(“Service " + service[“Name”] + “has stopped !!!”); Initialize an event watcher with this query Set up a handler for incoming events Start listening Handle the event when it arrives 23/36

24 WMI .NET Consumer API Příklad - Strongly-typed objects
From previous example: public void Arrived(object sender, EventArrivedEventArgs e) { ManagementBaseObject service = (ManagementBaseObject)(e.NewEvent["TargetInstance"]); Console.WriteLine(“Service " + service[“Name”] + “has stopped !!!”); } Use SDK utility (MgmtClassGen.exe) to generate strongly-typed class “Service” for the WMI “Win32_Service” class Using the generated class the code becomes: Service service = new Service(e.NewEvent[“TargetInstance”]); Console.WriteLine(“Service " + service.Name + “has stopped !!!”); //and, if we want to restar service.StartService(); 24/36

25 Instrumentace vlastní aplikace
Snadná cesta k spravovatelné aplikaci Intuitivní .NET třídy se mapují na WMI třídy 1:1 WMI schéma automaticky zjištěno z definice třídy a z přiřazených atributů Deklarativní – pomocí atributů a dědičnosti Označení tříd typů, které chcete zpřístupnit Označení schématu a názvu třídy Volitelně – omezení zpřístupněných členů třídy Jednoduchá a bezpracná Vše je v System.Management.Instrumentation Instance typů zpřístupněny do vrstvy WMI Události v kódu jsou vyvolány ve WMI 25/36

26 Vlastní WMI událost Jak na to?
Definujte .NET třídu reprezentující událost Označte třídu pro instrumentaci Pokud je to možné, poděděním ze třídy System.Management.Instrumentation.BaseEvent Pokud ne, použijte pro třídu atribut [InstrumentationClass(InstrumentationType.Event)] Vytvořte instanci třídy, vyplňte vlastnosti, zavolejte metodu Fire Vyvolá WMI událost s příslušnými daty 26/36

27 Firing Events Příklad – using attribution
Define the WMI namespace to fire events into using System.Management.Instrumentation; [assembly:Instrumented(“root/default")] [InstrumentationClass(InstrumentationType.Event)] public class UserLogin { public string Username; public int SessionId; public int TimeToLogin; } UserLogin ul = new UserLogin(); ul.Username = “corinaf”; ul.SessionId = sCount++; ul.TimeToLogin = 10; Instrumentation.Fire(ul); Attribute indicates this is instrumentation event Define event class Instantiate and fill in values Fire event using helper classes 27/36

28 Firing Events Příklad – using base class
using System.Management.Instrumentation; [assembly:Instrumented(“root/default")] public class UserLogin : BaseEvent { public string Username; public int SessionId; public int TimeToLogin; } UserLogin ul = new UserLogin(); ul.Username = “corinaf”; ul.SessionId = sCount++; ul.TimeToLogin = 10; ul.Fire(); Derive from “BaseEvent” Fire event using base method 28/36

29 Zpřístupnění objektu přes WMI
Jak na to? Definujte libovolnou .NET třídu Označte třídu pro instrumentaci: Pokud je to možné, poděděním ze třídy System.Management.Instrumentation.Instance Pokud ne, použijte pro třídu atribut [InstrumentationClass(InstrumentationType.Instance)] Vytvořte instanci, opublikujte pomocí Publish Objekt bude přístupný přes WMI Pouze pole a vlastnosti označené Public Pouze ke čtení (bezpečnost) Metody nejsou zpřístupněny (bezpečnost) 29/36

30 Exposing Data Příklad – using attribution
Define the WMI namespace to fire events into using System.Management.Instrumentation; [assembly:Instrumented(“root/default")] [InstrumentationClass(InstrumentationType.Instance,“CIM_User”)] public class UserInfo { public string Name; public DateTime LastLogin; public int MaxWait; public UserInfo(name) { Name = name; LastLogin = GetLastLogin(); MaxWait = GetMaxWait(); Instrumentation.Publish(this); } usr[0] = new UserInfo(“Jeff”); usr[1] = new UserInfo(“Cori”); Attribute indicates this is instrumentation data Define data class When values are available, publish it Instantiate as usual 30/36

31 Exposing Data Example – using base class
using System.Management.Instrumentation; [assembly:Instrumented(“root/default")] public class UserInfo : Instance { public string Name; public DateTime LastLogin; public int MaxWait; public UserInfo(name) { Name = name; LastLogin = GetLastLogin(); MaxWait = GetMaxWait(); Published = true; } usr[0] = new UserInfo(“Jeff”); usr[1] = new UserInfo(“Cori”); Derive from “Instance” Publish instance using property on base class 31/36

32 Co je MOM 2005? Kompletní řešení pro operační dohled serverů a aplikací na bázi WMI Identifikace a řešení kritických stavů ještě před tím, než se objeví „Operační expertíza v krabici“ – snadná instalace a okamžité výsledky Jednoduchá správa – snadné použití, flexibilita, automatizované nasazení, škálovatelnost Spolupráce s management nástroji dalších dodavatelů Přináší vyspělý reporting Workgroup verze – levné řešení do 10 serverů 32/36

33 MOM 2005 popis architektury
System Center Data Warehouse System Center Data Warehouse SQL Reporting Services Databáze MOM 2005 Operační data Konfigurační data MOM management Server Database access server MOM service MOM agent +MOM Server Uživatelská rozhraní Agenti MOM 2005 Lokální monitorování Lokální správa Šifrovaná komunikace Reportování MOM Server DB Oper. konzole Admin konzole Web konzole Agenti Agenti 33/36

34 Reference Monitoring in .NET Distributed Application Design Operating .NET-based Applications MOM WMI Server Explorer Extension WMI Tools 34/36

35 Závěrem Aplikace musí být nejenom dobře napsaná, ale i dobře provozovatelná Na tyto vlastnosti je nutné myslet již při návrhu, dodání ex-post je obtížné Dobrý objektový návrh vše zjednodušuje WMI je správná technologie MOM 2005 je nejvhodnější nástroj pro monitorování prostřednictvím WMI 35/36

36 Konec 36/36


Stáhnout ppt "Programování v jazyku C# II."

Podobné prezentace


Reklamy Google