對於服務器的監控,和對數據庫的監控,不多有合二爲一的工具,若是有的話,通常是付費軟件,或者自行開發的工具。
因此若是不想購買軟件,也不想花精力去開發的話,能夠結合一些免費/開源的工具、自定義腳本,來完成對數據庫服務器的監控。ios
一. 第三方工具
1. 開源工具
好比:CACTI,Nagios,Zabbix等等,除了主機外,對於網絡上的其餘設備,好比路由器等也能夠一併監控。
以CACTI爲例(CACTI能夠在windows下安裝),服務器監控的圖示:
(1) 設備狀態
sql
(2) SQL Server服務狀態
數據庫
(3) 服務器事件日誌
編程
(4) 磁盤空間
windows
(5) 內存使用
安全
(6) CPU使用
服務器
(7) 網卡使用
網絡
(8) 交換機流量
工具
從圖片中能夠發現,服務器狀態監控沒問題,不過對於服務器性能的監控,僅僅是在磁盤空間/內存/CPU/網絡帶寬的使用量上面,沒有細緻的性能計數器信息。性能
這些開源的工具,大多基於SNMP協議(Simple Network Management Protocol,簡單網絡管理協議),該協議用以監測鏈接到網絡上的設備狀態,對於設備自身的詳細性能參數,一般須要安裝額外的插件來完成(這也是unix的思想 ),好比上面用到的syslog插件,用於接收windows事件日誌;好比有人集成了snmptools插件,用於接受windows性能計數器信息。
2. 付費工具
不一樣工具,側重點也不同:
(1) 有的偏向主機監控,好比:MOM(Microsoft Operations Manager),SCOM(System Center Operations Manager,SCOM是MOM的升級版,就像lync是communicator的升級版同樣),whatsup gold;
(2) 有的偏向SQL Server數據庫監控,好比:Idera SQL Diagnostic Manager,SQL Sentry,Red-gate SQL Monitor;
(3) 有的是工具套件,不一樣功能選擇其中某一款,好比:Quest Spotlight,BMC Patrol(已更名爲BMC Performance Manager)
這些Windows平臺的工具,大多對性能計數器支持的很好,一般是基於WMI實現的。
WMI :Windows Management Instrumentation,Windows 管理規範,WMI容許經過一個公共的接口訪問多種操做系統構成單元,用戶可使用工具軟件和腳本程序,調用 WMI 管理本地和遠程計算機。
以sql monitor爲例,服務器監控的圖示:
(1) 有限的windows監控選項
(2) 對性能計數器支持的很直接
二. 性能監視器能夠用來作監控嗎?
關於性能監控,不少人可能想過在SQL語句裏,把性能計數器的值一併讀出來,不過從權限/安全的角度來講,SQL Server(應用程序)不該該也不能反向關心windows(操做系統)沒有分配給它的資源,因此在sys.dm_os_performance_counters裏能查到的也只是SQL Server本身的性能計數器值。
不過話說回來,有些DMV/SQL語句確實是能夠查看操做系統資源使用狀況的,僅限部分,應該是SQL Server自身作了實現,畢竟是自家的東西。
若是想要本身作基於性能計數器的監視,不會使用開發工具,只會寫點SQL語句,怎麼辦?
把性能計數器的日誌記錄保存出來,導入到數據庫裏用SQL語句分析,作告警。
1. 如何取性能計數器的值?
(1) 直接查看性能計數器的界面,僅限於查看,沒法保存日誌記錄;
(2) 事先定義一個文件來保存性能計數器,打開性能監視器,裏面有這個功能,windows 2003叫counter logs,windows 2008叫data collector,如圖:
若是要自動化的話,能夠用命令行工具typeperf,功能和圖形界面是同樣的。
2. 如何分析性能計數器日誌?
(1) 直接查看日誌,能夠藉助perfmon/excel/PAL等工具來分析,但這些工具只能幫忙生成圖表,不能作自動化,不能作告警;
(2) 導入數據庫作分析,可以使用 Log Parser/SSIS等任何能自動把性能計數器日誌導入數據庫的工具,而後利用SQL 語句來作分析,既然是監控,那就得實時點,導入的頻率得高些。
第三方工具一般都有頁面告警,短信,郵件等等告警方式,若是本身作開發,告警這塊也須要本身來實現,一般數據庫這端都是用郵件來告警。
設置告警的閥值須要有系統的性能基線,若是不是很肯定的話,就設的高一點,至少性能日誌已經被記錄了,追溯也不是問題。
小結
服務器監控推薦使用開源工具,若是對於開源工具的性能監控不太滿意,能夠:(1) 擴展開源工具的插件 (若是有預算,也許能夠選擇付費工具);(2) 自行開發,要麼基於性能計數器日誌 (適合只會數據庫開發的人),要麼基於WMI接口 (我的以爲基於WMI更簡便,但得有點編程基礎,起碼知道程序/腳本里怎麼去調用WMI)。