我希望在 Windows Server 2012 上的可用内存低于某个阈值时通过电子邮件收到警报
为此,我使用了用户定义的性能监视器数据收集器集。我已配置了带有性能计数器和警报条件的数据收集器。我已设置了警报任务(任务已在任务计划程序中设置)。所有操作均正常,我通过电子邮件收到了警报。
我的问题是关于数据收集器采样间隔。我将其设置为 60 秒,因为我想每分钟检查一次内存是否不足。但是,我不希望每 60 秒发出一次警报(我宁愿每 15 分钟发出一次警报)。
有没有办法让警报间隔不同于采样间隔?
答案1
我将任务的操作设置为“启动程序”而不是“发送电子邮件”。要启动的程序将是一个 Powershell 脚本,它执行以下操作:检查上次发送警报的时间,如果上次警报超过 15 分钟,则使用发送邮件消息并更新最后警报时间。您可以将最后警报时间存储在脚本旁边的辅助文件中或其他地方。
示例脚本:
$timeFile = "[PATH TO TIME FILE]"
$needNewAlert = true
if (Test-Path $timeFile -PathType Leaf) {
$starttime = [datetime](Get-Content $timeFile)
$timespan = New-TimeSpan -Start $starttime -End (Get-Date -Format u)
if ($timespan.TotalMinutes -lt 15.0) {
$needNewAlert = false
}
}
if ($needNewAlert) {
Send-MailMessage -From [email protected] -To [email protected] -Subject "I'm in too deep!"
Get-Date -Format u > $timeFile
}
另外:您可以通过将参数/标志传递到脚本中以指示问题的来源,从而使用一个脚本来为多个触发器进一步减少来自给定系统的警报电子邮件数量。您必须根据每个问题跟踪上次警报时间(一种方法是将源/时间戳对保存在字典/哈希表中,并使用将对象保存到文件中导出-CliXML并加载对象导入-CliXML),则您可以让电子邮件正文成为以此方式报告的所有当前问题的摘要。