Asp.net mvc 偵錯與監控 - twMVC#2

46
ASP.NET MVC 偵測監控與 Log 記錄 使用 ELMAH NLog Kevin Tseng http://kevintsengtw.blogspot.com

description

程式開發人員如何確切掌握錯誤的發生與錯誤發生的原因, 講解如何為 ASP.NET MVC 網站增加偵測監控以及 Log 記錄的功能。 2012-06-14 http://mvc.tw

Transcript of Asp.net mvc 偵錯與監控 - twMVC#2

Page 1: Asp.net mvc 偵錯與監控 - twMVC#2

ASP.NET MVC 偵測監控與 Log 記錄

使用 ELMAH 與 NLog

Kevin Tseng http://kevintsengtw.blogspot.com

Page 2: Asp.net mvc 偵錯與監控 - twMVC#2

你~!是怎麼知道系統發生錯誤呢?

2

Page 3: Asp.net mvc 偵錯與監控 - twMVC#2

你~!是怎麼知道系統發生錯誤呢?

3

Page 4: Asp.net mvc 偵錯與監控 - twMVC#2

發生錯誤的原因...

客戶……

好一點,可以提供清楚資訊 普通的,會說剛剛做了什麼事 大部分,一問三不知或是…

4

Page 5: Asp.net mvc 偵錯與監控 - twMVC#2

發生錯誤的原因...

客戶……

好一點,可以提供清楚資訊 普通的,會說剛剛做了什麼事 大部分,一問三不知或是…

5

Page 6: Asp.net mvc 偵錯與監控 - twMVC#2

遇到錯誤時...開發人員好像都這樣反應

1. 在我的機器明明就可以動啊! 2. 一定是你的資料有問題。 3. 你到底是輸入了什麼? 4. 以前從來不會這樣啊! 5. 昨天明明會動的啊! 6. 一定是還沒更新到最新版本. 7. 怎麼可能~ 8. 這一定是機器的問題。 9. 有 bug 是正常的!XD

6

Page 7: Asp.net mvc 偵錯與監控 - twMVC#2

程式開發人員掌握多少資訊?

7

• 如何得知錯誤的發生?

• 發生什麼樣的錯誤?

• 什麼地方發生錯誤?

• 錯誤發生的原因?

Page 8: Asp.net mvc 偵錯與監控 - twMVC#2

工欲善其事 必先利其器

程式開發人員的清醒時間是有限的, 不應該把這寶貴的時間浪費在無盡的錯誤上。 善用工具!更有效的掌握發生錯誤的原因

8

Page 9: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH Error Logging Modules and Handlers for ASP.NET

Page 10: Asp.net mvc 偵錯與監控 - twMVC#2

官網:http://code.google.com/p/elmah/

ELMAH(錯誤日誌記錄模組和處理常式)是一個應用廣泛的

錯誤記錄的裝置。它可以添加到一個正在運行的

ASP.NET Web Application。

應用在 ASP.NET WebForms 與 ASP.NET MVC 網站上。

ELMAH:Error Logging Modules and Handlers

10

Page 11: Asp.net mvc 偵錯與監控 - twMVC#2

記錄系統中幾乎所有未處理的異常例外

可遠端瀏覽這些由ELMAH所記錄下來的異常例外

可遠端瀏覽異常例外記錄的完整細節,包含stack trace

可知道系統錯誤黃頁的完整資訊

可以透過電子郵件的方式寄發錯誤通知

提供 RSS,由 RSS 可以獲取最近的 15 則記錄

ELMAH

在不必插入或是改變你的程式碼情況下,ELMAH提供以下的功能:

11

Page 12: Asp.net mvc 偵錯與監控 - twMVC#2

Microsoft SQL Server

Oracle

SQLite (version 3) database file

Microsoft Access

Loose XML files

RAM (in-memory) …… Default

SQL Server Compact Edition

MySQL

PostgreSQL

ELMAH 支援的儲存裝置

12

Page 13: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH Dashboard

13

Page 14: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH Log Details

14

Page 15: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH Log Details

15

Page 16: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:使用 NuGet 為專案安裝 ELMAH

16

Page 17: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:將記錄資料存到 SQL Server

17

Page 18: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:關閉系統錯誤黃頁

18

Page 19: Asp.net mvc 偵錯與監控 - twMVC#2

customError 的重大資安弱點

<customErrors mode="On" defaultRedirect="~/Error/Unknown"> <error statusCode="404" redirect="~/Error/NotFound" /> <error statusCode="500" redirect="~/Error/internal" /> </customErrors>

黑暗執行緒 - 【重要提醒】請全面檢視並修改web.config customErrors! http://blog.darkthread.net/post-2010-09-20-fix-customerrors-now.aspx 小朱® 的技術隨手寫 - [ASP.NET] ASP.NET 零時差攻擊 – POET 原理與防禦措施 http://www.dotblogs.com.tw/regionbbs/archive/2010/09/21/asp.net.poet.security.vulnerability.aspx Will 保哥- ASP.NET 發現重大資安弱點影響範圍涵蓋 ASP.NET 1.0 ~ 4.0 http://blog.miniasp.com/post/2010/09/19/Security-Hack-Exposes-Forms-Authentication-in-ASPNET.aspx

Page 21: Asp.net mvc 偵錯與監控 - twMVC#2

修正 customError 的重大資安弱點

<!-- for ASP.NET 1.0-3.5 (non SP1) --> <configuration> <system.web> <customErrors mode="On" defaultRedirect="~/Error" /> </system.web> </configuration> <!-- for ASP.NET 3.5 SP1 and 4.0 --> <configuration> <system.web> <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error" /> </system.web> </configuration>

Page 22: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:errorFiltering 排除 404 錯誤

NO!

22

Remember Me !

Page 23: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:無視 ELMAH 安全性設定的實例

23

Page 24: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH 的安全性

24

Page 25: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:ELMAH的安全性設定

25

Page 26: Asp.net mvc 偵錯與監控 - twMVC#2

NLog Advance .NET Logging

Page 27: Asp.net mvc 偵錯與監控 - twMVC#2

官網:http://nlog-project.org/

ELMAH 是用來作為日誌記錄,主要工作是捕捉未處理的異常

(UnHandler Exception),所以有處理的異常就無法捕

捉(try…catch..)。

NLog 讓我們可以在程式裡去處理異常時,依據異常的狀況

而給予不同的等級,NLog 除了處理記錄的儲存外還可以再

依據使用者所定義的等級做後續不同處理方式的操作。

NLog

27

Page 28: Asp.net mvc 偵錯與監控 - twMVC#2

Files – single file or multiple, with automatic file naming and

archival

Event Log – local or remote

Database – store your logs in databases supported by .NET

Network – using TCP, UDP, SOAP, MSMQ protocols

Command-line console – including color coding of messages

E-mail – you can receive emails whenever application errors

occur

ASP.NET trace

… and many more

NLog targets – 支援多種的儲存目標

28

Page 29: Asp.net mvc 偵錯與監控 - twMVC#2

Trace:用於追蹤,可以在程式裡需要追蹤的地方將訊息以Trace傳出。

Debug:用於開發,於開發時將一些需要特別關注的訊息以Debug傳出。

Info:訊息,記錄不影響系統執行的訊息,通常會記錄登入登出或是資料的

建立刪除、傳輸等。

Warn:警告,用於需要提示的訊息,例如庫存不足、貨物超賣、餘額即將不

足等。

Error:錯誤,記錄系統實行所發生的錯誤,例如資料庫錯誤、遠端連線錯

誤、發生例外等。

Fatal:致命,用來記錄會讓系統無法執行的錯誤,例如資料庫無法連線、

重要資料損毀等。

NLog rules – 記錄的等級

29

Page 30: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:使用 NuGet 安裝 NLog

30

Page 31: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:將 NLog 訊息儲存在 SQL Server

31

Page 32: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:設定並使用 Email 寄發 Log 訊息

32

Page 33: Asp.net mvc 偵錯與監控 - twMVC#2

Log Reporting Dashboard Darren Weir

Page 34: Asp.net mvc 偵錯與監控 - twMVC#2

提供一個整合 ELMAH,NLog,log4net,ASP.NET Health Monitoring

記錄訊息的平台

ASP.NET MVC 2

Log Reporting Dashboard for ASP.NET MVC

http://www.codeproject.com/Articles/104112/Log-Reporting-

Dashboard-for-ASP-NET-MVC

Adding the Log Reporting Dashboard to your ASP.Net MVC

app (with MVC Turbine)

http://www.youtube.com/watch?v=Hicjp5MODpI

什麼是 Log Reporting Dashboard

34

Page 35: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:設定 ELMAH 與 NLog

35

Page 36: Asp.net mvc 偵錯與監控 - twMVC#2

DEMO:Log Reporting Dashboard

36

Page 37: Asp.net mvc 偵錯與監控 - twMVC#2

使用 ELMAH 記錄系統中的未處理異常資訊

允許遠端瀏覽 ELMAH 前必須做好安全性的設定

使用 NLog 記錄系統中任何處理訊息

使用 Log Reporting Dashboard 統一讀取 Log

資料

總結 - ASP.NET MVC 偵測監控與 Log 記錄

37

Page 38: Asp.net mvc 偵錯與監控 - twMVC#2

ELMAH

http://code.google.com/p/elmah/

NLog

http://nlog-project.org/

Log Reporting Dashboard

http://mvclogging.codeplex.com/

http://www.codeproject.com/Articles/104112/Log-

Reporting-Dashboard-for-ASP-NET-MVC

http://dotnetdarren.wordpress.com/

參考資料

38

Page 39: Asp.net mvc 偵錯與監控 - twMVC#2

mrkt的程式學習筆記 -系統記錄與效能監測

39

http://kevintsengtw.blogspot.tw/p/blog-page_30.html

Page 40: Asp.net mvc 偵錯與監控 - twMVC#2

我敢跟妳賭,十年後 …… 我連 LOG 是什麼都不知道,照樣活得很好。

Page 41: Asp.net mvc 偵錯與監控 - twMVC#2

謝謝各位 !

41

Page 42: Asp.net mvc 偵錯與監控 - twMVC#2

我們熱愛 Web 開發技術,並樂於分享 ASP.NET MVC 開發心得

已成功建立數個灘頭堡的經驗,深知 MVC 開發模式條理分明,有

利於分工與管理,想推薦給尚未了解的開發人員

不願意看到 MVC 叫好不叫座,我們樂意透過經驗交換來破除導入

障礙

42

為何組成 twMVC

Page 43: Asp.net mvc 偵錯與監控 - twMVC#2

A quite simple http://mvc.tw/

But, it’s still under-construction now

43

twMVC 資訊分享

Page 44: Asp.net mvc 偵錯與監控 - twMVC#2

每週小型聚會,不特定主題

固定於每週四 19:30-21:30,不改時間,逢國定假日暫停一次

議程不會提前排定,以當天參加者最近的心得分享為主

舉辦不定期研討會

44

twMVC 做哪些事推廣 ASP.NET MVC 技術

Page 45: Asp.net mvc 偵錯與監控 - twMVC#2

預先設定主題的中大型會議,主題提前於 mvc.tw 上公告

原則上一個月排定一次,因場地關係會設定報名人數上限

45

twMVC 不定期研討會

Page 46: Asp.net mvc 偵錯與監控 - twMVC#2

46

本次線上問卷

http://www.accupass.com/Question/522076701012640