1

我正在寻找一些灵感来了解如何访问 SCOM 收集的指标?本质上,我想提取 CPU、内存和磁盘利用率指标,标准化并通过 API 发布到外部 SaaS 解决方案。

由于 SCOM 已经收集了这些指标,因此安装另一个代理来收集似乎很愚蠢,尽管在这种情况下第二个代理不是一个选项:/

我将不胜感激任何帮助。

谢谢,

Ĵ

4

2 回答 2

3

因此,正如 Roman 所建议的,SCOM 有两个 DB。运营和数据仓库。收集性能数据的 MP 应将收集的数据显式保存到 DB 或两者。通常,您会希望数据从精心设计的 MP 保存到两个数据库中。DB 之间的主要区别在于 Operational DB 存储几乎“实时”数据(10-20 分钟间隔),但 DW 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))

注意:两个数据库中的所有时间戳都是 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 版本的处理器)。您可以将名称更改为其他可用的计数器,也可以将其用于每小时vPerfHourlyvPerfDaily每天的聚合。

此致。

于 2016-08-28T07:46:43.870 回答
2

一旦我们谈论灵感 - 我将提供一个没有技术细节的高级答案。我希望没问题,Jamie :) 所以我可以在这里看到三个选项: 1. 通过 MOM API(又名 SCOM SDK)获取这些指标。明显的问题 - 管理服务器上的低性能和额外负载 2. 直接从 SCOM DB 获取指标。我们谈论的是指标,因此您可能决定不使用 Operational DB,而是使用 Datawarehouse DW,因为所有指标都写入两个 DB(一些 MP 不这样做,但主要 MP 总是将指标发送到两个 DB)。我也投票支持 DW DB,因为它具有更透明的架构。3. 将您的自定义 WRITE ACTION 注入您想要将数据发送到 SaaS 的 MP。当然,这意味着最大程度的自定义,并且不适用于密封的国会议员......所以让我们留下这个选项只是为了扰乱你的想象力:

这就是我可以立即带到办公桌上的东西。我希望它有所帮助。

罗马。

于 2016-05-20T22:53:08.697 回答