前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置自定义消息实现Windows服务器CPU和内存高利用率时触发告警抓住最佳时机上机排查

配置自定义消息实现Windows服务器CPU和内存高利用率时触发告警抓住最佳时机上机排查

原创
作者头像
Windows技术交流
修改2020-10-14 11:11:14
2.8K0
修改2020-10-14 11:11:14
举报
文章被收录于专栏:Windows技术交流

问题现象:经常远程不上,需要重启才能远程上,远程不上时查看云监控CPU或内存指标都是接近100%的利用率。

处理思路:设置监控告警,当内存或CPU利用率超过85%时触发告警,然后立即上机调出任务管理器查看是什么进程占用CPU或内存最多或者上机后在powershell里执行get-process |sort-object ws -descending |select-object -first 10查看内存使用率排名前10的进程,执行get-process |sort-object cpu -descending |select-object -first 10查看CPU使用率排名前10的进程。

有2种监控告警,一种是平台告警功能需要自己配置,一种是自定义消息需要自己写代码实现业务逻辑。2种的共同点是都需要先配置告警接收人,然后新建策略。前者的策略逻辑是平台实现的,后者的策略逻辑是自己写代码实现的。

首先配置告警接收人

https://console.cloud.tencent.com/cam

或者在“[默认项目]默认监控接收组”里添加用户

https://console.cloud.tencent.com/cam/groups

先把用户添加到组,关联手机、邮箱(必须做关联

https://console.cloud.tencent.com/monitor/message

这里主要说自定义消息监控告警,平台监控告警在另一篇文档里说(https://cloud.tencent.com/developer/article/1557962)

自定义消息控制台:

https://console.qcloud.com/monitor/message

自定义消息文档:

https://cloud.tencent.com/document/product/248/6218

该文档Windows示例部分能直接执行cagent_tools命令是因为设置了C:\Program Files\QCloud\Monitor\Barad\的环境变量,如果是用户自己导入的镜像,需要用户自己设置环境变量或者用命令切换到cagent_tools所在目录再执行。如果是cmd,用cd /d "C:\Program Files\QCloud\Monitor\Barad\"切换目录;如果是powershell,用cd "C:\Program Files\QCloud\Monitor\Barad\"切换目录(注意没有/d)

记录下策略IDcm-812hsdyc(后面的代码里替换成你自己的策略ID)

编写powershell脚本mem.ps1

$a=(get-wmiobject -class Win32_PhysicalMemory -namespace "root\cimv2").Capacity

$b=(get-wmiobject -class Win32_PerfFormattedData_PerfOS_Memory -namespace "root\cimv2").AvailableMBytes

$c=$a/1024/1024

$d=$c-$b

$e=$d/$c

cls

echo 您当前总内存$c 可用内存$b 已用内存$d 内存使用率$e

cd "C:\Program Files\QCloud\Monitor\Barad\"

If( $e -gt 0.55 ){

.\cagent_tools alarm "内存利用超过55%" cm-812hsdyc

}

以上代码保存为mem.ps1,设置计划任务每1分钟执行1次,触发后会收到告警信息,到时候立即上机器调出任务管理器看下是哪个进程占用内存最多

为了快点触发告警,以上示例截图,我设置的内存利用超过55%告警(因为我调出任务管理器发现我的机器内存利用超过60%了,为了快速验证,设置的告警值比它小)

告警成功后可以在控制台查看详情

单次告警成功了,只差设置计划任务

参考如下2个文档

https://www.cnblogs.com/52php/p/5681412.html

https://blog.csdn.net/kk185800961/article/details/50587794

打开计划任务的快捷方式在 “管理工具”内

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Task Scheduler.lnk

红色圈出的地方特意去掉了“不存储密码”前面✅里的对勾

“重复任务间隔”没有1分钟的选项,那就选5分钟,手动把5改成1

触发器根据自己的需要进行选择,最常用的是这3个:在系统启动时触发、当任何用户登录时触发、当创建任务或修改任务时触发。我一般选“当创建任务或修改任务时触发”。

上图里的条件都是限定条件,不选就是不限定。

如果是为了一直运行,需去掉上图“如果任务运行时间超过以下时间,停止任务”前面✅里的对勾

计划任务创建好后的状态关注下,如果是“准备就绪”状态,需要在计划任务上右击点“运行”

如果是已经成功执行过一次了,那状态就会变成“排队”等待下一次执行计划任务里对应的操作

一切就绪后,我试了很多次都没有成功,最后发现是忽视了这个细节,powershell脚本跟bat有区别

同样,CPU利用率告警也可以如法炮制

cpu.ps1脚本内容如下

$Server = $env:computername

$cpu = gwmi -computername $Server win32_Processor

$PercentCPU = "{0:0.0} %" -f $cpu.LoadPercentage

$memory = (get-wmiobject -class Win32_PhysicalMemory -namespace "root\cimv2").Capacity

$Allmemory = "{0:0.00} MB" -f ($memory/1024/1024)

$mem = gwmi -ComputerName $Server win32_OperatingSystem

$Allmem = "{0:0.00} MB" -f ($mem.TotalVisibleMemorySize / 1KB)

$Freemem = "{0:0.00} MB" -f ($mem.FreePhysicalMemory / 1KB)

$PercentMEM = "{0:0.00} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)

Write-Host "COMPUTER:$Server"`r`n

Write-Host "CPU Used: $PercentCPU"`r`n

Write-Host "Total Physical Memory:$Allmemory"`r`n

Write-Host "Total Visible Memory:$Allmem"`r`n

Write-Host "Free Physical Memory:$Freemem"`r`n

Write-Host "Mem Used:$PercentMEM"`r`n

$IpAddr = (Get-WmiObject -class win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').ipaddress[0]

Write-Host "IP Address:$IpAddr"`r`n

cd "C:\Program Files\QCloud\Monitor\Barad\"

If( $PercentCPU -gt 0.01 ){

.\cagent_tools alarm "CPU利用超过1%" cm-812hsdyc

}

示例中设置的CPU利用率超过1%触发告警是为了快速验证,实际操作中根据自己的需求来,别忘了把策略ID替换成你自己的。定时任务设置1分钟1次,看看这效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档