[效能監視應用]如何在AD架構中收集效能監視資料至SQL Server

最近Jason和一位同業夥伴在討論一個議題,他們最近開發了一套系統,但是一直被客戶質疑在某些時間點上有效能瓶頸,但是在個別收錄效能資料時,無法將所有的資訊進行比對,針對所有的資訊合併在同一個畫面中去比對效能曲線。而這些資訊還有其它的應用,需要特別收錄下來,但是他們又用不到像SCOM如此龐大的系統,也只是單純的希望將幾個指標回傳回到指定的站點上...

最近Jason和一位同業夥伴在討論一個議題,他們最近開發了一套系統,但是一直被客戶質疑在某些時間點上有效能瓶頸,但是在個別收錄效能資料時,無法將所有的資訊進行比對,針對所有的資訊合併在同一個畫面中去比對效能曲線。而這些資訊還有其它的應用,需要特別收錄下來,但是他們又用不到像SCOM如此龐大的系統,也只是單純的希望將幾個指標回傳回到指定的站點上。就這一點來討論,很簡單的,效能監視器即可達成這個目標,但是,在不同的作業系統上收集特定的指標時,又會產生收集群組不同,造成無法同時顯示在同一個效能監視器之上,因此!這個專題就成了Jason所必須思考協助解決!

首先,我們建置一個模擬環境,這個環境中必須包含有客戶需求的作業系統及相關重點參數,因此我們將環境建置如下圖表所示:

機器名稱 IP 作業系統 說明
iTop-DC 192.168.0.1 Windows Server 2008 R2 作為DC及收集效能監視的SQL Server。
iTop-Web 192.168.0.10 Windows Server 2008 R2 安裝有IIS服務。
iTop-APP 192.168.0.20 Windows Server 2003 R2 安裝有DHCP服務。
iTop-Client 192.168.0.100 Windows XP 用戶端主機。

繪圖1

 

所必須達成的目標如下:

  1. 必須將效能監視器內的資料轉寫到SQL中。
  2. 所有機器的效能資料必須要能在同一畫面中比較。
  3. 能任意的抽換比對的資訊。
  4. 資料要能持續保存。

 

上面所述的目標中,比較麻煩的是必須將資料在同一個畫面中比較,相信各位都知道,效能監視器的資料轉寫到SQL時,會因為寫入的群組不同,無法呈現在同一個畫面之中,因此在這個部份會是必須要注意的節點,再者則是轉寫到SQL的處理方法,本篇全面透過UI來進行操作,所以我們必須先針對Windows Server 2003 R2及XP進行設定,因為Windows Server 2003的效能記錄是跟著效能監視器的名稱去命名,無法針對進行記錄組的名稱做另外的命名。

設定的基本流程如下:

  • 設定SQL Server,指定Windows驗證的使用者。
  • 設定ODBC,指定DSN連線資訊。
  • 設定效能計數群組,指定計數器記錄。
  • 設定效能轉存至SQL Server。
  • 指定自動啟動效能記錄。

 

 

設定SQL Server

我們先在SQL上指定一個帳號,使其僅能存取名稱命名為Perf_Log的資料庫,並且設定為該資料庫的dbowner。在這個範例中,我們在AD中建置一個Windows帳號,並這個帳號指定為Perfadmin,並且在SQL中指定為登入使用者,該帳號密碼為Passw0rd

首先於AD使用者與電腦中,在User目錄中,新增乙名使用者。

sql1

 

將其命名為PerfAdmin

sql2

 

輸入密碼後,將本使用者之密碼指定為永久有效。

sql3

 

接下來啟動SQL Server的SSMS,並且於登入中新增登入。

sql4

 

登入使用者選擇Windows驗證,並且指定為網域使用者PerfAdmin。

sql5

 

切換至資料庫後,選擇新增資料庫。

sql6

 

並將資料庫名稱指定一個好記的名稱,本處以Perf_Log命名,並指定擁有者為PerfAdmin。

sql7

 

完成後,在使用者屬性上檢查,在使用者對應中,是否屬於Perf_Log的dbo身份。

sql8

 

設定ODBC

在每一台欲收集LOG的設備上去指定登入的ODBC驗證方式,並且設定指定的計數器即可。

設定ODBC和其它設定方法完全相同,但必須指定為系統來源名稱,因此啟動ODBC管理員。

odbc1

 

並且切換至『系統資料來源名稱』點選『新增』。

odbc2

 

本機環境為Windows 2008 R2因此在沒有安裝任何服務的狀況之下,只有SQL Server的資料來源。

odbc3

 

指定一個好記的名稱,並在資料來原中,輸入具名通道的主機名稱,本例以iTop-DC安裝SQL Server。

odbc4

 

選擇使用Windows NT帳戶驗證,以便在效能監視器中指定iTop\PerfAdmin身份執行本項工作。

odbc5

 

將預設資料庫變更為方才建立的Perf_Log資料庫。

odbc6

 

本頁直接點下一步即可。

odbc7

 

 

當上步驟完成後,會跳出設定驗證,直接點下測試資料來源,以檢測是否連線順利。

odbc8

 

如下圖則為通過測試。

odbc9

 

 

設定效能計數器並轉存至SQL Server

在這個案例中,我們僅收集每台設備的指定效能計數器,但在這之前,為了安全性考量,將原本指定的Windows 帳號 PerfAdmin在每台欲蒐集效能計數的群組中,這個帳號必須存在於Performance Log Users及Performance Monitor Users中方啟動效能監視器之記錄群組。

將於AD中建置好的使用者ITOP\PerfAdmin加入 Performance Log Users及Performance Monitor Users中。※亦可直接加入AD的相對群組之中。

peruser1

 

peruser2

 

設定2003(XP亦同)記錄檔轉存SQL

於效能監視器中展開效能記錄及警示,並新增記錄檔設定。

set2k301

 

本例以Perf_log為記錄檔名稱(※本處名稱為後面自動啟動之群組名稱,與Windows 2008的收集器名稱相同用意。)

set2k302

 

完成後,將執行身份指定為 iTop\PerfAdmin,並指定設定之密碼。

set2k303

 

本例中僅示範以Memory - Available MBytes、Pages/sec及Processor(_tTotal) – %Processor Time。

set2k304

 

完成後,切換至記錄檔,本例中將記錄檔案類型為SQL資料庫。

set2k305

 

此時可以看到在範例名稱上,所看到的僅是範例名稱,沒有群組名稱。

set2k306

 

按下設定後,出現設定SQL記錄檔,選擇正確的DSN並輸入記錄組名稱(此部份必須與Windows 2003相同),正確的記錄組名稱才能使不同主機資訊顯示於相同監視器之上。

set2k307

 

設定完成後,我們可以看到範例名稱列舉為Perf_Log!iTop_Server。按下確定後,本記錄即刻生效。

set2k308

 

可見該記錄群組已於效能記錄檔中執行。

set2k309

 

設定2008記錄檔轉存SQL

本步驟與前步驟相同,僅是呈現相對映的功能及名稱說明。

setperfmonitor1

 

於效能中的資料收集器集合工具->使用者定義->新增資料收集器集合工具。

setperfmonitor2

 

此步驟的名稱與Windows 2003, XP的記錄組名稱相同,做為啟動服務時的代表名稱,必須牢記本項名稱,並設定為手動建立集合器。

setperfmonitor3

 

因我們只需要效能計數資料,故僅設定”效能計數器”選項。

setperfmonitor4

 

完成後,於效能收集器中選擇效能計數器之內容,以進行修改。

setperfmonitor5

 

並將我們所指定的效能資料擷入。

setperfmonitor7

 

完成後,修改記錄格式為SQL。

setperfmonitor8

 

並指定資料來源名稱為ODBC中指定的效能資料庫。

setperfmonitor9

 

切換至記錄檔名稱(此部份與2003, XP的記錄群組名稱相同)輸入記錄檔名稱,本例以iTop_Server命名之。

setperfmonitor10

 

接續我們進行設定效能收集器的執行身份,於方才製定的效能收集器進行內容設定。

setperfmonitor11

 

下方的執行身份即是我們要啟動ODBC時的Windows 驗證來源,在此變更為我們指定於SQL中具有權限的使用者。

setperfmonitor12

 

輸入完整網域名稱及帳號(格式為網域\使用者名稱)並輸入密碼。

setperfmonitor13

 

完成後,如下所示,執行身份已更變為iTop\PerfAdmin。

setperfmonitor14

 

接下來我們將滑鼠點在效能收集器上,上面工具列按下執行按鈕。

setperfmonitor15

 

檢查一下,輸出欄位之名稱是否與2003, XP相同。

setperfmonitor16

 

 

設定自動啟動效能記錄

當我們設定好效能收集的ODBC及效能記錄轉存SQL的設定後,還必須讓這個效能記錄器能自動的啟動,因此在於自動啟動記錄器的部份,我們可以透過開機指令稿的方式來運作,最快的方法就是在本機進行本機的群組管理原則編輯。在啟動列上輸入GPEdit.msc。

2k8auto01

 

接下來展開本機電腦原則->電腦設定->Windows設定->指令碼(啟動)->新增指令碼。

在指令碼中,我們在指令碼名稱輸入Logman,參數則輸入記綠群組的名稱及Start,本例為Perf_Log為記錄群組,因此指令碼參數為Perf_Log Start。

2k8auto02

 

而在Windows 2003中的設定也是相同的,在執行啟動後,輸入GPEdit.msc。

auto01

auto02

 

和前例相同,在啟動指令碼中,新增指令碼。

auto03

 

本例之群組名稱為Perf_Log,因此,指令碼參數亦為Perf_Log Start

auto04

 

 

成果

當我們設定好了所有的程序後,在SQL Server中,應可看到自動建立的三個資料表,分別是CounterData(是效能記錄內的每一筆效能資料)、CounterDetails(效能記錄的物件名稱及詳細描述)、DisplayToID(效能來源的電腦名稱或其它顯示資料的名稱)

setperfmonitor17

 

接下來,我們在其中一台設備上要查閱效能資料時,只需要點下記錄來源,並且選擇資料庫,選擇我們建立的ODBC的DSN,此時我們可以看到記錄組是iTop_Server,這個群組即是我們在記錄效能群組時所設定的名稱。

view01

 

在記錄群中,我們可以看到收錄進來的效能資料,有iTop-APP及iTop-WEB兩台設備的資料。

view02

 

我們為了查閱過去這兩台主機的CPU效能狀況,可以單獨立只拉相對映的物件進來做比較。

view03

 

在下圖中可以快速的查閱到兩個不同主機,相同物件的記錄器資料。

view04

 

在上述的這個過程中,我們可以發現,透過簡單的資料轉存及資料的分組,讓我們將不同屬性的設備效能集中到不同的效能群組中,以方便我們在偵查效能狀況時,得以進行相關資料的查核,以找出可能的效能瓶頸,當然,我們也可以透過這個資料收集的方式,來取得相關效能資料,也可以再將這個方式演進成為一個小型的SCOM,讓像我們這樣窮酸型的公司,可以更節省成本,並可以達成效能稽核的目的。這個議題後續還可以發展出許多的應用,後續可以再跟大家一起來分享這個議題的延伸應用。


Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security