使用 StreamInsight 事件流程偵錯工具

 

網域中的運作系統 (例如製造、流程控制、公用程式、金融交易、Web 和 IT 監視) 會產生具有複雜交互關係及低延遲需求的事件資料流。 在提供處理這類事件流程的暫時性元素時,這些系統中的主要挑戰是判斷相異和動態資料流行為之下的結果有效性,並在發生失敗時針對查詢進行疑難排解。

這樣會刺激查詢分析工具對付下列需求的需要:

  • 處理大量資料,並減少問題搜尋空間。

  • 處理嚴格的一致性需求。

  • 對使用者而言有足夠的直覺能力,可快速達成診斷或解決方案。

Microsoft StreamInsight 會提供獨立事件流程偵錯工具的圖形化使用者介面 (GUI)。 StreamInsight 事件流程偵錯工具可讓您以複雜事件處理 (CEP) 應用程式的開發人員或管理員身分,透過 StreamInsight 查詢檢查、偵錯及理解事件的流程。 本主題描述事件流程偵錯工具的功能,並為您提供所需的程序來快速開始使用這個偵錯和分析工具。

了解事件流程偵錯

在討論事件流程偵錯工具之前,一定要注意控制流程偵錯工具 (例如 C# 或 C++ 偵錯工具) 與事件流程偵錯工具之間的基本差異。

在控制流程偵錯中,開發人員會在偵錯模式下「建置」以特定語言所撰寫的程式、在程式的控制流程中啟用位於特定陳述式或連接點的中斷點、「執行」程式一直到這些特定的中斷點為止、理解系統的程式碼和狀態、逐步執行或不進入函數和程序、觀看變數等等,直到執行完成為止。 「資料」變數的暫時理解 (也就是隨著時間的經過來分析這些變數的轉換) 會受到限制或是不存在。

相反地,事件流程偵錯與一段時間的事件分析有關,因為它會從 CEP 查詢的一個階段進行到下一個階段,並且在查詢階段中從一個運算子進行到下一個運算子。 在這裡,偵錯牽涉到了解事件從給定運算子進入時對於資料流的影響,以及在計算事件輸入運算子的結果時如何產生新的事件。 事件流程偵錯的重點在於運算子的語意 (Filter、Project、Join、Aggregate、Multicast 等等) 如何影響事件,而不是運算子本身的 (控制流程) 執行。 因此,此偵錯工具可幫助您了解給定事件對於其他事件的影響,以及其他事件對於正在分析之事件的影響。

偵錯和監視模式

事件流程偵錯工具是一種獨立的事件追蹤偵錯工具。 此偵錯工具有兩個目的:

  • 偵錯事件流程追蹤。 偵錯工作階段可以根據以下項目:

    • 從特定作業查詢的即時記錄產生的追蹤,並將偵錯工具連接到即時伺服器。

    • 使用命令列公用程式在偵錯工具外面產生的追蹤檔,檔案之後會載入偵錯工具內。

  • 監視伺服器。 在此模式中,偵錯工具會提供 [物件總管] 來列出系統物件和應用程式物件。 您可以取得有關每一個實體的運作診斷。 [物件總管] 也是您啟用及停用追蹤查詢的介面,您也可以選擇透過它來啟動及停止查詢的執行。

為了能夠使用事件流程偵錯工具,使用者必須屬於 Windows Performance Log Users 群組的一部分。 這可讓使用者使用 trace.cmd 在偵錯工具外部收集追蹤,或是在偵錯工具中作業時記錄查詢的事件。 如需有關如何進行此作業的步驟,請參閱<Windows 管理和作業>一節。

如果您已經成功安裝 StreamInsight,我們建議您啟動偵錯工具並檢閱 [啟動] 頁面來進一步了解此工具的基本功能。 若要啟動此偵錯工具,請按一下 [開始] 按鈕,並指向 [所有程式],再按一下 [Microsoft StreamInsight 2.0],然後按一下 [StreamInsight 事件流程偵錯工具]

偵錯 StreamInsight 查詢

您可以將此偵錯工具當做本機或遠端用戶端應用程式連接到 StreamInsight 伺服器,並記錄及重新執行一個或多個查詢的事件流程追蹤。 另外,您也可以將它當做與伺服器卸離的獨立用戶端應用程式來使用,並根據離線收集的事件追蹤來分析查詢。 這樣會在特定查詢可運作時為您提供偵錯此查詢的彈性,或是根據其執行的歷程記錄追蹤來測試查詢的彈性。

即時查詢事件記錄

若要記錄執行中查詢的事件,您必須將事件流程偵錯工具連接到即時 StreamInsight 伺服器。 下列程序描述如何連接到即時伺服器、開啟執行中的查詢,並啟用查詢的追蹤。

System_CAPS_ICON_note.jpg 注意事項


事件流程偵錯工具只能記錄本機伺服器上的事件。 也就是說,工具必須在與 StreamInsight 伺服器相同的實體電腦上執行。 將事件流程偵錯工具連接到遠端伺服器端點不會導致錯誤,但不會記錄事件。

  1. 您 (或伺服器管理員) 必須針對伺服器啟用 Web 服務,這是必要條件。 如需有關啟用此 Web 服務的詳細資訊,請參閱<發行及連接到 StreamInsight 伺服器>。

  2. 藉由讓用戶端使用者成為相應 StreamInsight 使用者群組的成員,以確認該人員具有連接至伺服器的權限。 如需詳細資訊,請參閱<安裝 (StreamInsight)>中的<StreamInsight 使用者群組>一節。

  3. 在偵錯工具中,按一下 [檔案],然後按一下 [連接到伺服器]。 輸入伺服器端點位址。 已安裝之 StreamInsight 伺服器的預設端點為 http://localhost/StreamInsight/<instance_name>。

    如果已經正確設定伺服器進行連接,此偵錯工具將會在左窗格顯示 [物件總管]。

  4. [物件總管] 中,按一下物件階層,直到您看到要偵錯的查詢為止。 按兩下查詢物件。 這樣會開啟查詢圖形,如下圖所示。 此圖顯示範例查詢 'Deltas' 目前正在執行中。

    在查詢圖形中檢視查詢
    圖 1 - 在查詢圖形中檢視查詢。

  5. 若要記錄正在查詢中處理的事件,請按一下 [開始錄製] 按鈕。 如此將會啟動記錄程序,如下圖所示。 當您已經記錄事件數分鐘之後,請按一下 [停止]

    在執行查詢中記錄事件
    圖 2 - 在執行中的查詢內記錄事件。

如此會將偵錯工具帶到圖 1 所示的狀態。 此時,您可以使用偵錯工具內所提供的查詢分析工具。 下一節將描述這些分析功能。

載入事件流程追蹤 (EFT) 或 Windows 事件追蹤 (ETW) 檔案

StreamInsight 同時支援獨立和內嵌伺服器部署。 如果應用程式內嵌伺服器但是未啟用 Web 服務,類似偵錯工具的用戶端應用程式便無法連接到伺服器。 您需要一個機制來偵錯及診斷在這類狀況之下執行之查詢中的問題。

若要針對執行中的 StreamInsight 伺服器收集事件追蹤記錄,您可以使用 StreamInsight 安裝所隨附的 trace.cmd 公用程式。 下列程序描述如何建立追蹤檔,並將該檔案載入事件流程偵錯工具。

  1. 當伺服器和相關的查詢正在執行時,請在 Windows 命令提示字元輸入下列陳述式。 請務必在命名追蹤檔案時使用 .etl 副檔名。

trace.cmd start <filename>.etl

  1. 當您允許查詢執行足夠的時間之後,請使用下列命令停止追蹤:

trace.cmd stop <filename>.etl

  1. 若要將產生的檔案載入偵錯工具中,請按一下 [檔案],然後按一下 [開啟]。 在 [開啟] 對話方塊中,瀏覽至 <filename>.etl 的位置,然後按一下 [開啟]。 隨即顯示查詢圖形,如下圖所示。

    檢視追蹤檔案中載入的查詢
    圖 3 - 檢視從追蹤檔載入的查詢

與圖 1 顯示的物件相較之下,這個圖會在 [物件總管] 中顯示比較少的實體。 這是因為偵錯工具未連接到伺服器。 特別是當偵錯工具未連接到伺服器時,便無法顯示伺服器層級的診斷物件,例如排程器。

請注意,這個圖會在狀態列顯示進度指標,指出 ETL 檔案的載入進度。 在載入的過程中,偵錯工具會將 ETL 檔案轉換成其專屬且壓縮的 EFT 格式。

切記一個重點,trace.cmd 公用程式是以 Windows Logman 命令為基礎的指令碼。 Logman 接著會採用 Windows 事件追蹤 (ETW) 基礎結構進行事件收集。 在追蹤記錄載入期間,偵錯工具可能會警告您有幾個事件已經遺失。 這是由於 ETW 緩衝區及工作階段設定不當所致。 若要解決此問題,請編輯 trace.cmd 檔案中的 Logman 命令,提高 -bs 選項所指定的緩衝區大小 (例如:-bs 3000),或提高 -nb 選項所指定的緩衝區數目。 如需詳細資訊和範例,請參閱 Logman 文件集

使用事件流程偵錯工具的查詢分析

事件流程偵錯工具會提供查詢分析的下列主要功能。

  • 能夠檢視給定查詢的查詢計畫,也就是查詢運算子和事件資料流。 如此可幫助您根據 Language Integrated Query (LINQ) 查詢的基礎事件流程和事件流程中的處理節點來了解該查詢。

  • 能夠檢查複雜事件流程輸入和輸出上的所有事件,連同每一個運算階段的中繼結果。 這包括以開始和結束時間戳記表示的事件中繼資料以及裝載欄位。

  • 能夠檢視針對向外延展分割的複雜事件流程。 此偵錯工具可以示範群組和套用運算子的群組作業如何分割事件,以及如何在套用運算子中轉換事件。

  • 能夠執行一組全域分析來減少搜尋空間問題,或是將橫跨每一個事件流程之多個階段的事件相互產生關聯。

  • 能夠在一段時間逐步完成查詢執行的追蹤,並了解如何透過資料流查詢來傳播事件。

  • 能夠分析事件並了解這些事件如何達成給定的狀態。也就是說,其他事件或運算子如何影響其事件時間和裝載。

  • 能夠分析任何給定的事件對於目前運算子下游的事件有何影響。 最後,預見事件的未來處理,直到該事件最後影響輸出為止。

為了實作這些功能,偵錯工具會提供三個分析功能:

  • 重新執行 - 使用這個功能,您便可以逐步完成事件資料流 (一次一個事件),並查看它從某個運算子到下一個運算子的進度。 另外,您也可以在查詢圖形中的特定運算子上設定中斷點,並「執行」偵錯工具 (也就是啟動事件流程),直到遇到該運算子或是該運算子中的特定條件為止。

  • 根本原因分析 - 使用這個功能,您便可以回想造成事件達成目前狀況的根本原因或是一連串的操作或變更。

  • 事件傳播分析 - 使用這個功能,您便可以根據特定事件本身所經歷的變更,或是根據該事件如何影響其他事件或造成新事件產生的層面,分析資料流下方的這個事件的影響能力。 這個功能與根本原因分析相反。

使用重新執行

一旦事件已經載入偵錯工具 (透過即時記錄或是從追蹤記錄檔載入) 之後,下一步就是探索這些事件。 若要這樣做,請按一下 [時鐘] 圖示來重新執行事件。 這樣會顯示事件播放程式。 您可以按一下 [前進] 圖示來逐步完成事件。 另外,您也可以按一下運算子左邊的選項按鈕來設定任何運算子的中斷點,然後按一下事件播放程式中的 [跳到下一個中斷點]

在下圖中,已經在多點傳送運算子中設定中斷點,而且已經啟用事件流程。 在多點傳送運算子中標示綠色的線條將會顯示到這個點為止的事件流程進度。

在彙總運算子中設定中斷點
圖 4 - 在彙總運算子中設定中斷點。

請注意,此查詢具有流過它的事件,所以您可以按一下每一個運算子右邊的三角形圖示來展開每一個運算子。 您可以繼續逐步完成事件,並查看事件進度。

使用根本原因分析

使用根本原因分析,您便可以分析事件如何變成它目前的狀態。 您可以從任何運算子的事件方格啟動根本原因分析,其方式是以滑鼠右鍵按一下您所顧慮的事件,然後選取 [根本原因分析]

選擇 [根本原因分析] 會造成偵錯工具顯示包含事件之所有運算子的展開檢視,這些事件可能會導致正在分析之事件的目前狀態。 例如,下圖顯示具有給定開始和結束時間戳記的 avgCount 18 如何成為目前的狀態。 請以滑鼠右鍵按一下內容功能表中標示的事件,並選擇 [根本原因分析]。 偵錯工具會顯示根本原因分析重新執行的堆疊,其方式是將第二個箭頭放在索引標籤式查詢畫布的標頭。 這會顯示在下圖中。 在查詢處理中的這個階段參與這個事件狀態的參與者為 SensorInput 運算子中 VehicularCount 值 38 的 Insert。

使用根子句分析
圖 5 - 使用根本原因分析。

使用事件傳播分析

根本原因分析是有關了解其他事件或處理步驟對於某個事件的影響,事件傳播分析則是一種預視分析,可了解目前事件對於下游事件的影響。 您可以從任何運算子的事件方格啟動 [事件傳播分析],其方式是以滑鼠右鍵按一下您所顧慮的事件,然後選取 [事件傳播分析]

分析堆疊

分析可以堆疊在彼此的上層。 您可以使用重新執行來啟動偵錯。 在這個分析的某個時間點,您可以啟動特定事件的根本原因分析。 從這個檢視中,您可以挑選要進行傳播分析的另一個事件。 您可以使用這個方法將分析堆疊在彼此的上層。

您也可以在多個索引標籤上開啟相同的查詢,並且在不同索引標籤中擁有不同的分析和檢視,讓您擁有在不同分析下比較查詢的相同或不同區段的彈性。

運算子

查詢圖形中的每一個矩形方塊都代表一個運算子 - StreamInsight 查詢中的計算節點。查詢代數可支援數個運算子,例如 Select (Filter)、Project、Import、Export、Group-and-Apply、Join、Multicast、Union、Top-K、AlterLifetime、Advancetime 和 Cleanse。 每一個運算子都會標示它在伺服器中繼資料中的給定名稱,連同該運算子的種類。

請務必注意,您在查詢圖形中看到的運算子與撰寫 LINQ 查詢的作業之間,可能不會有 1:1 的對應關係。 例如,Import 運算子表示輸入配接器執行個體,Export 運算子則表示輸出配接器執行個體。 Cleanse 是查詢最佳化工具為了處理未排序資料所引進的內部運算子,它不會出現在 LINQ 查詢中。 同樣地,AdvanceTimeAlterLifetime 代表查詢代數中的核心暫時作業,該作業是由指定 AlterEventDurationAlterEventLifeTime LINQ 延伸模組或是從查詢中的視窗化作業所產生。 但是,您可以輕鬆地將 LINQ 查詢與產生的查詢圖形互相產生關聯性。

每一個事件方格都有下列區段。

運算子標籤

此方格的標題是查詢所提供的運算子名稱以及運算子類型。

篩選

在這個文字方塊中,您可以指定條件式 C# 運算式來篩選感興趣的事件。 例如,您可能只想要檢查達到或超過某個值或某個時間的事件。

事件欄位

事件方格視窗的其餘部分會顯示事件的欄位。 這些欄位包括使用者指定的事件種類 (Insert 或 Cti),連同內部事件 (Retract 和 Expand)。 預設顯示的欄位資料行為 EventKind、StartTime、EndTime 及事件的裝載欄位。 您可以從事件方格中加入或移除欄位,其方式是以滑鼠右鍵按一下標頭列來查看內容功能表,也可以依序按一下 [檢視][資料行] 然後選取或清除欄位名稱。 請注意,所有時間戳記欄位都會以國際標準時間 (UTC) 顯示。 此內容功能表會提供您變更時區的方法。

可用的欄位會依照下表所列的順序出現。 任何給定運算子中的事件都可以匯出到檔案中,其方式是以滑鼠右鍵按一下運算子標題列,然後選擇 [將事件寫入檔案] 選項。 一般來說,您會採取這個作法來匯出事件,以供另一個程式進一步處理。

欄位名稱 說明
EventKind Insert、Cti、Retract 或 Expand。
StartTime 事件的開始時間。
EndTime 事件的結束時間。
NewEndTime 某些特殊系統事件種類之已修改的結束時間。 您應該忽略這個資料行中的值。
Latency 事件在給定時間點的系統延遲。 這是產生這個事件的內送事件進入系統的時間與系統產生這個事件的時間之間的時間範圍。
EnqueueTime 運算子產生事件時的系統時間。
一個或多個裝載欄位 事件中可用的使用者定義資料欄位。

Group-and-Apply 運算子

Group-and-Apply 運算子是一種特殊運算子,它是由進入點形式的群組運算子、一組套用分支運算子以及結束週框運算子形式的群組等位運算子所組成。 展開群組節點會顯示各自的群組索引鍵值上所錨定的所有套用分支。 您可以展開 (或摺疊) Group-and-Apply 運算子,其方式是從群組節點將您感興趣的分支拖曳到畫布。 現在可以展開分支中的每一個運算子,進行進一步分析。 按一下每一個分支中的 X 符號會將它摺疊回主要 Group-and-Apply 流程子圖形。 下圖顯示事件流程偵錯工具中的 Group-and-Apply 節點。

Group_and_Analysis
圖 6 - 檢視 Group-and-Apply 節點。

其他可用性功能

此偵錯工具會提供下列可用性功能:

  • 您可以順暢地將運算子內外的查詢圖形畫布縮放為完整查詢圖形。

  • 透過圖示取得的所有功能也可以從內容功能表選取選項來使用。

  • 當偵錯工具連接到伺服器時,伺服器傳回的所有錯誤都會以 en-US 地區設定顯示,不論安裝的地區設定為何。 如果是非英文的地區設定,這些錯誤訊息可用於其他的支援和診斷。

  • 所有的運算子都可以使用 [全部展開][全部摺疊] 功能來加以展開或摺疊。

  • [工具] 功能表提供的選項可讓您針對各種不同的偵錯工具設定來設定預設值。 您可以選擇使用特定大小的區段來讀取事件流程追蹤檔。 如此可讓您擁有可預測而且更順暢的偵錯使用經驗。 您可以在查詢圖形的所有運算子之間指定 DateTime 格式和 TimeZone。 另外,您也可以針對偵錯工具連接到伺服器的狀況來指定最大和最小事件流程記錄期間。

監視

除了當做偵錯工具以外,事件流程偵錯工具也會當做 StreamInsight 伺服器的監視工具。 您可以使用之前所述的步驟將此偵錯工具連接到即時伺服器。 此偵錯工具會顯示 [物件總管],其中包含所有的伺服器實體。 它會在最上層顯示事件管理員、查詢管理員和排程器的摘要統計資料。 若要顯示其中一個物件的執行階段診斷,請以滑鼠右鍵按一下物件的圖示,並選取 [診斷]

您也可以按一下物件的整個階層,並選取已經在伺服器中註冊的特定查詢。 您可以啟動或停止查詢。 此外,如果查詢正在執行中,您也可以取得查詢的執行階段診斷。 您可以使用這個介面來監視有關產生及取用事件的資訊、延遲和輸送量特性以及查詢的記憶體需求。

您可以列舉應用程式中已建立的所有來源、接收、主旨和處理序。 您也可以刪除來源、接收、主旨和處理序。

檢視依應用程式建立的實體
圖 7 - 檢視應用程式所建立的項目

您可以使用診斷檢視 API 來以程式設計方式擷取這些度量。 如需可供每一個實體使用之診斷資訊的描述,請參閱<監視 StreamInsight 伺服器和查詢>。

請參閱

開發人員指南 (StreamInsight)
作業 (StreamInsight)