为SCOM创建自定义报表1
很久没有写博客了今天开个新坑,
话说我写的博客不少人都说看不懂,那么我只能。。。。。
既然看不懂,而且我也懒的写,那么索性就不写了
省下的时间玩会儿Xbox也是不错的,或者干点别的,好了不废话了
既然要开坑那就得开的深一点,也好让自己有个坚持写下去的动力
写这个blog也是应他人之邀,要知道写博客不难,难得是让你看得懂,
难的是让你理解我的思考过程,这个才是你看博客真正应该学会的东西
但是我尽力描述你要实在看不懂我也没办法,
我的博客只讲思路 不给你成品代码,如果因为不给你成品代码就开喷 例如某QQ是*******44的人(为了保护隐私我们隐去其中几位数字,相信明眼人都懂) 请出门左走不谢,如果你要执意开喷鄙人奉陪到底
好了说说本次博客 就如你看到的那样 本次我们要创建scom的自定义报表,
也许你说为啥不写自定义MP(不止你一个人问,但是我懒的写 你能奈我何 233333)
好了不能再废话了,再废话就成直播唠嗑了
这次自定义REPORT呢主要也是完善自己的在MP开发方面的短板,因为这个report一直不会,
好了本次我们就从如何做一个维护模式的report开始
下面说说
准备工作以及流程 大体分为这么几个部分
报表数据获取,数据展示,嵌入MP
我们今天这次就说说怎么获取数据
获取SCOM的数据一般来说有两个库 一个OperationsManager一个是OperationsManagerDW库
根据你的OM设置不同 OperationsManager的数据会在一定时间之后转入DW库
具体设置如下图 当然我这测试环境是经过修改的 修改的原因也是处于MP的测试需要 你的环境按照具体情况而定
当然如果你有其他的数据源也可以嵌入报表中这里不再多说
下面我们说说获取这些SCOM自己的数据
下面是微软的连接 连接中 有详细的demo 告诉获取这些数据
例如警报,性能等说的十分详细,大体上你需要了解几个点
1 表,视图的关系
2 你需要的字段
3 有没有用户输入的地方 例如开始,结束时间,时区等等
4 你得具备一些基础的SQL Server的查询语句 至少要会使用Select 语句因为这是你提取数据的第一步,
也许你还需要了解存储过程,因为MS自己的报表绝大部分都是存储过程
5 也许你不满足原生的Report 简陋而惨淡的样式 那么没准儿你还得自己写样式 好吧这个并不是重点。
这里是MS连接 清详细查阅
https://technet.microsoft.com/en-us/library/gg508714.aspx
Demo 请自行翻看 不再详述 我们直接来看主题 维护模式怎么找数据
其实维护数据是有地方可以插的 通过PS命令可以查出来,前提是你至少要知道一个scomClass 要是你连要查询的SCOMClass 都不知道是具体的那个 那么PS这个办法就有点淡淡的忧桑了,
按照MS的Demo给出的DW库名称 我经过不超过1分钟的看 锁定了5个视图能完成我的要求 别问我我怎么锁定的 直觉。。。。。。。直觉告诉我一定在这几个里面有我要东西
(PS 神TM直觉)
[vMaintenanceMode]
[vMaintenanceModeHistory]
[vManagedEntity]
[vManagedEntityType]
[vManagementPack]
然后我们先一个个的看看几个视图都有什么
现在是select 语句的Show time
视图 [vMaintenanceMode]
select*from [OperationsManagerDW].[dbo]. [vMaintenanceMode]
看见starttime end time了么 不出意外就是开始维护模式和结束维护模式时间但是这个时间不是你当前的时区时间 是UTC +00:00时间别问我啥知道 因为我不会在早晨7点放置维护模式那个时候我还没睡醒
ManagedEntityRowId 字段我感觉也有用 没准是用来标识置维护的对象GUID 或者表示对象Class 用的
额外的还有一个字段我十分在意MaintenanceModeRowId 这个字段感觉会用的上
然后看看下一个
视图 [vMaintenanceModeHistory]
SELECT*FROM [OperationsManagerDW].[dbo].[vMaintenanceModeHistory]
嗯哼 看起来不错竟然还获取了执行维护模式的用户,喜出望外 但是这里也有一个MaintenanceModeRowId字段 很是奇妙啊(PS 其实这个字段可以用来连接两个表)
视图[vManagedEntity]
SELECT*FROM [OperationsManagerDW].[dbo].[vManagedEntity]
嗯哼 我们已经找到不少好东西
其实到这儿位置维护模式已经搞清楚了 下面我们得找出来到底维护了谁不然这报表有个屁用
视图
[vManagedEntityType]
SELECT*FROM [OperationsManagerDW].[dbo].[vManagedEntityType]
好吧 自己看吧 相信只要眼镜不瞎都出来 字段之间的关系了 我们已经能找到SCOM的类了下面 找到类了 离找到MP还远么 当然不!
视图
[vManagementPack]
SELECT*FROM [OperationsManagerDW].[dbo].[vManagementPack]
好了 mp也找到了
下面还是select 的show time
我这里只选取了几个目前用得上的字段
StartDateTime
EndDateTime
Userid
Comment
FullName
Path
Name
DisplayName
ManagedEntityTypeSystemName
ManagementPackSystemName
这次好了 我们一次性把 开始结束时间 谁置的维护 维护的什么东西 维护的东西在那MP里全找出来了
下面就是传说的sql语句
SELECTDATEADD(hour,0,StartDateTime) as StartDateTime,DATEADD(hour,8,EndDateTime) as EndDateTime,Userid,Comment,FullName,Path,Name,DisplayName,ManagedEntityTypeSystemName,ManagementPackSystemName
from[OperationsManagerDW].[dbo].[vMaintenanceMode]
INNERJOIN [OperationsManagerDW].[dbo].[vMaintenanceModeHistory] on[vMaintenanceMode].MaintenanceModeRowId = [vMaintenanceModeHistory].MaintenanceModeRowId
INNERJOIN [OperationsManagerDW].[dbo].[vManagedEntity]on [vMaintenanceMode].ManagedEntityRowId= [vManagedEntity].ManagedEntityRowId
INNERJOIN [OperationsManagerDW].[dbo].[vManagedEntityType]on [OperationsManagerDW].[dbo].[vManagedEntity].[ManagedEntityTypeRowId]= [OperationsManagerDW].[dbo].[vManagedEntityType].[ManagedEntityTypeRowId]
INNERJOIN [OperationsManagerDW].[dbo].[vManagementPack]on [OperationsManagerDW].[dbo].[vManagementPack].[ManagementPackRowId] = [OperationsManagerDW].[dbo].[vManagedEntityType].[ManagementPackRowId]
然后 查询就变成了一个跨越多个表或者视图的集合
(PS 神一般的P图技能 233333)
So 数据我们就这么不走心的查出来了 你要问我对么 我会负责告诉你 没错 我亲自试过了 没有问题
也许你会对 DATEADD(hour,0,StartDateTime) as StartDateTime 这个有点疑问 你忘了这个时间是UTC+00的时间了么我提前准备好做多时区的打算如果你要是是北京时间就把0 替换成8就是你要的样子了
好了本次博客结束 下次我们开始用这些数据创建报表