懶人必備:.NetCore快速搭建ELK分布式日志中心


該篇內容由個人博客點擊跳轉同步更新!轉載請注明出處!

前言

ELK是什么

它是一個分布式日志解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,可用於從不同的服務中收集日志后進行處理和分析,通過Kibana可以全方面的展示收集后的信息,比如通過圖表或者表格形式。

能用來做什么

(一)ELK組件在海量日志系統的運維中,可用於解決:

  • 分布式日志數據集中式查詢和管理
  • 系統監控,包含系統硬件和應用各個組件的監控
  • 故障排查
  • 安全信息和事件管理
  • 報表功能
    (二)ELK組件在大數據運維系統中,主要可解決的問題如下:
  • 日志查詢,問題排查,上線檢查
  • 服務器監控,應用監控,錯誤報警,Bug管理
  • 性能分析,用戶行為分析,安全漏洞分析,時間管理

安裝前准備

我的系統環境是CentOS Linux release 7.6.1810 (Core)

  1. 安裝GIT(用於下載下文提到的GITHUB項目,你也可以用curl,但項目更新比較快用GIT方便更新)
  2. 安裝Docker(下面項目將部署到Docker中)
  3. 安裝Docker-Compose(文章會用DC進行服務構建)
    好了,萬事具備,只欠東風。

懶人安裝

ELK的安裝比較繁瑣,網上的教程也基本都是一個個下載之后再進行安裝和配置。逛了一圈gayhub找到了docker安裝部署的懶人方式這是項目地址
首先在你的根目錄新建一個文件夾就叫elk,然后通過GIT命令下載項目到該目錄下,進入到該目錄下你可以看到這樣的目錄結構

[root@localhost docker-elk]# ls
docker-compose.yml  docker-stack.yml  elasticsearch  extensions  filebeat  kibana  LICENSE  logstash  README.md

運行命令進行服務構建,記住一定要加個d,不然退出終端服務就停了,這個過程有點漫長,畢竟裝的東西有點多

[root@localhost docker-elk]# docker-compose up -d

裝完后他會默認打開以下這些端口
5000: Logstash TCP input(Logstash數據的接收通道)
9200: Elasticsearch HTTP(ES的http通道)
9300: Elasticsearch TCP transport(ES的TCP通道)
5601: Kibana(UI管理界面)
這幾個服務對應的關系如下圖,應用程序將日志推送給Logstash,然后放到ES進行存儲,最后通過Kibana進行數據展示
服務關系
當然了logstash也有很多對應的插件beats用來收集不同的日志,在高並發的情況下你也可以通過使用redis或者kafka作為中間件進行過渡,就像下面的架構圖一樣
復雜一點
在安裝完成后我們用瀏覽器打開下面兩個地址,這里會提示你輸入用戶名和密碼:
user: elastic
password: changeme
這是默認的稍后和大家說下如何修改密碼

  1. http://127.0.0.1:9200/ 打開可以看到ES的一些版本信息等
    ES信息
  2. http://127.0.0.1:5601/ 打開后就是Kibana的界面,如果ES沒有啟動完成的話會提示你未找到ES數據源
    kibana界面
    好了,安裝運行已經全部結束,是不是非常簡單,比起網上那些長篇大論講安裝的,這里其實就兩步:下載和運行dc文件

.NetCore使用Nlog進行日志收集

首先在你的項目中用Nuget安裝以下兩個類庫
NLog.Extensions.Logging和NLog.Web.AspNetCore
然后新建NLog的配置文件Nlog.config,內容如下 :

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="internal-nlog.txt">

  <extensions>
    <add  assembly="NLog.Web.AspNetCore"/>
  </extensions >
  <variable name="logDirectory" value="${basedir}\logs\"/>
  <!--define various log targets-->
  <targets>
    <!--write logs to file-->
    <!--address 填寫Logstash數據的接收通道-->
    <target xsi:type="Network"
            name="elastic"
            keepConnection="false"
            address ="tcp://127.0.0.1:5000"
            layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
    />
    <target xsi:type="Null" name="blackhole" />
  </targets>
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="elastic" />
  </rules>
</nlog>

然后在Startup>Configure中引入Nlog

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
       LogManager.LoadConfiguration("Nlog.config");//引入配置文件
       loggerFactory.AddNLog();//注入Nlog
}

接下來在自己項目是進行一個簡單的測試

Logger log = NLog.LogManager.GetCurrentClassLogger();
log.Debug("測試日志內容");

Kibana中配置對剛才的日志進行分析

Kibana必須要先有數據后才能對數據進行展示,所以我們必須要有上面的測試數據,然后配置索引進行數據查看
登錄進來后左邊隨機點一個菜單來到如下界面
界面
點擊Create index pattern來到如下界面,這里就是配置你要展現ES中哪個索引下的內容,這里nci-bids-log-2019xxx這是logstash生成的,你們的可能叫logstash-2019xxxx,我的索引在配置中被我重命名了一下方便區分項目
配置索引
通過名稱來進行模糊匹配,匹配規則貌似就是正則,匹配成功會提示如下信息,然后點擊 Next-Step
匹配
這里讓你選擇一個時間字段,就選擇@timestamp然后下一步結束創建,然后點擊左邊第一個菜單就能看到圖表和詳細信息了
日志信息
其它的功能自己摸索吧

配置

ELK的配置文件都是以Volume的方式來掛載的,對應每個文件夾下面的Configs里面。
比如logstash的配置文件cd logstash/config下面的logstash.yml就是他的配置文件。
對了這里使用的版本需要密碼是因為es使用了一個商業版,有效期是30天,如果不想使用這個的話可以去es的配置目錄把xpack的配置改成如下就可以:

xpack.license.self_generated.type: basic
xpack.security.enabled: false
xpack.monitoring.collection.enabled: false

后面有空和大家再分享下通過kafka作為中間件的方式以及具體的一些配置內容

微信關注我哦!(轉載注明出處)關注我哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM