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

1 什麼是ELK?

ELK,是Elastaicsearch、Logstash和Kibana三款軟件的簡稱。Elastaicsearch是一個開源的全文搜索引擎。Logstash則是一個開源的數據收集引擎,具備實時的管道,它能夠動態地將不一樣的數據源的數據統一塊兒來。Kibana是一個日誌可視化分析的平臺,它提供了一系列日誌分析的Web接口,能夠使用它對日誌進行高效地搜索、分析和可視化操做。咱們能夠定義ELK是一個集日誌收集、搜索、日誌聚合和日誌分析於一身的完整解決方案。web

3 如何使用ELK?

首先,安裝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

建立完索引,就能夠看到目前收集的日誌信息了,在此基礎上,咱們能夠作進一步的檢索、過濾,來生成各類各樣的「查詢」。而每個「查詢」實際上就是一個數據源。日誌

相關文章
相關標籤/搜索