前面我們不久前才聊過 Http status code 和 Http error,今天要談的是一個非常強大的模組,強大到基本上你在 IIS 上遇到 Http 相關錯誤,第一個透過 IIS Log 證明該 Request 確實有碰到 IIS 之後,第二個你就該想到它 — Failed Request Tracing Buffering,簡稱 FREB。
這個功能的名稱有一點點的誤導性,就是基本上他是基於 HTTP 代碼可以去捕捉當一個 Request 進到 IIS 後和路上模組互動的結果與狀態,你可以知道最後呈現在畫面上的錯誤,是被哪個模組設定的;就像神奇寶貝,丟了球抓到了以後,會顯示在圖鑑的資料一樣詳細。
關於 Http.sys、Application Pool、Modules 整體互動流程,個人非常推薦這篇,我這篇部分內容也有參考它:Reading a FREB log, a Failed Request Tracing: IIS request processing pipeline execution
上面這篇我很喜歡得是他把所有角色的串起來了,簡單敘述各角色的互動以及為什麼 FREB 這個模組能夠拿到那些狀態記錄資料。可以先看看我這篇寫的大略內容,如果想要跟深究的話很推薦讀一讀。
基本上 FREB 這個模組的使用也算簡單,就在你要設定的網站,首先設定規則,接著模組就會在你設定的條件下去把符合規則的 Request 記錄下來,我們簡單看一下規則該如何設定:
依序會選擇要追蹤的內容、追蹤條件、錯誤提供者。
追蹤的條件是指該錯誤發生在哪個頁面上,沒特別需求通常就選擇 All content,即是只要符合後面條件就抓取,除非你要避掉特定類型的下載行為。
追蹤條件有三項可以設定,第一個是 Http Status Code,可以細到 Sub Status Code,也可以範圍表示,比如所有的錯誤碼你都要抓,要抓大於等於 400 的錯誤,你就可以寫 400 - 999。Time taken 的定義是從 Request 進來 Http.sys 到離開 Http.sys 的時間,而不只是經手 IIS 的時間,所以要特別注意 Request 的類型跟從事行為,如下載類型的行為可能 Time taken 就會較長,還有這邊的輸入單位是秒。最後一個條件是事件等級,如我們上篇所寫,可以特別去抓那些有寫在 Event Viewer 對應等級的事件的 Trace,可選 Warning / Error / Critical,如果是在 Event Viewer 中看到特定錯誤想排查,但不確定 Http 狀態碼,可以嘗試用這個方式抓抓看。
提供者會影響的是關係到事件由誰提供,如果你清楚知道該錯誤的發生模組或範圍,可以透過減少勾選來減少雜訊,如果是一開始的大範圍檢查,可以先全部勾起。
設定完成就會如這樣變成一條規則寫在這裡,這邊如果有多條規則也能夠依你想要寫的順序優先排列。
設定完成規則後,還有一個要設定是 By Site 的 FREB enable,可以從上圖兩個地方進行設定,要錄 FREB 的時候這邊的 Enable 要打開,不錄的時候可以從這邊關掉,就不用再去刪改規則。這邊也可以設定希望最多保存多少個最新的 Log,避免你的 Log 太多佔用空間。
如果你設定了規則、也在網站上打開了 FREB 的 Enable,但錯誤出現仍沒有記錄對應的檔案,那會建議先做以下幾點排查:
我自己通常是不太會遇到這個情況,真的抓不到就把條件放寬來抓,或是先連 200 的狀態碼也抓,確認 FREB 模組本身設定運作正常,沒問題再改成你的目標條件。
我們來看一下錄下來的檔案會長怎麼樣,上圖基本就是資料夾結構,各個錯誤的追蹤日誌本身是透過 xml 的格式儲存,而 xml 再透過 freb.xsl 這個檔案的幫助,能夠把 xml 轉成合適觀看的 html 樣式, 我們就能在瀏覽器中觀看該錯誤追蹤檔案。freb.xsl 中有定義對應的顯示方式,你可以透過點開任一個 xml 的錯誤追蹤檔案,就會看到他有定義對應的參考在第二行。如果你瀏覽器打開檔案是亂碼,檢查一下同資料夾底下有沒有 freb.xsl,沒有話從別的地方貼一個過去,基本它是通用的格式定義檔。
現在我們有了檔案,如果你仍有 IE,可以直接透過 IE 打開,新版的瀏覽器不支援瀏覽本地的 xml 檔案,或是你可以選擇使用 Edge 搭配 IE Mode, IE Mode 的設定可以在 edge://settings/defaultBrowser 裡打開,打開後需要重啟瀏覽器。
重啟完成在右上角的 ... 的頁面設定裡,應該就會多出如上圖一樣的 Reload in Internet Explorer mode 的按鈕,我們先把 xml 用 edge 打開,再按下這個按鈕。
登登,這樣檔案就成功開啟,我們也能夠閱讀裡面內容了。
關於如何閱讀裡面的內容,我們留待明天和大家分享,設定的內容講得比我想得多一些,希望能幫助到對設定過程和最前面運作方式有疑問的讀者。