使用PowerShell 監控運行時間和連接情況


概念

Powershell 是運行在windows機器上實現系統和應用程序管理自動化的命令行腳本環境。你可以把它看成是命令行提示符cmd.exe的擴充,不對,應當是顛覆。 powershell需要.NET環境的支持,同時支持.NET對象。微軟之所以將Powershell 定位為Power,並不是誇大其詞,因為它完全支持對象,面向對象的便捷可想而知了。其可讀性,易用性都非常的完美。

    在運維windows 服務器的時候,其作用是非常大的。簡潔高效等等。這里我簡單用一個我應用的地方來展示一下。

背景

    有時候我們需要監視來自特定用戶電腦對於數據庫的連接。比如該用戶說,他偶爾會斷開連接或者有時連接某個程序時出現問題,而數據庫就是我的數據庫。這個問題一開始真的很讓我着急(FUCK),因為問題不是經常能夠重現難以追蹤。即使重現了錯誤,可能提供的信息也不夠完整。

    為了幫助實現對此類問題的troubleshoot ,我編寫了兩個PowerShell 腳本。腳本能夠可以無人值守,並且日志在一段時間后查詢。我打算在用戶的PC上運行這個腳本,並且該PC在不同的網絡或者不同的子網。也可以在同一時間在SQLServer服務器運行腳本。會產生三個不同的日志文件,然后進行比較。這些腳本是對於cpu使用和負載占用很少的輕量級程序。但是必須要謹慎使用運行的查詢,盡量針對一些小的表進行查詢等,比如select count(*)from 小表。

    基本上所有這些腳本主要實現是:連接SQLServer並且執行查詢。循環執行查詢知道手動終止它。假如有錯誤重現了,就會記錄日志到日志文件然后再次連接->執行查詢。

OpenConnQueryCloseConn.ps1 - 這個腳本作用就是打開連接數據庫實例,運行sql指令,然后關閉連接。這個處理將會一次又一次的重復直到你手動關閉它。

OpenConnLoopQuery_Long.ps1 - 第二個腳本的功能就是打開連接,讓它保持打開然后重復執行查詢腳本,直到你手動終止循環才會中斷循環關閉連接。

 

 image

圖1 最大區別在於循環位置

 

    兩個腳本都會在終端和日志記錄日志。如果連接產生問題我們也希望在日志文件中看到錯誤信息。當錯誤信息只在一個日志文件中,那么有時就能引導我們發現網絡或者特定的某種錯誤。

PowerShell腳本的概述

 

首先我們來看一下OpenConnQueryCloseConn.ps1這個腳本。這個腳本一開始先設定連接參數。確保下面的參數是可用的參數。

21-27行就是我們的連接參數和查詢命令變量 。

123

圖2 主要的參數變量

$serverName="服務器名稱"
$databaseName="數據庫名稱"
$uid="User ID"
$pwd="user Password "
$sqlCommand="命令語句-比如查詢一個小表的行數"
$logLoaction="記錄日志文件的位置.   ---  c:\ps\OpenConnQueryCloseConn.log"

腳本的底部就是循環的主要部分。

121

圖3 循環部分

    fn_HitSQL 函數大部分工作已經完成了。打開數據庫連接然后不斷去執行查詢。有很多地方主要的工作就是日志記錄。如下:

321

圖4 日志記錄部分

    還有一個函數去記錄連接和錯誤。函數fn_WriteToLog 將錯誤信息附加上日期后記錄到終端然后添加到日志文件中。

321

 

    做好了以上所有工作后,執行腳本,當法傷網絡連接問題時,就會產生日志文件錯誤日志。如下:

321

錯誤日志信息

 

第二個腳(OpenConnLoopQuery_Long.ps1 )本基本上與第一個一樣如圖1 中所示一樣就是在執行語句后面緊跟着一個循環語句這樣避免了關閉連接。在一個連接中不斷重復語句。這里也就不仔細講解了。

 

運行兩個腳本需要執行powershell 腳本,指令如下,當然也可以自己拼寫:

PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnLoopQuery_Long.ps1
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnQueryCloseConn.ps1

 

需要注意的是要提前設定好路徑“C:\PS”

腳本下載地址:

沒找到如何上傳腳本...,有哪位大神可以告知。具體腳本可向我詢問留言即可。發郵箱

謝謝博友提供方式。

下載地址:

http://files.cnblogs.com/files/wenBlog/OpenConnLoopQuery_Long.zip

http://files.cnblogs.com/files/wenBlog/OpenConnQueryCloseConn.zip

總結

    本篇主要介紹了自己開發的一個利用powershell來實現的循環監測連接出現網絡異常的腳本。本質上就是循環連接查詢數據庫,記錄連接失敗或者查詢失敗的信息。之前通過C#和其他開發工具也都實現過不論是windowsService 還是其他小程序。但是感覺powershell開發起來更簡單,對機器性能影響更小,當然python也是一樣的道理。之所以選擇使用powershell主要是學習響應的語法便於將來運維windows服務器。越來越發現PowerShell的強大,與高手相比還有很大空間要去學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM