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
建立完索引,就能够看到目前收集的日志信息了,在此基础上,咱们能够作进一步的检索、过滤,来生成各类各样的“查询”。而每个“查询”实际上就是一个数据源。日志