PowerShell性能監控告警


實際上,我們可以通過PowerShell來獲取性能計數器的值,比如當計算機可用內存小於500MB時,則自動發送郵件告警。

在PowerShell中,並沒有專門的命令來獲取性能計數器的值,也無法直接發送郵件,都需要先創建.Net Framework類的實例。

1)獲取性能計數器代碼如下:

#新建性能計數器對象

$counter = New-Object Diagnostics.PerformanceCounter

#添加計數器,此處監視內存性能

$counter.CategoryName = "Memory"

#添加計數器屬性值,此處監視可用內存

$counter.CounterName = "Available MBytes"

#獲取當前計數器的值

$value = $counter.NextValue()

2)發送郵件代碼如下:

#定義SMTP服務器地址,發件人賬戶及其密碼

$smtpServer = "smtp.163.com"

$smtpUser = "sender@163.com"

$smtpPassword = "mypasswd"

 

$mail = New-Object System.Net.Mail.MailMessage

#定義發件人郵箱地址、收件人郵箱地址

$MailAddress="sender@163.com"

$MailtoAddress="receiver@126.com"

$mail.From = New-Object System.Net.Mail.MailAddress($MailAddress)

$mail.To.Add($MailtoAddress)

 

#定義郵件標題、優先級和正文

$mail.Subject = "警報";

$mail.Priority  = "High"

$mail.Body = "PowerShell發送郵件測試!"

 

完整的代碼如下:

#添加性能計數器

$counter = New-Object Diagnostics.PerformanceCounter

$counter.CategoryName = "Memory"

$counter.CounterName = "Available MBytes"

$value = $counter.NextValue()

#設置預設閥值

$prevalue = 500

 

#定義SMTP服務器地址,發件人賬戶及其密碼

$smtpServer = "smtp.163.com"

$smtpUser = "sender@163.com"

$smtpPassword = "mypasswd"

 

$mail = New-Object System.Net.Mail.MailMessage

#定義發件人郵箱地址、收件人郵箱地址

$MailAddress="sender@163.com"

$MailtoAddress="receiver@qq.com"

$mail.From = New-Object System.Net.Mail.MailAddress($MailAddress)

$mail.To.Add($MailtoAddress)

 

#定義郵件標題、優先級和正文

$mail.Subject = "警報";

$mail.Priority  = "High"

$mail.Body = "XX值已達到$value,已超出預設閥值$prevalue!"

 

#判斷是否超過預設閥值,如超出則發郵件報警

If ( $value -gt $prevalue)

{

 $smtp = New-Object System.Net.Mail.SmtpClient -argumentList $smtpServer

 $smtp.Credentials = New-Object System.Net.NetworkCredential -argumentList $smtpUser,$smtpPassword

 $smtp.Send($mail)

}

 

 

===============================================

#查看當前CPU利用率

 1 $counter = New-Object Diagnostics.PerformanceCounter
 2 
 3 $counter.CategoryName = "Processor"
 4 
 5 $counter.CounterName = "% Processor Time"
 6 
 7 $counter.InstanceName = "_Total"
 8 
 9 while ($true)
10 
11 {
12 
13 $value = $counter.NextValue()
14 
15 Write-Host "CPU: $value"
16 
17 sleep 1
18 
19 }

 

#查看進程的CPU利用率:

1 #取CPU核心數量,如果計算機為多核心的話,Process/% Processor Time的結果為每個核心的CPU利用率之和,會大於100%
2 $cpus = (gwmi win32_computersystem).NumberOfLogicalProcessors
3  
4 $counter = New-Object Diagnostics.PerformanceCounter
5 $counter.CategoryName = "Process"
6 $counter.CounterName = "% Processor Time"
7 $counter.InstanceName = "winrar" #定義需要監視的進程
8 #獲取當前計數器的值
9 $counter.NextValue()/$cpus

 

NumberOfCores:表示CPU核心數
NumberOfLogicalProcessors:表示CPU線程數

 

#查看進程的內存使用情況:

1 $TotalMemory = (Get-WmiObject -Class Win32_PhysicalMemory |measure capacity -sum).Sum   #(gwmi win32_computersystem).TotalPhysicalMemory
2 
3 $counter = New-Object Diagnostics.PerformanceCounter
4 $counter.CategoryName = "Process"
5 $counter.CounterName = "Working Set - Private"
6 $counter.InstanceName = "ZQErpService" #定義需要監視的進程
7 #獲取當前計數器的值
8 
9 $counter.NextValue()/$TotalMemory

 


免責聲明!

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



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