ELK一個優秀的日誌收集、搜尋、分析的解決方案
阿新 • • 發佈:2021-01-23
# 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