如果乙個服務被部署到了幾十台機器上,我們往往需要每天花費很多的時間去檢視每台機器上的服務的執行狀 況,雖然微軟有mom(microsoft operations manager)和sms(systems management server),但處於成本上及其它方面的考慮,好多時候我們還用不上這些東西,其實微軟公開了好多管理和監控方面的api和工具,比如wmic, system.managerment等,把這些零散的api和工具集中起來,便可以開發一些滿足自定義需求的小軟體。
我們要實現以下任務
1、確認指定的程序已啟動
2、獲取指定機器,指定程序的cpu、記憶體、執行緒使用情況
3、確認指定機器的指定埠在監聽
4、獲取指定機器指定計數器的情況
5、獲取指定機器上的系統日誌/應用日誌
6、獲取指定服務相關trace
7、確認指定服務的功能撥測能通過
8、抓取指定機器指定程序的dump
9、在指定機器上進行網路抓包
10、重啟指定機器上的某服務,某應用程式程序池等
下面來一一考慮一下
1、確認指定的程序已啟動
可以用wmi介面來獲取遠端機器的程序列表,然後遍歷這個列表,確認指定服務的程序名字是否在這個列表裡,核心**(來自網路)如下:
public static datatable runningprocesses()
return result;
}2、獲取指定機器,指定程序的cpu、記憶體、執行緒使用情況
這幾樣資料,我們用計數器來獲取,具體**如下
某程序的cpu使用量:process類別下的% processor time,例項名是你服務的程序名字(不加字尾名)
某程序的記憶體使用量:process類別下的private bytes,例項名是你服務的程序名字(不加字尾名)
某程序的記憶體使用量:process類別下的thread count,例項名是你服務的程序名字(不加字尾名)
其它的計數器的說明請開啟perfmon工具乙個乙個看每個計數器的說明文字
關於獲取某機器某計數器數值的**大約如下
public static string ping(string remotehost)
public static string telnet(string remotehost, int port)
",remotehost, port);
proc.startinfo.useshellexecute = false;
proc.startinfo.redirectstandardoutput = true;
proc.start();
return proc.standardoutput.readtoend();
}如 果要獲取某台機器上的網路鏈結情況,可以呼叫gettcptable的win32 api,因為執行這個任務我們一般是用netstat命令,而且我沒有找到使用wmi獲取類似netstat輸出的介面,當然,gettcptable也 不能遠端執行。如果誰找到在a機器上執行b機器上的命令列程式並獲取標準輸出的方法請告訴我。
4、獲取指定機器指定計數器的情況
具體做法上面已經發過了,只是有時候我們要檢視一些服務的業務邏輯方面的計數器,關於建立自定義計數器,可以參考以下鏈結
", entry.timegenerated, entry.message);
break;}}
}}6、獲取指定服務相關trace
trace 一般都是寫入本機的一些文字檔案或者集中寫入的乙個trace資料庫,trace一般都會有機器名,服務名等,根據這些條件去找到文字trace的路徑然 後用streamreader讀取,或者用sqldataadapter來獲取資料庫裡的trace記錄。具體**就不寫了。
7、確認指定服務的功能測試能通過
我 們可以把功能測試的**封裝成乙個console程式,然後以程式設計的方式去執行,然後獲取這些輸出,輸出結果應類似:「a用例通過,b用例出錯。。。」, 關於執行外部程式可以參考上文中呼叫ping的**,如果你的服務只能在本機測試,要先部署在遠端機器上,然後用wmi遠端執行它,並把測試結果用網路 api發給你。
8、抓取指定機器指定程序的dump
這需要執行遠端機器上的程式,實現在所有的伺服器上裝好windbg,並約定好路徑,抓網路包也要實現裝好wireshark。用wmi執行程式的**大約如下,下面的**沒有寫管理作用域,如果要加的話參考上面的**
public static void execute(string command)
可以先用wmi獲取遠端機器上服務的pid,然後遠端執行"adplus -hang -p 2233 -quiet -o d:\dumps",然後可以以程式設計的方式通過網路共享把dump拷貝到本地。
9、在指定機器上進行網路抓包
具體方式和抓dump差不多,實現要在遠端機器上裝好wireshark,命令列模式抓包大概如下
at 14:33 "c:\program files\wireshark\dumpcap.exe" -i 2 -a duration:604800 -b files:1000 -f "host 10.0.0.1 and port 8081" -b filesize:10240 -w d:\network_dump\1.cap
具體引數參考wireshare的幫助,這是起乙個任務去抓,你可以把at命令去了,也許你的伺服器有多個網絡卡,所以實現要指定好要抓包的網絡卡,獲取遠端機器網絡卡資訊的vbs**如下,請自己修改為c#
on error resume next
strcomputer = "."
set objwmiservice = getobject("winmgmts:" _
& "!\\" & strcomputer & "\root\cimv2")
set colitems = objwmiservice.execquery("select * from win32_networkadapter where netconnectionstatus =2")
for each objitem in colitems
wscript.echo "name: " & objitem.name
next
dumpcap.exe的-i引數解釋如下,有了網路介面卡的名字或者索引就可以抓包了
-i name or idx of inte***ce (def: first none loopback)
wmic process call create
wmic 全新的超級命令列管理工具
一些wmic例子
關於 wmic 的使用
管理軟體實施(1) 什麼是管理軟體
題記 搞管理軟體實施很多年了,發現這項任務對乙個專案的影響如此巨大,但在很多公司卻沒有引起足夠的重視,於是想寫點東西總結一下自己的工作經驗,希望能對同行有些許幫助,今天開篇了。如果效果不錯,希望能集結成書,姑且給這本書命名為 軟體實施 吧。當一家組織需要通過管理軟體來改善管理的時候,就需要啟動乙個管...
印刷管理軟體
自動排版軟體 印刷軟體 pdf自動排版 拼大版 印刷廠由於是名片與宣傳單很多,用corel排版又可能出錯,發現問題也不及時,而pdf流程可以最大程度的減少這種情況,所以開發了pdf印刷排版軟體 印刷製版軟體,速度大約1分鐘一版,實際程式用時大約30秒就可以了 以下僅以排版元件為例 由於軟體是要裝伺服...
BUG管理軟體
1.bugtracker.net 簡單開源的.net程式。適合小團隊使用。作為compuware專案管理軟體整合的乙個重要組成部分,trackrecord目前已經擁有眾多的企業級使用者,它基於傳統的缺陷管理思想,整個缺陷處理流程完備,介面設計精細,並且對缺陷管理資料進行了初步的加工處理,提供了一定的...