使用 .NET 與 ELK Log集中與分析

引言

在現代應用程序開發中,日誌記錄是診斷、監控和分析系統運行狀態的重要工具。當應用程序規模擴大,涉及多個服務或節點時,傳統的日誌文件管理方式已無法滿足需求。ELK 堆疊(Elasticsearch、Logstash、Kibana)提供了強大的日誌集中收集、存儲和分析解決方案。本文將詳細介紹如何在 .NET 環境中,使用 ELK 堆疊實現日誌的集中化與分析。

認識 ELK 堆疊

ELK 堆疊由三個開源產品組成:

  • Elasticsearch:分佈式搜索和分析引擎,用於存儲和查詢日誌數據。
  • Logstash:數據處理管道工具,用於收集、處理和轉發日誌數據。
  • Kibana:數據視覺化平台,用於搜索、查看和分析存儲在 Elasticsearch 中的數據。

搭建 ELK 環境

以下是在 Windows 環境下安裝 ELK 堆疊的步驟。

安裝 Elasticsearch

  1. 下載 Elasticsearch:訪問 Elasticsearch 官方下載頁面,選擇適合的版本。

  2. 解壓文件:將下載的壓縮包解壓到指定目錄。

  3. 運行 Elasticsearch

    • 打開命令提示符,進入 bin 目錄。
    • 運行以下命令啟動服務:
      1
      elasticsearch.bat
  4. 驗證安裝:在瀏覽器中訪問 http://localhost:9200,應顯示 Elasticsearch 的基本信息。

安裝 Logstash

  1. 下載 Logstash:訪問 Logstash 官方下載頁面

  2. 解壓文件:將下載的壓縮包解壓到指定目錄。

  3. 創建配置文件

    • 在 Logstash 目錄下創建一個名為 logstash.conf 的配置文件,內容如下:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      input {
      http {
      port => 5000
      }
      }

      output {
      elasticsearch {
      hosts => ["localhost:9200"]
      index => "logs-%{+YYYY.MM.dd}"
      }
      stdout { codec => rubydebug }
      }
  4. 運行 Logstash

    • 打開命令提示符,進入 bin 目錄。
    • 運行以下命令啟動 Logstash:
      1
      logstash.bat -f path\to\logstash.conf

安裝 Kibana

  1. 下載 Kibana:訪問 Kibana 官方下載頁面

  2. 解壓文件:將下載的壓縮包解壓到指定目錄。

  3. 配置 Kibana

    • 編輯 config/kibana.yml 文件,確保 Elasticsearch 的地址配置正確:
      1
      elasticsearch.hosts: ["http://localhost:9200"]
  4. 運行 Kibana

    • 打開命令提示符,進入 bin 目錄。
    • 運行以下命令啟動 Kibana:
      1
      kibana.bat
  5. 驗證安裝:在瀏覽器中訪問 http://localhost:5601,應顯示 Kibana 的界面。

配置 .NET 應用程序進行日誌記錄

我們將使用 Serilog 作為日誌記錄框架,並使用 Serilog.Sinks.Elasticsearch 將日誌發送到 Elasticsearch。

使用 Serilog

創建 .NET 應用程序:

  1. 打開 Visual Studio,創建一個新的 .NET Core 控制台應用程序。

安裝 NuGet 套件:

  1. 右鍵點擊項目,選擇 管理 NuGet 套件
  2. 搜索並安裝以下套件:
    • Serilog
    • Serilog.Sinks.Elasticsearch
    • Serilog.Sinks.Console

配置 Serilog 輸出到 Elasticsearch

Program.cs 中:

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
31
32
33
34
35
36
37
38
using System;
using Serilog;

namespace ELKLoggingDemo
{
class Program
{
static void Main(string[] args)
{
// 配置 Serilog
Log.Logger = new LoggerConfiguration()
.Enrich.WithProperty("Application", "ELKLoggingDemo")
.WriteTo.Console()
.WriteTo.Elasticsearch(new Serilog.Sinks.Elasticsearch.ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
AutoRegisterTemplate = true,
IndexFormat = "logs-{0:yyyy.MM.dd}"
})
.CreateLogger();

try
{
Log.Information("應用程序開始運行");
// 模擬一些操作
Log.Warning("這是一個警告信息");
throw new Exception("模擬異常");
}
catch (Exception ex)
{
Log.Error(ex, "發生了異常");
}
finally
{
Log.CloseAndFlush();
}
}
}
}

說明:

  • Enrich.WithProperty:為日誌添加全局屬性,方便在 Kibana 中過濾。
  • WriteTo.Console():將日誌輸出到控制台。
  • WriteTo.Elasticsearch():配置 Elasticsearch 輸出,指定 Elasticsearch 的地址和索引格式。

測試日誌記錄

運行應用程序,您應能在控制台看到日誌輸出。同時,日誌也被發送到 Elasticsearch。

在 Kibana 中分析日誌

建立索引模式

  1. 打開 Kibana:在瀏覽器中訪問 http://localhost:5601
  2. 建立索引模式:
    • 導航到 Management -> Stack Management -> Index Patterns
    • 點擊 Create index pattern
    • Index pattern 中輸入 logs-*,點擊 Next step
    • 選擇時間字段(如果有),然後點擊 Create index pattern

使用 Discover 功能

  1. 導航到 Discover:
    • 在左側菜單中點擊 Discover
    • 選擇剛創建的索引模式 logs-*
  2. 查看日誌:
    • 您應能看到從 .NET 應用程序發送的日誌。
    • 可以使用搜索和過濾功能定位特定的日誌。

創建視覺化圖表

  1. 創建視覺化圖表:
    • 點擊 Visualize Library -> Create visualization
    • 選擇圖表類型(例如,柱狀圖、餅圖)。
  2. 配置數據源:
    • 選擇索引模式 logs-*
    • 配置聚合方式,例如按日誌級別統計數量。
  3. 保存視覺化圖表:
    • 配置完成後,點擊 Save,為視覺化圖表命名。

建立儀表板

  1. 創建儀表板:
    • 點擊 Dashboard -> Create dashboard
  2. 添加視覺化圖表:
    • 點擊 Add,選擇剛創建的視覺化圖表。
  3. 保存儀表板:
    • 點擊 Save,為儀表板命名。

結論

通過上述步驟,我們成功地在 .NET 應用程序中集成了 ELK 堆疊,實現了日誌的集中化收集和分析。這種方式有助於更好地監控應用程序的運行情況,快速定位和解決問題。

參考資源