1. 程式人生 > >ELK一個優秀的日誌收集、搜尋、分析的解決方案

ELK一個優秀的日誌收集、搜尋、分析的解決方案

# 1 什麼是ELK? ELK,是Elastaicsearch、Logstash和Kibana三款軟體的簡稱。Elastaicsearch是一個開源的全文搜尋引擎。Logstash則是一個開源的資料收集引擎,具有實時的管道,它可以動態地將不同的資料來源的資料統一起來。Kibana是一個日誌視覺化分析的平臺,它提供了一系列日誌分析的Web介面,可以使用它對日誌進行高效地搜尋、分析和視覺化操作。我們可以定義ELK是一個集日誌收集、搜尋、日誌聚合和日誌分析於一身的完整解決方案。 # 3 如何使用ELK? **首先**,安裝ELK,以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的介面: ![](https://gitee.com/zcqiand/self-media/raw/master/assets/img/210115/uOQSCUxfWYManK6.png) **接著**,我們通過 Serilog 來收集日誌資訊,建立 ELK.WebApi01 專案,並在專案中引入三個依賴項:Serilog.AspNetCore和Serilog.Sinks.ElasticSearch。 ``` Serilog.AspNetCore Serilog.Sinks.ElasticSearch ``` **接著**,Program檔案中增加: ``` 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