2016-05-19 6 views
1

Ich suche nach einer Inspiration, wie ich auf die von SCOM gesammelten Metriken zugreifen kann? Im Wesentlichen möchte ich die CPU-, Speicher- und Festplatten-Nutzungsmetriken extrahieren, normalisieren und POST über eine API zu einer externen SaaS-Lösung bringen.Wie können Sie auf rohe Microsoft SCOM-Messwerte zugreifen?

Wie SCOM sammelt bereits diese Metriken es einen anderen Agenten installieren zu sammeln Daft scheint, obwohl in diesem Fall das zweite Mittel ist keine Option:/

ich Hilfe schätzen würde.

Danke,

J

Antwort

1

Sobald wir über die Inspiration sprechen - ich werde bietet eine Antwort auf hohe Ebene ohne technische Details. Ich hoffe, es ist in Ordnung, Jamie :) So sehe ich hier drei Optionen, um das zu tun: 1. Holen Sie sich diese Messwerte über MOM API (aka SCOM SDK). Offensichtliches Problem - geringe Leistung und zusätzliche Last auf dem Management-Server 2. Messwerte direkt von SCOM DB abrufen. Wir sprechen hier über Metriken. Sie können also entscheiden, nicht mit Operational DB sondern mit Datawarehouse DW zu arbeiten, da alle Metriken in beide DBs geschrieben werden (einige MPs machen das nicht, aber große MPs senden immer Metriken an beide DBs). Ich stimme auch für DW DB, weil es das transparentere Schema hat. 3. Injizieren Sie Ihre benutzerdefinierte WRITE ACTION in MPs, die Sie an den SaaS senden möchten. Natürlich bedeutet es maximale Anpassung und wird nicht funktionieren für versiegelte MPs ... also lassen Sie uns diese Option nur um Ihre Phantasie zu stören :)

Das ist, was ich sofort auf den Schreibtisch bringen kann. Ich hoffe, es hilft.

Roman.

1

Also, wie Roman empfohlen, hat SCOM zwei DBs. Betriebs- und Data Warehouse. Ein MP, der Leistungsdaten sammelt, sollte die gesammelten Daten explizit in einer DB oder in beiden speichern. Normalerweise würden Sie erwarten, dass die Daten von einem gut entworfenen MP in beiden DB gespeichert werden. Der Hauptunterschied zwischen den DBs besteht darin, dass die Betriebs-DB fast "Echtzeit" -Daten (10-20 Minuten-Intervall) speichert, die DW-DB jedoch stündliche und tägliche aggregierte Daten hat.

Von hier aus kann ich Ihnen ein paar Beispiele auf beiden DBs geben.

Operational DB:

Diese Abfrage listet alle verfügbaren Objektnamen, deren Instanzen und entsprechenden Zähler für einen bestimmten Windows-Computer, jedoch können Sie die Abfrage für andere Klassen ändern:

select pc.* from PerformanceCounterView pc join TypedManagedEntity tme on tme.TypedManagedEntityId = pc.ManagedEntityId join BaseManagedEntity bme on tme.BaseManagedEntityId = bme.BaseManagedEntityId where (bme.TopLevelHostEntityId = (select BaseManagedEntityId from BaseManagedEntity where FullName = 'Microsoft.Windows.Computer:'[email protected])) order by ObjectName, CounterName, InstanceName

Wenn Sie dann PerformanceSourceInternalId erhalten, können Sie die tatsächlichen Daten extrahieren, indem Sie die folgende Abfrage ausführen:

declare @TZOffset as int = DATEDIFF(MINUTE,GETUTCDATE(),GETDATE()) 
SELECT SampleValue, DATEADD(MINUTE,@TZOffset,TimeSampled) as TS 
FROM PerformanceDataAllView 
where (PerformanceSourceInternalId = @SrcID) 
and (TimeSampled > DATEADD(MINUTE,[email protected],@Start)) 
and (TimeSampled < DATEADD(MINUTE,[email protected],@End)) 

Hinweis: Alle Zeitstempel in den beiden DBs sind in UTC, so dass die letzte Abfrage sie zurück in die lokale Zeit übersetzt.

Data Warehouse-Datenbank:

DECLARE @StartDateSubParam as datetime DECLARE @CurrentServerSubParam as int SET @StartDateSubParam = '2016-01-01' SET @CurrentServerSubParam =(select mecn.ManagedEntityRowId from vManagedEntity mecn where (mecn.Path is null) and (mecn.FullName like 'Microsoft.Windows.Computer:yourServer.Domain.com')) select me.[Path] as ServerName, me.ManagedEntityRowId as ManagedEntityID, AverageValue, MaxValue, MinValue, perfdata.StandardDeviation, perfdata.[DateTime] as SampleDay from Perf.vPerfHourly perfdata join vPerformanceRuleInstance pri on perfdata.PerformanceRuleInstanceRowId = pri.PerformanceRuleInstanceRowId join vPerformanceRule pr on pr.RuleRowId = pri.RuleRowId left join vManagedEntity me on me.ManagedEntityRowId = perfdata.ManagedEntityRowId where (pr.ObjectName = 'Processor Information') and (pr.CounterName = '% Processor Time') and (perfdata.[DateTime] > @StartDateSubParam) and (me.TopLevelHostManagedEntityRowId = @CurrentServerSubParam)

Diese Abfrage wählen Sie die Prozessorleistung für einen Windows-Computer mit Windows 2008 R2 + (ändern Processor Information -> Prozessor für frühere Windows-Versionen). Sie können die Namen in andere verfügbare Zähler ändern und entweder vPerfHourly oder vPerfDaily für stündliche oder tägliche Aggregation verwenden.

Mit freundlichen Grüßen.

Verwandte Themen