爲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就是你要的樣子了
好了本次博客結束 下次我們開始用這些數據創建報表