ELK,是Elastaicsearch、Logstash和Kibana三款軟件的簡稱。Elastaicsearch是一個開源的全文搜索引擎。Logstash則是一個開源的數據收集引擎,具備實時的管道,它能夠動態地將不一樣的數據源的數據統一塊兒來。Kibana是一個日誌可視化分析的平臺,它提供了一系列日誌分析的Web接口,能夠使用它對日誌進行高效地搜索、分析和可視化操做。咱們能夠定義ELK是一個集日誌收集、搜索、日誌聚合和日誌分析於一身的完整解決方案。web
首先,安裝ELK,以Docker方式安裝。docker
docker pull sebp/elk docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 --name elk sebp/elk
而後,咱們能夠在瀏覽器中輸入地址:http//localhost:9200,這是Elasticsearch的默認端口。咱們能夠獲取關於Elasticseach的信息:瀏覽器
{ "name" : "6a2c8682fba8", "cluster_name" : "docker-cluster", "cluster_uuid" : "dAGvy0BoTju-23eOlQWmGw", "version" : { "number" : "7.9.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e", "build_date" : "2020-09-23T00:45:33.626720Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
接着,咱們繼續在瀏覽器中輸入地址:http://localhost:5601/app/kibana。咱們能夠看到Kibana的界面:app
接着,咱們經過 Serilog 來收集日誌信息,建立 ELK.WebApi01 項目,並在項目中引入三個依賴項:Serilog.AspNetCore和Serilog.Sinks.ElasticSearch。測試
Serilog.AspNetCore Serilog.Sinks.ElasticSearch
接着,Program文件中增長:ui
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; using Serilog.Sinks.Elasticsearch; using System; namespace ELK.WebApi01 { public class Program { public static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .MinimumLevel.Debug() .WriteTo.Elasticsearch( new ElasticsearchSinkOptions(new Uri("http://localhost:9200")) { MinimumLogEventLevel = LogEventLevel.Verbose, AutoRegisterTemplate = true }) .CreateLogger(); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .UseSerilog(); } }
接着,建立LogController,增長日誌測試接口並執行它:this
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; namespace ELK.WebApi01.Controllers { [Route("[controller]")] [ApiController] public class LogController : Controller { private readonly ILogger<LogController> logger; // <-添加此行 public LogController(ILogger<LogController> logger) { this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); } [HttpGet] public void Get() { logger.LogInformation("測試1"); // <-添加此行 } } }
最後,咱們要到那裏去找這些日誌信息呢?咱們在Kibana中點擊左側導航欄最底下的設置按鈕,而後再點擊右側的Create index pattern按鈕建立一個索引。什麼叫作索引呢?在Elasticsearch中索引至關於一張」表」,如圖:搜索引擎
建立索引的時候,會發現列表中列出了目前Elasticsearch中可用的數據。這裏的logstash-2020.02.15就是本文中的ASP.NET Core應用產生的日誌信息。spa
建立完索引,就能夠看到目前收集的日誌信息了,在此基礎上,咱們能夠作進一步的檢索、過濾,來生成各類各樣的「查詢」。而每個「查詢」實際上就是一個數據源。日誌