监视器定义对象的运行状况状态。 对象可以有三种运行状况状态之一:绿色(成功或正常)、黄色(警告)或红色(严重或不正常)。 例如,磁盘驱动器容量监视器可能会将绿色定义为小于 85% 的填充百分比,将黄色定义为大于 85% 的填充百分比,将红色定义为大于 90% 的填充百分比。 可以将监视器配置为在状态发生变化时生成警报。
收到警报时,可以在警报详细信息中看到警报是由规则还是监视器生成。 如果警报是由监视器生成的,最佳做法是允许监视器在运行状况恢复正常时自动解析警报。 如果在对象处于警告或不正常状态时关闭警报,则问题仍无法解决,但不会生成其他警报。
如果监视器在运行状况更改为红色时生成警报,并且确实解决了警报,则还必须重置监视器的运行状况状态。 如果未重置监视器,则生成警报的相同条件可能会再次发生,但不会生成任何警报,因为运行状况未更改。
在 2019 年之前的 Operations Manager 中,如果在对象处于警告或不正常状态时关闭警报,则问题仍无法解决,但不会生成进一步的警报。 已在 Operations Manager 2019 中修复此行为,此行为通常会导致出现以下应用场景:系统中没有活动警报,但却存在基础性问题。
使用 Operations Manager 2019 时,除非相应监视器的运行状况状态正常,否则无法关闭监视器生成的警报。 如果尝试关闭由不正常的监视器生成的警报,将显示一条错误消息,并且不会关闭警报。
可以从操作控制台和 Web 控制台检查此新行为。
操作控制台
执行以下步骤:
打开 Operations Manager 控制台并选择“监视”
监视概述 显示监视器和当前警报的运行状况状态摘要。
在导航窗格中选择 “活动警报 ”。
右键单击警报,该警报由处于不正常状态的监视器生成。
将解析状态设置为 “已关闭”。
出现以下消息,指出警报未关闭的原因:
当前所选内容中的警报无法关闭,因为生成这些警报的监视器仍处于不正常状态。 有关无法关闭的警报的更多详细信息,请查看 Operations Manager Web 控制台中的“警报关闭失败”仪表板
注释
若要关闭此警报,必须手动将相应监视器的运行状况重置为正常状态。 如果 此监视器的 autoresolve 设置为 true,则在重置运行状况后,警报将自动关闭。 否则,在健康状态重置后,必须手动关闭警报。
Web 控制台
打开 Web 控制台并选择“ 监视”。 监视概述 显示监视器和当前警报的运行状况状态摘要。
在导航窗格中选择 “活动警报 ”。
打开警报,该警报由处于不正常状态的监视器生成。
将解决状态设置为“已关闭”并“保存”更改。
出现以下消息,指出警报未关闭的原因:
当前警报无法关闭,因为已生成此警报的监视器仍然不正常
注释
若要关闭此警报,必须手动重置生成此警报的相应监视器的运行状况。
手动重置监视器的健康状态以响应相应的警报
执行以下步骤:
在导航窗格中,选择“警报关闭失败”仪表板。 该仪表板会列出 Operations Manager 因生成警报的监视器运行不正常而无法关闭的警报。
可以通过以下两种方式重置相应警报的监视器的运行状况状态:
- 在仪表板中选择一个警报,然后选择仪表板操作 重置警报状态。 或
- 在此仪表板中选择一个警报,以导航到警报详细钻取页面(此处会显示警报的所有相关信息),然后在任务窗格中选择“重置运行状况任务”。
警报更新 API
如果警报关闭是由外部系统(如事件管理系统)触发的,而由于相应的监视器状态不佳未能关闭警报,则异常会连同警报详细信息一起传递,这些信息可能会被其他外部系统使用。
以下现有警报更新 API 可用于外部化警报更新数据。 这两个 API 已得到增强,可以实现此新行为的外部化:
以下示例显示有关如何使用异常 AlertMonitorUnhealthyException 的详细信息。
namespace MonitorAlertClosureFailureExample
{
class Program
{
static void Main(string[] args)
{
ManagementGroup mg = new ManagementGroup("localhost");
// Get database availability alerts.
MonitoringAlertCriteria alertCriteria = new MonitoringAlertCriteria(
"Name LIKE '%DBStatusMonitor' AND Category = 'AvailabilityHealth'");
IList<MonitoringAlert> alerts =
mg.OperationalData.GetMonitoringAlerts(alertCriteria, default(DateTime));
// Find the "Closed" resolution state that is defined
// for this Management Group.
IList<MonitoringAlertResolutionState> alertStates = mg.OperationalData.GetMonitoringAlertResolutionStates();
MonitoringAlertResolutionState closedState = null;
foreach (MonitoringAlertResolutionState thisState in alertStates)
{
if (thisState.Name == "Closed")
{
closedState = thisState;
}
}
// Close all alerts not already in the "Closed" resolution state.
foreach (MonitoringAlert a in alerts)
{
a.ResolutionState = closedState.ResolutionState;
string comment = "Closing the Alert";
try
{
a.Update(comment);
}
catch (AlertMonitorUnhealthyException e)
{
// It mean the alert being closed is a monitor alert and the monitor which generated this alert is still unhealthy
// take an appropriate action. Here an error message is being displayed at console
Console.WriteLine("The alert with Alert Name" + a.Name + "cannot be closed as the monitor which genrated the alert is still unhealthy.")
}
catch (Exception e)
{
// generic exception during the update of the alert
Console.WriteLine("Closing the alert with alert name" + a.Name + "is failing because" + e.Message)
}
}
}
}
namespace MonitorAlertClosureFailureExample
{
class Program
{
static void Main(string[] args)
{
ManagementGroup mg = new ManagementGroup("localhost");
// Get database availability alerts.
MonitoringAlertCriteria alertCriteria = new MonitoringAlertCriteria(
"Name LIKE '%DBStatusMonitor' AND Category = 'AvailabilityHealth'");
IList<MonitoringAlert> alerts =
mg.OperationalData.GetMonitoringAlerts(alertCriteria, default(DateTime));
// Find the "Closed" resolution state that is defined
// for this Management Group.
IList<MonitoringAlertResolutionState> alertStates = mg.OperationalData.GetMonitoringAlertResolutionStates();
MonitoringAlertResolutionState closedState = null;
foreach (MonitoringAlertResolutionState thisState in alertStates)
{
if (thisState.Name == "Closed")
{
closedState = thisState;
}
}
// Close all alerts not already in the "Closed" resolution state.
string comment = "Closing the alert";
foreach(MonitoringAlert a in alerts)
{
a.ResolutionState = closedState.ResolutionState;
}
IList<MonitoringAlertUpdateFailure> updateFailures = mg.OperationalData.UpdateMonitoringAlerts(alerts, comment);
if (updateFailures != null && updateFailures.Count > 0)
{
foreach (MonitoringAlertUpdateFailure failure in updateFailures)
{
if(failure.Exception is AlertMonitorUnhealthyException)
{
// It means the alert being closed is a monitor alert and the monitor which generated this alert is still unhealthy
// take an appropriate action. Here an error message is being displayed at console
Console.WriteLine("The alert with Alert Name" + a.Name + "cannot be closed as the monitor which genrated the alert is still unhealthy.")
}
}
}
}
}
确定警报是否已自动解决
执行以下步骤:
选择警报,然后在警报详细信息中选择警报监视器的名称。 此时将打开监视器的属性对话框。
在监视器属性中,选择“警报”选项卡以查看当监视器返回正常状态时,该选项是否自动解决警报。
关闭监视器生成的警报
执行以下步骤:
读取警报并检查其属性。 检查警报详细信息,以确定警报是由监视器还是规则生成。 使用警报的产品知识来帮助确定警报的原因。
排查警报的原因,并采取解决问题所需的操作。
解决问题后,在警报详细信息中选择“ 源 ”。 这将打开 与警报关联的对象的状态 视图。
右键单击对象,指向“打开”,然后选择对象名称的运行状况资源管理器。
选择生成警报的监视器,然后选择工具栏上的“ 重置运行状况 ”。 关闭运行状况资源管理器和“状态”视图。
刷新警报视图。 如果警报仍列出,请选择警报,然后在“操作”窗格中选择“ 关闭警报 ”。
注释
以下更新(关闭孤儿警报)适用于 Operations Manager 2019 UR3 及更高版本。
关闭孤立警报
在 Operations Manager 2019 RTM、UR1 和 UR2 中,在某些应用场景中,当运行状况状态非持久时,将无法关闭活动警报,详情如下:
故障转移:
- 管理服务器处于脱机状态时可能会触发的故障转移。
- 由于将新的管理服务器添加到资源池,导致负载均衡。
- 当无代理计算机发生故障转移并有其他管理服务器在监视时,将会出现新运行状况状态。
代理断开连接一段时间后重新连接,此时运行状况状态更改不会考虑之前的状态。
管理服务器先断开连接,然后又重新连接。
已清除健康服务缓存。
总体而言,健康服务不保留监控器的最后状态;将监控器重置为正常状态时,警报不会被解除。
使用 Operations Manager 2019 UR3 时,所有孤儿警报最终都会关闭,具体时间取决于监视器类型,如下所示:
- 服务监视器:立即关闭。
- 所有具有即时按需模块的监视器:立即关闭。
- 所有没有按需模块的监视器:在第二次运行时关闭,具体取决于频率。
- 基于事件的监视器:伴随初始化后发生的正常事件而关闭。
当监视器正在初始化时,运行状况状态更改会显示轻微更改;以下是示例:
如上图所示,在初始化期间,监视器第一次变为正常状态。 然后,它会再次计算并恢复正常运行。 你将看到两次状态变化从 空心状态转换为健康状态。
警报关闭体验中的更改
管理员可以选择关闭运行状况监视器中处于“运行不正常”状态的警报。
在 2019 版本中,除非相应监视器的运行状况正常,否则无法关闭监视器生成的警报。 如果尝试关闭由不正常的监视器生成的警报,将显示一条错误消息,并且不会关闭警报。
管理员可以导航到“管理>设置”并选择以下任一选项来更改此行为:
- 仅当基本监视器运行状况得到解决或手动重置时,才关闭监视器生成的警报
- 通过重置基础监视器运行状况来关闭监视器生成的警报:此选项允许以编程方式和 UI 关闭不正常的监视器的警报。 这将重置基本监视器运行状况,从而隐式关闭其相应的警报。 此选项还允许批量关闭监视器生成的警报。
还可以通过查看“警报属性”“历史记录”来跟踪警报是如何关闭的>。
后续步骤
生成警报后,可以在 操作和 Web 控制台中查看活动警报和详细信息 ,以确定可能的问题,并帮助确定解决这些警报的后续步骤。
调查并解决一个或多个监视器检测到的问题后,查看 “如何重置运行状况 ”以手动重置运行状况(如果未将监视器配置为自动解决或不想等待监视器检测运行状况)。