如何關閉監視所產生的警示

重要

此版本的 Operations Manager 已終止支援。 建議您 升級至 Operations Manager 2022

監視器會定義物件的健全狀況狀態。 物件可以具有下列三種健全狀況狀態的其中之一:綠色 (成功或狀況良好)、黃色 (警告),或紅色 (重大或狀況不良)。 例如,磁碟機容量的監視可能會將低於 85% 的已滿程度定義為綠色、將超過 85% 的已滿程度定義為黃色,並將超過 90% 的已滿程度定義為紅色。 您可以將監視設定成在發生狀態變更時產生警示。

當您收到警示時,您可以在警示詳細資料中看到警示是由規則或監視器產生。 如果警示是由監視器產生,最佳做法是您應該在健全狀況狀態恢復為狀況良好時允許監視器自動解決警示。 如果您在對象處於警告或狀況不良狀態時關閉警示,問題仍無法解決,但不會產生進一步的警示。

如果監視器在健全狀況狀態變成紅色時產生警示,且您確實解決了警示,您也必須重設監視器的健全狀況狀態。 如果未重設監視器,則會產生警示的相同狀況可能會再次發生,但不會產生任何警示,因為健康情況狀態尚未變更。

在 2019 之前的 Operations Manager 中,如果您在對象處於警告或狀況不良狀態時關閉警示,問題仍無法解決,但不會產生進一步的警示。 此行為通常會導致系統沒有作用中警示的案例,而基礎問題存在時,在 Operations Manager 2019 中已修正。

使用 Operations Manager 2019 時,除非對應監視器的健康情況 狀態良好,否則無法關閉監視器所產生的警示。 如果您嘗試關閉狀況不良監視器所產生的警示,則會出現錯誤訊息,且不會關閉警示。

您可以從 Operations 主控台和 Web 主控台中檢查此新行為。

Operations 主控台

遵循這些步驟:

  1. 開啟 Operations Manager 控制台,然後選取 [ 監視]

    監視概觀隨即顯示警示健全狀態的摘要和目前的警示。

  2. 在瀏覽窗格中選取 [ 作用中警示 ]。

  3. 以滑鼠右鍵按一下警示,該警示由狀況不良狀態中的監視所產生。

  4. 將解決狀態設定為已關閉

    下列訊息隨即顯示,說明狀態為非關閉的警示的原因:

    目前選取項目中的警示無法關閉,因為產生這些警示的監視仍然狀況不良。 若想進一步了解無法關閉之警示的詳細資料,請檢視 Operations Manager Web 主控台中的「警示關閉失敗」儀表板

    顯示已關閉警示訊息作業主控台的螢幕快照。

    注意

    要關閉此警示,必須手動將對應的監視重設為健全狀態。 若此監視的 autoresolve 設為 true,則警示會在重設健全狀態之後自動關閉。 否則,您必須在重設健全狀態之後手動關閉警示。

Web 主控台

  1. 開啟 Web 控制台,然後選取 [ 監視]。 監視概觀隨即顯示警示健全狀態的摘要和目前的警示。

  2. 在瀏覽窗格中選取 [ 作用中警示 ]。

  3. 開啟警示,該警示由狀況不良狀態中的監視所產生。

  4. 將解決狀態設定為已關閉儲存變更。

    下列訊息隨即顯示,說明狀態為非關閉的警示的原因:

    無法關閉目前的警示,因為產生此警示的監視狀況仍然不良

    顯示已關閉警示訊息 Web 控制台的螢幕快照。

    注意

    若要關閉此警示,必須手動重設產生此警示之對應監視的健全狀況。

為對應的警示手動重設監視的健全狀態

遵循這些步驟:

  1. 選取瀏覽窗格中的 [ 警示關閉失敗 ] 儀錶板。 儀表板會列出由於產生警示的監視狀況不良而讓 Operations Manager 無法關閉的警示。

  2. 您可透過以下兩種方法,重設對應警示之監視的健全狀態:

    • 在儀表板中選取一個警示,接著選取儀表板動作 [重設警示健康情況]。 Or
    • 選取此儀錶板中的警示,以流覽至警示向下切入頁面 (您可以在其中可視化警示) 的所有相關信息,然後在工作窗格中選取 [ 重設健康情況] 工作

    顯示警示重設監視器健全狀況的螢幕快照。

警示更新 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.")
                    }
            }           
        }

    }
}

判斷警示是否已經自動解決

遵循這些步驟:

  1. 選取警示,然後在警示詳細數據中,選取警示監視器的名稱。 監視器的屬性對話框隨即開啟。

  2. 在監視屬性中,選取 [ 警示 ] 索引標籤,以查看當 監視器回到狀況良好狀態 時,是否選取 [自動解決警示] 選項。

關閉監視器所產生的警示

遵循這些步驟:

  1. 讀取警示並檢查其內容。 檢查警示詳細資料來判斷警示是由監視器或規則產生。 使用警示的產品知識來協助判斷產生警示的原因。

  2. 針對產生警示的原因進行疑難排解,並採取所需動作來解決問題。

  3. 解決問題時,請在警示詳細數據中選取 [來源 ]。 這將會開啟與警示相關聯物件的 [狀態] 檢視。

  4. 以滑鼠右鍵按兩下物件,指向 [開啟],然後針對物件名稱選取 [健全狀況總管]。

  5. 選取產生警示的監視器,然後選取工具欄上的 [ 重設健康情況 ]。 關閉健全狀況總管與 [狀態] 檢視。

  6. 重設警示檢視。 如果仍列出警示,請選取警示,然後在 [動作] 窗格中選取 [ 關閉警示 ]。

注意

下列更新 (關閉孤立警示) 適用於 Operations Manager 2019 UR3 和更新版本。

終止孤立警示

在 Operations Manager 2019 RTM、UR1 和 UR2 中,在特定案例中,作用中警示不會在非持續性健全狀況狀態之後關閉,如下所示:

  1. 容錯移轉︰

    • 當管理伺服器離線時,可能會觸發的故障轉移。
    • 由於將新的管理伺服器新增至資源集區,導致負載平衡。
    • 當無代理程式電腦故障轉移且由另一部管理伺服器監視時,因此是新的健全狀況狀態。
  2. 代理程式會在一段時間后中斷連線並再次連線,在此狀態變更中,不會察覺到先前的狀態。

  3. 管理伺服器已中斷連線並再次連線。

  4. 已清除健全狀況服務快取。

整體而言,健全狀況服務不會保存監視器的最後一個狀態;將監視器重設為狀況良好時,不會關閉警示。

使用 Operations Manager 2019 UR3 時,所有孤立警示最終都會關閉,視監視類型而定,如下所示:

  • 服務監視器:立即關閉。
  • 所有具有立即隨選模組的監視器:立即關閉。
  • 所有沒有隨選模組的監視器:視頻率而定,於第二次執行時關閉。
  • 事件型監視器:關閉初始化之後所發生的狀況良好事件。

健全狀況狀態轉換會在監視初始化時顯示次要變更;下列範例:

顯示健全狀況狀態轉換的螢幕快照。

如上圖所示,在初始化期間,監視會先變成狀況良好。 然後,它會再次計算並變成狀況良好。 您會看到兩種狀態變更從 空心狀態轉換為狀況良好

警示關閉體驗中的變更

使用 Operations Manager 2022,系統管理員可以選擇選擇健全狀況監視器的警示關閉,處於狀況不良狀態。

在 2019 版中,除非對應監視器的健康狀態良好,否則無法關閉監視器所產生的警示。 如果您嘗試關閉狀況不良監視器所產生的警示,會出現錯誤訊息,而且不會關閉警示。

使用 Operations Manager 2022,系統管理員可以流覽至 [系統>管理設定],然後選取下列任一選項來變更此行為:

  • 只有在基礎監視器健康情況解決或手動重設時,才會關閉監視所產生的警示 ()
  • 藉由重設基礎監視器健康情況,關閉監視所產生的警示 () :此選項可讓您以程序設計方式和 UI 關閉狀況不良監視器的警示。 這會重設基礎監視器健康情況,這會隱含關閉其對應的警示。 這個選項也允許大量關閉監視器所產生的警示。

您也可以檢視 警示屬性>歷程記錄來追蹤警示的關閉方式。

顯示全域管理群組設定的螢幕快照。

顯示警示歷程記錄的螢幕快照。

下一步

  • 產生警示時,您可以在 Operations 和 Web 控制台中 檢視作用中的警示和詳細 數據,以找出可能的問題,並協助識別後續步驟以解決問題。

  • 調查並解決一或多個監視器偵測到的問題之後,請檢閱 如何重設健全狀況以 手動重設健全狀況,如果監視器未設定為自動解決,或您不想等候監視偵測健康狀態。