文章

第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,還可以整合第三方的記錄框架,例如 SerilogNLog,這些框架提供了更豐富的記錄格式和輸出選項,如寫入檔案、資料庫或遠端伺服器。

使用 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. 實作練習

  1. 設置應用程式的記錄系統
    • 使用內建的 ILogger 或集成 Serilog,將應用程式的運行資訊記錄到控制台或檔案中。
  2. 集成監控工具
    • 使用 Azure Application Insights 或 Prometheus 來監控應用程式的效能指標,並查看監控儀表板。
  3. 實現健康檢查功能
    • 在 Web 應用程式中配置健康檢查,並設置一個端點來檢測系統的運行情況。

教學重點

  • 學會使用 .NET 中的 Logging API 或第三方記錄框架(如 Serilog)來進行應用程式的記錄。
  • 理解監控的重要性,並學習如何集成 Azure Application Insights 或 Prometheus 來監控應用程式的效能。
  • 學會設置健康檢查來自動檢測應用程式的健康狀態。

透過有效的記錄與監控系統,開發者能夠更好地管理應用程式的運行狀況,

並迅速應對問題,確保應用程式的穩定性與高效能。

本文章以 CC BY 4.0 授權