日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一步一步指導您使用 ElasticSearch, Kibana, ASP.NET Core 2.1 和 Docker 來記錄日志

在本教程中,我將向您展示如何啟動和運行 ElasticSearch,Kibana 和 ASP.NET Core 2.1

在開始之前,讓我們來看看?ElasticSearch,Kibana?和?Serilog?分別是什么。

什么是?ElasticSearch??

簡單來說,ElasticSearch?是一個開源數據庫,非常適合索引日志和分析數據。

什么是?Kibana??

Kibana?是開源的?ElasticSearch?的數據可視化用戶界面。可以將?ElasticSearch?視為數據庫,將Kibana?視為?Web?用戶界面,您可以使用它在?ElasticSearch?中構建圖表和查詢數據。

什么是?Serilog??

Serilog?是?ASP.NET?Core?的一個插件,可以簡化日志記錄。Serilog?有各種可用的接收器,例如,有純文本、SQL?和?ElasticSearch?接收器等等。

為什么?ElasticSearch?如此受歡迎?

除了幾乎每個應用程序都需要日志記錄這一事實之外,ElasticSearch?解決了許多問題并且做得非常好:

  • 它是免費和開源的
    免費。好吧,我承認是基本功能免費。如果您需要?Kibana?中的安全和警報功能,您可以購買?Kibana?的商業?X-pack?訂閱,或者可以找一些開源的替代品。

  • RESTful API
    ElasticSearch?有一個?RESTful?的?API。查詢結果以?JSON?格式返回,這意味著結果是非常易用的。通過?RESTful?API?查詢和插入數據意味著使用任何編程語言都可以輕松使用?ElasticSearch。

  • 易于查詢
    ElasticSearch?有一個內置的基于?Apache?Lucene?的全文搜索引擎。與其他數據庫相比,Lucene易于查詢。即使是非技術人員也可以編寫常見查詢。

  • 快 - 非常快
    查詢大型?SQL?數據庫很容易花費?10?或?20?秒。對于大型?ElasticSearch?數據庫上的類似查詢,在?10?毫秒內返回結果是很常見的。

  • 可擴展
    它很容易擴展。再加上它是開源的,?這意味著您可以很容易控制您的錢包。

  • 易于安裝
    只需啟動包含?ElasticSearch?和?Kibana?容器的?docker?compose?文件,您就可以開始記錄和搜索了。

為什么我需要?ElasticSearch?和?Kibana??

如果您曾經構建過應用程序,那么你一定記錄過日志。我們經常去記錄錯誤,但這些錯誤日志存儲在服務器某處的文件文件里,經常會無法被訪問。ElasticSearch?使任何類型的日志記錄變得簡單,易于訪問和搜索。

ElasticSearch?令人難以置信的速度和簡單的查詢語言加上?Kibana?的圖形界面,構成了強大的組合。如果您還沒有使用?ElasticSearch?進行日志記錄,我強烈建議您開始使用它。

信息足夠了,讓我們開始?Coding?。

我將使用?Visual?Studio?Code,一個開源的跨平臺代碼編輯器。出于本教程的目的,我將使用?Mac?OSX,但您也可以使用?Ubuntu?或?Windows?10。

準備條件

要繼續下面的步驟,請確保安裝了這些:

  • Docker

  • Visual Studio Code

  • .NET Core SDK 2.1.300 或更高版本 (?下載?)

創建項目文件夾

mkdir elastic-kibana
cd elastic-kibana

使用 .NET Core 命令行創建 MVC 項目

dotnet new mvc -n elastic-kibana -o src

在 Visual Studio Code 中打開項目

cd elastic-kibana
code .

創建 docker compose 文件

接下來,創建一個?docker?compose?文件。此文件將一并啟動?ElasticSearch?和?Kibana?容器,無需為每個容器運行單獨的docker?run命令。

mkdir docker
cd docker

創建一個名為?docker-compose.yml?的文件:

version:?'3.1'

services:

elasticsearch:
image:?docker.elastic.co/elasticsearch/elasticsearch:6.2.4
container_name:?elasticsearch
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
networks:
- docker-network

kibana:
image:?docker.elastic.co/kibana/kibana:6.2.4
container_name:?kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- docker-network

networks:
docker-network:
driver:?bridge

volumes:
elasticsearch-data:

接下來,運行?docker?compose?命令來啟動容器。

docker-compose up -d

第一次運行?docker-compose?up?命令時,它將從?docker?倉庫下載?ElasticSearch?和?Kibana?所需的鏡像,因此它將花費幾分鐘的時間。

運行?docker-compose?up?命令后,請檢查?ElasticSearch?和?Kibana?是否已經啟動。

ElasticSearch

打開?http://localhost:9200?確認?ElasticSearch?已經啟動。

Kibana

打開?http://localhost:5601?確認?Kibana?已經啟動。


加 Nuget 包到項目

我們將添加以下?Serilog?的包到項目。

Serilog
Serilog.Sinks.ElasticSearch
Serilog.Extensions.Logging

cd ..
cd elastic-kibanadotnet add package Serilog
dotnet add package Serilog.Sinks.ElasticSearch
dotnet add package Serilog.Extensions.Logging
dotnet restore

添加一些配置信息到 appsettings.json

添加默認的日志設置以及 ElasticSearch 的 url 到 appsettings.json 文件

{
"Logging":?{
"LogLevel":?{
"Default":?"Information",
"System":?"Information",
"Microsoft":?"Information"
}
},
"ElasticConfiguration":?{
"Uri":?"http://localhost:9200/"
}
}

在 Startup.cs 中配置日志功能

下一步,在 Startup.cs 中配置日志功能

添加這些?using?語句:

using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Sinks.Elasticsearch;

然后,配置?Startup?的構造函數以從?appsettings.json?加載?ElasticSearch?的?URL,并配置?ElasticSearch?的接收器。

public Startup(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{
var builder = new ConfigurationBuilder()
.SetBasePath(hostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", reloadOnChange: true, optional: true)
.AddEnvironmentVariables();

Configuration = builder.Build();

var elasticUri = Configuration["ElasticConfiguration:Uri"];

Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
{
AutoRegisterTemplate = true,
})
.CreateLogger();
}

最后,在?Configure?方法中將?Serilog?添加到日志工廠。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


loggerFactory.AddSerilog();


}

開始記錄日志到 ElasticSearch

現在,通過在 Visual Studio Code 中點擊 F5 或者命令行中執行?dotnet run?來運行?MVC?應用程序。

啟動 Kibana

由于我們在 Startup 類中配置了日志記錄并將最小日志級別設置為?Information,因此運行該應用程序會將一些事件記錄到?ElasticSearch?。

在?http://localhost:5601?打開?Kibana,以便我們可以查看日志。

加載?Kibana?后,您將看到默認頁面。

在 Kibana 中創建索引模式來顯示數據

Kibana?現在還不會顯示任何日志。您必須先指定索引才能查看記錄的數據。為此,請單擊導航中的?Management?鏈接,然后將列在頁面底部的?logstash?索引名稱復制到文本框中,如下所示,然后單擊下一步按鈕。或者,您可以使用*號通配符,例如?logstash-*

然后,通過選擇?@timestamp?指定時間過濾器字段名稱,然后單擊?Create index pattern按鈕。

您現在可以通過單擊導航中的?Discover?鏈接來查看日志。

在 MVC Controller 中記錄自定義消息

由于我們指定要記錄日志級別為?Information?或更高級別的消息,因此默認情況下會記錄大量信息消息。但是如果我們想記錄自己的消息呢?值得慶幸的是,這很容易做到。接下來我將在?HomeController?中記錄一條消息。

添加?using?語句:

using Microsoft.Extensions.Logging;

然后,使用構造函數注入的方式來注入?ILogger?的實例。

ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}

最后,在?Index?Action?中記錄一條消息。

public IActionResult Index()
{
_logger.LogInformation($"oh?hai?there!?:?{DateTime.UtcNow}");

return View();
}

在 Kibana 中搜索

現在我們已經記錄了一條消息,只需打開?Kibana?并搜索日志消息的文本即可。

您還可以將某一條日志在單獨的窗口中打開,以查看各個字段記錄的信息。

我將展示一些基本的搜索示例,來演示在?Kibana?中搜索的容易程度以及?ElasticSearch?的強大功能:

message:"oh hai there"level:"Information"fields.ActionName:"elastic_kibana.Controllers.HomeController.Index"(message:"oh hai there" AND?fields.ActionName:"elastic_kibana.Controllers.HomeController.Index")

記錄錯誤日志到 ElasticSearch

一個典型的需求就是記錄錯誤消息。使用?Serilog?這將變得非常簡單,如下所示。

try
{
throw new Exception("oops. i haz cause error in UR codez.");
}
catch (Exception ex)
{
_logger.LogError(ex, "ur code iz buggy.");
}

在 Kibana 中搜索錯誤日志

在?Kibana?中找到錯誤日志非常簡單,使用如下的搜索條件就可以找到所有的錯誤日志了。

level:?"Error"

我們來看看使用?Serilog?和?ElasticSearch?默認記錄的詳細信息。

它看起來還不錯,但您會注意到異常細節被記錄為一個大大的字符串。在此字符串中搜索信息仍會返回結果,但如果根據特定字段記錄信息,我們可以執行更強大和特定的搜索。值得慶幸的是,有一個名為?Serilog.Exceptions?的插件可以幫助我們。

安裝 Serilog.Exceptions Nuget 包

安裝?Serilog.Exceptions?Nuget?包:

dotnet add package Serilog.Exceptions
dotnet restore

接下來,在 Startup.cs 文件中使用如下 using 語句

using Serilog.Exceptions;

然后,使用 Serilog.Exceptions 來豐富一下 Logger

public Startup(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{


Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithExceptionDetails()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
{
AutoRegisterTemplate = true,
})
.CreateLogger();
}

最后,刷新一下,記錄一個新的錯誤,并在?Kibana?中搜索到它,查看更結構化的錯誤日志記錄。

降低日志級別

您可能會發現?Information?級別日志有點過于冗長,不符合您的口味。默認情況下,ASP.NET?Core?將記錄?Kestrel?托管相關的日志事件。這可能會非常嘈雜。排除掉它們的一種簡單方法是通過修改?appsettings?文件,將?Microsoft?日志級別設置為?Warning?。
或者, 您可以通過將?Default?和?System?的最小日志級別設置為?Error?來進一步限制日志記錄,?如下所示。

"Logging":?{
"LogLevel":?{
"Default":?"Error",
"System":?"Error",
"Microsoft":?"Warning"
}
}

尾聲

傳統的方法,日志記錄需要大量的前期工作才能啟動和運行。因此,日志記錄通常會被完全遺漏,或者寫入到難以訪問的服務器上的某些模糊的文本文件里。

ElasticSearch?和?Kibana?改變了這一切。而?Docker?已經使?ElasticSearch?和?Kibana?的啟動和運行變得毫不費力。ElasticSearch?和?Kibana?提供的強大功能以及非常高的性能,再加上它是開源的,這真的令人印象非常深刻。

即使沒有像?Serilog?這樣的插件,與傳統?ASP.NET?相比,ASP.NET?Core?中的日志記錄也變得更加容易,因此,?在創建可擴展的日志記錄框架方面,?我對?.NET?Core?團隊表示贊賞。Serilog?簡單地構建在此之上,并且擴展了功能,以使?.NET?Core?開發人員的日志記錄變得更簡單。

通過組合?Docker,ElasticSearch,Kibana,ASP.NET?Core?和?Serilog?,您獲得了前所未有的便利性和功能,再也沒有理由不再將日志記錄整合到應用程序中了。

下載源代碼

下載源代碼?:?https://github.com/thecarlo/elastic-kibana-netcore-serilog

資源

Download .NET Core 2.1 SDK
ElasticSeach
Kibana
Serilog
Serilog.Sinks.ElasticSearch Nuget Package


總結

以上是生活随笔為你收集整理的[翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。