1

SCOM によって収集されたメトリックにアクセスする方法についてのヒントを探していますか? 基本的に、CPU、メモリ、およびディスク使用率のメトリックを抽出し、正規化し、API を介して外部 SaaS ソリューションに POST したいと考えています。

SCOM はすでにこれらのメトリックを収集しているため、別のエージェントをインストールして収集するのは馬鹿げているように思えますが、この場合、2 番目のエージェントはオプションではありません :/

助けていただければ幸いです。

ありがとう、

J

4

2 に答える 2

3

したがって、Roman がアドバイスしたように、SCOM には 2 つの DB があります。運用およびデータ ウェアハウス。パフォーマンス データを収集する MP は、収集したデータを DB のいずれかまたは両方に明示的に保存する必要があります。通常、適切に設計された MP からデータが両方の DB に保存されることを期待します。DB 間の主な違いは、運用 DB はほぼ「リアルタイム」のデータ (10 ~ 20 分間隔) を格納するのに対し、DW DB は時間単位および日単位の集計データを保持することです。

ここから、両方の DB の例をいくつか紹介します。

運用データベース:

このクエリは、特定の Windows コンピューターの使用可能なすべてのオブジェクト名、それらのインスタンス、および対応するカウンターを一覧表示しますが、他のクラスのクエリを変更することもできます。

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:'+@ServerName)) order by ObjectName, CounterName, InstanceName

次に、 を取得PerformanceSourceInternalIdしたら、次のクエリを実行して実際のデータを抽出できます。

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,-@TZOffset,@Start))
and (TimeSampled < DATEADD(MINUTE,-@TZOffset,@End))

注: 両方の DB のすべてのタイム スタンプは UTC であるため、最後のクエリはそれらを現地時間に変換します。

データ ウェアハウス データベース:

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)

そのクエリは、Windows 2008 R2+ を搭載した Windows コンピューターのプロセッサ パフォーマンスを選択します (以前の Windows バージョンのプロセッサ情報 -> プロセッサを変更します)。名前を他の使用可能なカウンターに変更したり、時間ごとまたは日ごとの集計にvPerfHourlyまたはを使用したりすることもできます。vPerfDaily

よろしくお願いします。

于 2016-08-28T07:46:43.870 に答える
2

インスピレーションについて話しているとすぐに、技術的な詳細なしで高レベルの回答を提供します. うまくいけばいいのですが、Jamie :) これを行うには、次の 3 つのオプションがあります。 1. MOM API (別名 SCOM SDK) を介してこれらのメトリックを取得します。明らかな問題 - 低パフォーマンスと管理サーバーの余分な負荷 2. SCOM DB から直接メトリックを取得します。メトリクスについて話しているので、すべてのメトリクスが両方の DB に書き込まれるため、運用 DB ではなくデータウェアハウス DW を使用することを決定する場合があります (一部の MP はそうしていませんが、主要な MP は常にメトリクスを両方の DB に送信します)。また、スキーマがより透過的であるため、DW DB に投票します。3. SaaS にデータを送信する MP にカスタム WRITE ACTION を挿入します。もちろん、これは最大限のカスタマイズを意味し、封印された MP では機能しません...そのため、想像力をかき乱すために、このオプションはそのままにしておきます。

すぐにデスクに持っていけるものです。お役に立てば幸いです。

ローマン。

于 2016-05-20T22:53:08.697 に答える