RSS訂閱

2012年8月28日 星期二

使用Windows 事件轉寄與訂閱服務 (Set up Windows event forwarding and subscriptions)

Windows 事件檢視器另一個重要的功能乃是支援事件轉寄與訂閱功能,這項功能用以收集遠端電腦的事件記錄,並將它們儲存於某部電腦上以集中維護與檢視,寄與訂閱功能提供了下列的好處:

  • 提供IT人員一個比以往快速有效檢視多部伺服器記錄的機制。
  • 提供Windows系統具有類似遠端記錄的能力,將重要的伺服器的記錄資料維護於遠端機器一份副本,以利不時之需。
  • 集中事件記錄以利分析,對於需要疑難排解複雜的網路問題而有必要同時檢查多台電腦上記錄檔時相當有用。

舉個例子,假若某IT人員在公司內負責管理網站服務,包括了一部兩個節點的負載平衡網站叢集,以及後端所連接的一部SQL伺服器,所以當網站出現異常時,其問題的來源有可能來自叢集內的任可一部節點或者是SQL伺服器,所以IT人員必需經常連接至三部不同的電腦並分別檢查其記錄檔以判斷是否那一部電腦出了問題,所以如果能夠透用Windows 事件訂閱功能,就可以篩選三部電腦上的錯誤事件記錄並透過工作排程方式定期送至IT人員的電腦上,如此IT人員只要檢視本機電腦就可以獲知三部網站相關的電腦目前的狀況以及那部電腦發生了異常或錯誤。

eventsub_arch

事件轉寄訂閱的電腦角色、訂閱類型與網路模式

由上圖可知,Windows的事件訂閱功能牽涉到兩種電腦角色,即事件轉寄的來源電腦與目的電腦:

  • 事件轉送(來源)電腦:此即發生事件而產生事件記錄的電腦,它是訂閱過程的記錄來源機器。您的電腦必需至少是Windows XP SP2以上的系統才可以設定為事件轉送來源電腦,而且 Windows XP a和 Windows Server 2003需要先安裝部署Windows Remote Management元件,建議使用2.0版(WinRM 2.0也被包含在PowerShell 2.0之內)。
  • 事件收集(目的)電腦:此即被設定用來收集(collect)事件的電腦,用來儲存所有從來源電腦收集到的事件。微軟的 Windows Vista, Windows 7, Windows Server 2008 and Windows Server 2008 R2可設定為事件收集電腦,不過如果您使用Windows Vista和Windows Server 2008平台做為事件收集電腦,建議升級到Windows Remote Management (WinRM) 2.0.。

此外,事件訂閱方式也有二種類型:

  • 收集電腦起始訂閱 (collector-initiated subscriptions):由收集電腦負責建立與來源電腦的訂閱連線 ,亦即收集電腦將向來源電腦請求轉寄事件
  • 來源電腦起始訂閱 (source computer–initiated subscriptions):由來源電腦負責建立訂閱連線,亦即來源電腦將主動在必要時將事件轉寄到收集電腦,此種方式通常具有較佳的延展性,因為由來源腦決定何時轉季,所以可以在任何時間點進行轉寄。

管理人員要設定Windows事件轉寄和訂閱功能也面臨了不同的網路環境以及訂閱效能的考量不同,其牽涉到的來源與收集電腦上的設定就會有所不同。這影響到設定差異的環境和考量來自於二項因素:

  • Active Directory網域環境或工作群組的網路環境
  • 決定採用收集電腦起始訂閱或是來源電腦起始訂閱

事件轉送運作協定與服務

Windows 事件轉送使用HTTP或HTTPS協定將事件從轉送電腦傳送到收集電腦,但較特殊之處在於HTTP協定本身雖然不提供加密機制,但微軟卻替事件轉送提供了加密傳送,一般而言,在工作群組環境下使用了security support provider (SSP)協調加密,如是在Active Directory目錄環境下則採用Kerberos SSP 加密,雖然您可以採用HTTPS協定透過SSL憑證來提供事件轉送的額外一層加密,但是這在大部份的環境下是不需要的。

使用這項收集遠端電腦事件的功能需要先執行建立事件訂閱,而事件訂閱過程需要設定轉送和收集這二種不同角色的電腦,預設上,事件轉送功能並沒有被啟動,所以參與轉送和收集處理程序的電腦上必須執行並啟用這兩項依存的服務:

  • Windows 遠端管理 (WinRM) 服務
  • Windows Event Collector (Wecsvc) 服務

值得留意的是Windows遠端管理服務有1.1和2.x版之別,若是使用Winrm1.1版其HTTP連接埠為標準的80,HTTPS連接埠為443,但Winrm 2.0版後將HTTP連接埠改為5985,HTTPS連接埠為5986。

除此之外,事件轉送電腦還必需設定HTTP協定的Windows防火牆例外規則,至於事件收集電腦則需要根據您所選擇的傳送最適化技術來決定是否要設定Windows防火牆例外規則,不過 Windows 提供了工具可以協助我們完成這些工作。

在Active Directory環境下採用收集電腦起始訂閱類型來建立事件訂閱

建立Windows事件訂閱機制,您需要分別在產生事件而要轉寄事件的電腦(事件來源者)上和收集其它電腦事件的電腦(事件訂閱者)分別執行不同的設定,並且在訂閱時需指定哪種訂閱類型,並且要將事件儲存在本機的哪個記錄檔中。

底下將詳細說明二部網域內的電腦如何採用收集電腦起始訂閱類型來執行訂閱工作。

設定事件轉寄的電腦

首先,您需要在發生事件的電腦上設定轉寄的工作,這樣它才能夠將事件轉送至指定的目標電腦上。簡單而言,您只需要執行二個步驟與動作:

  1. 執行 winrm quickconfig
  2. 將收集電腦帳號加入 "Event Log Readers"群組內

詳細的步驟如下:

  1. 事件紀錄轉送的電腦上,需要先將『Windows Remote management (WinRM)』服務設定為 "自動延遲啟動",所以請以系統管理員身分進入命令提示字元,並輸入下列命令:

    winrm quickconfig

    畫面提示會說明 winrm 是利用 HTTP 通道建立接聽程式,請在此處輸入 “Y”,此命令完成後除了會將Windows Remote Management服務設定為延遲自動啟動外,也會在Windows防火牆自動新增一項例外,亦即允許輸入的 Windows Remote Management (HTTP-In) Port 5985流量或放行輸入的Windows Remote Management (HTTP-In) – Compatibility Mode - Port 80流量。
    winrm_quickconfig

  2. 接下來,您需要將事件紀錄收集電腦的電腦帳戶加入至本機的 "Event Log Readers" 群組內,以便讓收集電腦的帳戶成為每一部轉送電腦的"Event Log Readers" 群組的成員,如此才能夠正確的將事件成功轉送。此外,Windows 7/2008R2的機器還需要將"Network Service"也加入"Event Log Readers" 群組內,這個步驟您需要使用【本機使用者和群組】嵌入式管理單元來完成,如下圖:
    event_log_readers2
    您也可以執行下列指令:

    net localgroup "Event Log Readers" computername /add

設定收集事件紀錄的電腦

至於收集電腦也需要執行二件工作:

  1. 執行 wecutil qc (可由圖形介面提示啟動)
  2. 建立訂閱

以系統管理員身分執行事件檢視器,執行如下的詳細步驟:

  1. 按一下主控台樹狀目錄中的【訂閱】項目, 如果電腦上的 Windows Event Collector 服務未啟動,系統會提示您確認要啟動它,所以您必須先啟動此服務,才能開始建立訂閱並收集事件。(等同wecutil qc命令)
     event_collector
  2. 接下來,請按一下【動作】功能表上的【建立訂閱】選項。
  3. 針對【訂閱內容】對話方塊,請仔細的輸入或設定下列欄位:
    • 訂閱名稱:輸入訂閱的名稱。
    • 描述:輸入選擇性的描述。
    • 目的記錄檔:選取要儲存已收集事件的記錄檔,所收集的事件預設會儲存在 「轉送的事件(ForwardedEvents)」記錄檔中。
    • 訂閱類型與來源電腦:提供二種訂閱類型:
      收集器起始
      (Collector initiated) -- 由收集電腦向轉送電腦擷取資料,可以視為一部 SQL用戶端 (收集電腦) SQL 伺服器 (轉送電腦) 下達查詢語法來取得資料的作法。
      來源電腦起始 (Source computer initiated) -- 經由某些設定讓轉送電腦主動聯絡收集電腦將事件拉(Pull) 至收集電腦。 您可以加入網域或非網域電腦,若您在此新增了非網域的電腦,則您還需要新增可以用來驗證非網域電腦的CA憑證。
      在本文範例中採用收集器起始類型,並按其右側的
      選取電腦按鈕,一一加入所有需要收集事件的電腦,只要是網域內的電腦都可被加入,加入後請按測試按鈕來檢查是否可連線成功。
    • 要收集的事件
      請按右側的
      選取事件按鈕來設定查詢篩選器,如下圖所示,您可以依據事件等級、依記錄檔或來源方式、識別、關鍵字、產生事件的使用者或電腦等條件做為事件篩選的依據。
    • 進階
      可設定使用者帳戶和事件傳遞最佳化,以及採用的協定(HTTP或HTTPS)。
      • 標準 (Normal):這是拉取傳遞模式(Pull Delivery mode),收集者從來源電腦取回事件,設定15分鐘的逾期時間來批次傳送五個事件項目。
      • 最低頻寬 (Minimize Bandwidth):這是一種推入傳遞模式(Push Delivery mode),事件由來源電腦傳送到收集電腦,假若要傳遞的事件很多且時間延遲並不重要,而您需要嚴格的控制頻寬的使用請選本項。勾選本項將設定6小時的逾期時間來批次傳送五個事件項目,除此之外,也使用六小時的heartbeat間隔時間。
      • 減少延遲 (Minimize Latency):這也是一種推入傳遞模式(Push Devivery mode),假若您收集的均是重大或緊要的事件,需要檢視最即時的事件資料時,請選本項。 勾選本項將設定30秒的逾期時間。

      sub_property
  4. 最後,請按一下『訂閱內容』對話方塊上的『確定』,訂閱會新增到『訂閱』 窗格,而且如果訂閱成功,訂閱的『狀態』將是『使用中』。 eventviewer_sub
  5. 一旦成功建立了事件訂閱,等待一段時間後就可以由轉送的事件記錄檔檢查其它電腦轉送過來的事件。
    eventviewerford

測試

為了測試上述的設定是否正確,您可以使用eventcreate命令在來源電腦上手動的建立一自訂式的事件,然後等待一段時間後,再到收集電腦上的『轉送的事件』查看事件是否已正確傳遞並收到此事件,如下例自訂建立了一個事件識別碼為1000的應用程式記錄,在上圖收集電腦上可看到事件即表示事件傳遞成功無誤。

eventcreate /id 100 /t error /l application /d "Event Forwarding Test"

一旦設定無誤後,一開始您通常會先看到一個如下圖所示的識別碼111事件,這僅是事件轉寄元件用來標示訂閱開始的事件,並非錯誤而可以忽略。

111eventid

檢查或變更事件訂閱檢查間隔時間

預設上若採用標準傳遞方式,每隔十五分鐘執行一次新事件的訂閱檢查,您可以透過wecutil命令來變更這個間隔時間:

wecutil ss <subscription_name> /cm:custom wecutil ss <subscription_name> /hi:<milliseconds_delay>

如下面圖例,將事件訂閱檢查變更為二分鐘。

wecutil

此時,若您重新開啟訂閱的內容對話方塊內的『進階』按鈕,就會看到『事件傳遞最佳化』已經變更為『自訂』選項。

advanced

最後,您也可以利用 "wecutil gs <subscriptionID>"指令來顯示並確認目前的訂閱資訊是否正確。

wecutil__gs

在Active Directory環境下採用來源電腦起始訂閱類型來建立事件訂閱

上面的範例是採用收集電腦初始訂閱類型來建立事件,若您打算利用另一種來源電腦起始訂閱方式,則在做法上稍為不同:

  • 來源電腦:由於來源電腦起始訂閱方式是由來源電腦在必要時將件寄送予收集電腦,所以您並不需如上面範例需要將收集電腦帳號加入 "Event Log Readers"群組內,而是改透過本機群組原則來設定所要寄送的電腦相關資訊,實際做法是開啟本機群組原則(gpedit.msc),並找到下列位置:
    【電腦設定/系統管理範本/Windoiws元件/事件轉寄】
    請按二下【設定伺服器位址、重新整理間隔以及目標訂閱管理員的簽發者憑證授權單位 】選項,勾選『已啟用』選項,並按一下『SubscriptionManagers』右側的『顯示』按鈕,於出現的『顯示內容』對話方塊內輸入"server=http://collector_computername:5985" ,最後請執行 gpupdate讓原則立即生效。
    gpforwarding
  • 收集電腦上,除了需使用winrm quickconfig和wecutil qc來分別啟動WinRM 服務和Windows Event Collector (Wecsvc) 服務之外,最重要的是在建立訂閱時選取『來源電腦起始』選項取代『收集器起始』。
    create_subs

採用來源電腦起始的訂閱類型有時候需等待一段時間才會生效。

在工作群組(非網域)環境下建立事件訂閱

一般的企業組織環境下,事件轉寄與訂閱通常在Active Directory網域環境下進行,如果您需要在非Active Directory環境下的工作群組模式下設定事件轉送訂閱功能,則其做法與上述網域的做法大致一樣,只有些許不同:

  • 您必需在每部來源電腦上新增遠端事件記錄檔管理(Remote Event Log Management) 的Windows防火牆例外規則。做法是使用『具有進階安全性的Windows防火牆』工具,並在輸入規則內找到數條Windows 預先已經建立好的『遠端事件記錄檔管理』規則,然啟用這些規則即可。
    eventlogmanagement
  • 在每部來源電腦內的 "Event Log Readers" 本機群組新增一個具有管理員權限(administrator privilege)的使用者帳戶以及"Network Service"這個系統帳戶,日後這個帳戶也將在收集電腦上建立訂閱時,在『進階訂閱設定』對話方塊內新增此帳戶。由於每部來源電腦所使用的管理員帳戶名稱或密碼不同,所以您可以需要替每部來源電腦建立個別的訂閱設定。
     adv11
  • 在每部收集電腦上,使用下列命令來允許轉寄的電腦使用NTLM驗證(因在非網域模式下並無法使用Kerberos驗證)。
    winrm set winrm/config/client @{TrustedHosts="<forwarding_computers>"}
    trustedhosts0
    若您不使用TrustedHost來設定驗證方式,也可以使用HTTPS來驗證,不過需要安裝處理憑證相關的設定,較為麻煩。

後記

Windows 的事件訂閱功能是微軟在管理維護事件記錄上的一大進步,它讓管理員可以集中維護並檢視多部電腦的事件記錄,這對越來越複雜的網路事件異常分析與判斷上具有相當實用的價值,但是設定這項功能有時候並不是那麼直覺而容易,因為這牽涉到來源電腦與收集電腦這二類電腦角色的設定不同,再加上微軟支援二種訂閱類型的設定也略有不同,若是在非網域的環境下,還需要額外的設定步驟,有時基於不同效能的取捨考量還需調整推入(Push)或拉取模式,而且負責轉寄用途的WinRM服務還有1.1版和2版的差別,所以在複雜的網域及工作群組混合的網路下或同時存在多種Windows平台的環境下,設定使用時可得妥善規劃與設定以降低出錯的可能。

 

相關文章】

讀者回響 (aohongchen@yahoo.com)