第28天:記錄與監控
課程簡介
記錄與監控是應用程式運行過程中不可或缺的部分,它們有助於開發者了解系統狀態、診斷問題,並確保應用程式的穩定性和效能。在 .NET 中,透過有效的記錄(Logging)和監控工具,開發者能夠迅速定位問題,進而解決效能瓶頸或潛在錯誤。
學習目標
- 了解記錄的重要性與最佳實踐
- 掌握 .NET 中的記錄框架
- 探索如何設置監控系統來檢測應用程式效能與健康狀態
- 實作應用程式的記錄與監控,實現主動監控與故障處理
課程內容
1. 記錄(Logging)
記錄的重要性
記錄能夠幫助開發者:
- 追蹤應用程式的運行情況
- 調試與解決應用程式中的問題
- 分析系統效能、使用模式與錯誤行為
有效的記錄策略能夠讓開發者在錯誤發生時快速找到原因,並根據歷史記錄進行診斷和優化。
使用 .NET 的 Logging API
.NET 提供內建的 Microsoft.Extensions.Logging API,這是一個靈活且可擴展的記錄系統。
建立 Logger
要使用 .NET 的記錄功能,首先要建立一個 ILogger 實例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using Microsoft.Extensions.Logging;
public class MyService
{
private readonly ILogger<MyService> _logger;
public MyService(ILogger<MyService> logger)
{
_logger = logger;
}
public void DoWork()
{
_logger.LogInformation("Doing work at {time}", DateTime.Now);
}
}
常見的記錄等級
- Trace: 追蹤信息,詳細記錄系統運行情況。
- Debug: 用於調試的資訊,僅在開發環境中使用。
- Information: 重要的執行資訊,顯示一般系統狀態。
- Warning: 表示潛在問題的資訊,但系統仍然正常運行。
- Error: 錯誤發生時的資訊,表示功能可能已失敗。
- Critical: 致命錯誤,系統可能無法繼續運行。
配置 Logger
在 .NET Core 中,可以在 appsettings.json
或程式碼中配置記錄的層級與輸出方式。例如,透過 appsettings.json
來設定日誌層級:
1
2
3
4
5
6
7
8
9
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"System": "Warning"
}
}
}
2. 集成第三方記錄框架
除了內建的 Logging API,還可以整合第三方的記錄框架,例如 Serilog 或 NLog,這些框架提供了更豐富的記錄格式和輸出選項,如寫入檔案、資料庫或遠端伺服器。
使用 Serilog
Serilog 是一個非常受歡迎的第三方記錄框架,它支持結構化日誌,非常適合分析複雜的日誌資料。
安裝 Serilog
首先,安裝 Serilog 及其對應的提供程式:
1
dotnet add package Serilog.AspNetCore
配置 Serilog
在 Program.cs
中配置 Serilog:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using Serilog;
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
try
{
Log.Information("Starting application");
CreateHostBuilder(args).Build().Run();
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
3. 監控(Monitoring)
為什麼需要監控
監控應用程式能夠提供以下資訊:
- 系統資源使用情況(如 CPU、記憶體)
- 服務運行狀態
- 錯誤與異常的統計
- 系統的響應速度與效能指標
監控能幫助開發者在問題發生前預測潛在故障,並在問題出現時即時響應。
使用 Application Insights 進行監控
Azure Application Insights 是 Microsoft 提供的雲端監控服務,它可以幫助開發者監控應用程式的效能、診斷錯誤並收集使用者行為資料。
集成 Application Insights
要在 .NET Core 中使用 Application Insights,只需添加 NuGet 套件並進行基本配置:
1
dotnet add package Microsoft.ApplicationInsights.AspNetCore
配置 Application Insights
在 Startup.cs
中,添加 Application Insights 支持:
1
2
3
4
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry();
}
這樣,應用程式的所有請求、例外、及效能資料都會自動發送至 Application Insights 進行監控。
使用 Prometheus 進行監控
Prometheus 是一個開源的監控系統,可以與 .NET 應用整合,提供詳細的應用效能指標。
配置 Prometheus
可以使用 prometheus-net 庫來將 Prometheus 集成至 .NET 應用程式:
1
dotnet add package prometheus-net.AspNetCore
在 Startup.cs
中配置 Prometheus:
1
2
3
4
5
6
7
8
9
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapMetrics(); // 啟用 Prometheus 指標路由
});
}
這樣,Prometheus 將會監控應用程式的關鍵效能指標。
4. 設定健康檢查(Health Checks)
健康檢查是監控系統中的一個重要部分,它能夠自動檢測應用程式的狀態,並在異常情況下發出警報。
使用 .NET Core 的健康檢查功能
在 .NET Core 中,內建有健康檢查功能,可以快速設定服務健康檢查。
安裝健康檢查 NuGet 套件
1
dotnet add package Microsoft.AspNetCore.Diagnostics.HealthChecks
配置健康檢查
在 Startup.cs
中啟用健康檢查:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health"); // 設置健康檢查端點
});
}
健康檢查將自動檢測應用程式的運行情況,並可根據需求進行自訂擴展,如檢查資料庫連接、外部 API 可用性等。
5. 實作練習
- 設置應用程式的記錄系統:
- 使用內建的
ILogger
或集成 Serilog,將應用程式的運行資訊記錄到控制台或檔案中。
- 使用內建的
- 集成監控工具:
- 使用 Azure Application Insights 或 Prometheus 來監控應用程式的效能指標,並查看監控儀表板。
- 實現健康檢查功能:
- 在 Web 應用程式中配置健康檢查,並設置一個端點來檢測系統的運行情況。
教學重點
- 學會使用 .NET 中的 Logging API 或第三方記錄框架(如 Serilog)來進行應用程式的記錄。
- 理解監控的重要性,並學習如何集成 Azure Application Insights 或 Prometheus 來監控應用程式的效能。
- 學會設置健康檢查來自動檢測應用程式的健康狀態。
透過有效的記錄與監控系統,開發者能夠更好地管理應用程式的運行狀況,
並迅速應對問題,確保應用程式的穩定性與高效能。