注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

PowerShell性能监控告警  

2015-11-27 09:42:52|  分类: 脚本/跳板/效率/ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.cnblogs.com/dreamer-fish/archive/2013/03/05/2944948.html

实际上,我们可以通过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
复制代码
  评论这张
 
阅读(273)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018