【原創】SSIS-WMI 數據讀取器任務:監控物理磁盤空間

1、背景

      隨着時間的推移,我們的DW會越來越大,也就意味着磁盤空間會越來越小,那如果哪一天留意不當,就會造成磁盤空間的不足而導致ETL失敗,最終影響我們的系統的數據正確性和使用,更嚴重的有可能導致物理磁盤損壞,所以對於物理磁盤空間的監控必不可少。

     下面的方法就是利用SSIS中的WMI數據讀取器任務去每天查詢物理磁盤的空餘空間,當不足時發郵件以提示管理員。

     image

2、步驟

2.1、新建一個SSIS包,從工具欄上拖拉一個[WMI 數據讀取任務]到控制流,雙擊編輯組件屬性

 

新建變量

變量名 類型 用途
DiskUsageRet string 用於存儲結果集
Flag int 用於判斷磁盤空間的剩餘空間是否不滿足要求

在[WmiConnection]欄,新建個WMI連接管理器

 image

在[服務和命名空間]選項中,[服務器名稱]輸入你要監視的服務器的\\ + IP地址,命名空間默認即可

P.S:如果[服務器名稱]爲本機地址,則必須使用windows身份驗證,如果使用用戶憑據,則有可能會出現如下圖錯誤,如果是遠程的服務器地址,則需要使用相應的用戶名和密碼登錄

1

配置完畢後點擊測試,看是否驗證通過

2.2、在在組件的屬性編輯界面,[WMI選項]中,設置[WqlQuerySource]爲以下語句

SELECT FreeSpace FROM Win32_LogicalDisk where DriveType= 3 and DeviceID='C:'

該語句是查詢對應磁盤的剩餘空間,剩餘空間單位是Bit,所以需要我們後面自行換算。當然Win32_LogicalDisk有很多其他的字段,你可以輸入select * from Win32_LogicalDisk,並且在對應的OutputType設置[數據表],在OverwriteDestination設置[覆蓋目標],並將結果映射到變量中,最後用腳本組件,查看變量中的返回結果,你就可以大概知道其中的關鍵字段有哪些,代表何種含義,以下是本人查詢結果,全部字段:

所有字段 Access, Availability, BlockSize, Caption, Compressed, ConfigManagerErrorCode, ConfigManagerUserConfig, CreationClassName, Description, DeviceID, DriveType, ErrorCleared, ErrorDescription, ErrorMethodology, FileSystem, FreeSpace, InstallDate, LastErrorCode, MaximumComponentLength, MediaType, Name, NumberOfBlocks, PNPDeviceID, PowerManagementCapabilities, PowerManagementSupported, ProviderName, Purpose, QuotasDisabled, QuotasIncomplete, QuotasRebuilding, Size, Status, StatusInfo, SupportsDiskQuotas, SupportsFileBasedCompression, SystemCreationClassName, SystemName, VolumeDirty, VolumeName, VolumeSerialNumber
每個字段對應的值 0, , , C:, False, , , Win32_LogicalDisk, Local Fixed Disk, C:, 3, , , , NTFS, 13594468352, , , 255, 12, C:, , , , , , , True, False, False, 80533680128, , , True, True, Win32_ComputerSystem, JOHN-PC, False, OS, F636E868

 

image

關鍵屬性講解:

WmiConnection 連接WMI服務器對象,需要我們創建一個WMI連接
WqlQuerySourceType 查詢語句存放類型(地方)
WqlQuerySource 查詢語句,根據存放類型的不同,這裏會有相應的變換,如果存放類型選擇文件,這裏就需要選擇對應的語句文件
OutputType 查詢結果輸入形式。
數據表:一個完整的數據表結果集
屬性名稱和值:以一個屬性名稱和一個值一行的結果集形式返回,如:FreeSpace, 13587701760
屬性值:單純範圍查詢字段的值集合
OverWriteDestination 寫入目標的方式。
保留原始值:保留目標中的原始值
覆蓋目標:將結果覆蓋目標中的值
追加到目標:將結果值追加到目標
DestinationType 目標類型。
變量:結果保存到變量
文件連接:將結果保存到文件
Destination 目標對象
根據DestinationType不同,設置不同

2.3、將我們的查詢結果保存到變量之後,我們就可以利用腳本組件,判斷變量中的結果,以檢視磁盤查詢的空間是否滿足要求

image

編輯腳本,其中的main方法如下:

public void Main()
{
double unit = 1024 * 1024 * 1024;
      //查詢的space是以b爲單位的,必須將其換算成G,這裏判斷是否小於20G
      double diskspace = Convert.ToDouble(Dts.Variables["DiskUsageRet"].Value) / unit / 20;
      if (diskspace < 1)
      {
            Dts.Variables["Flag"].Value = 1;
            // MessageBox.Show("空間不足20G", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
      }
      else
      {
            Dts.Variables["Flag"].Value = 0;
            // MessageBox.Show("空間大於20G", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
      //MessageBox.Show(Dts.Variables["DiskUsageRet"].Value.ToString());
      Dts.TaskResult = (int)ScriptResults.Success;
}

最後我們在寫一個發送郵件的腳本,對於結果發送郵件即可

public void Main()
{
    MailMessage mymail = new MailMessage("xxxx@126.com", "[email protected]", "服務器C盤空間不足", "服務器C盤空間不足,請檢查");
    SmtpClient smtp = new SmtpClient("smtp.126.com");
    smtp.Credentials = new NetworkCredential("xxxx@126.com", "密碼");
    smtp.Send(mymail);
    Dts.TaskResult = (int)ScriptResults.Success;
}

最終但我們的空間不滿足檢查要求的時候,我們就可以收到郵件提醒了

image

如果覺得這篇文章看了對您有幫助,請點擊右下方按鈕【推薦
以方便他人在 BITechStack 博客推薦欄中快速看到這些文章,感謝!。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章