.NetCore快速搭建ELK分佈式日誌中心

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

 

該篇內容由我的博客點擊跳轉同步更新!轉載請註明出處!php

前言

ELK是什麼css

它是一個分佈式日誌解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,可用於從不一樣的服務中收集日誌後進行處理和分析,經過Kibana能夠全方面的展現收集後的信息,好比經過圖表或者表格形式。html

能用來作什麼git

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

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

    安裝前準備

    個人系統環境是CentOS Linux release 7.6.1810 (Core)
  1. 安裝GIT(用於下載下文提到的GITHUB項目,你也能夠用curl,但項目更新比較快用GIT方便更新)
  2. 安裝Docker(下面項目將部署到Docker中)
  3. 安裝Docker-Compose(文章會用DC進行服務構建)
    好了,萬事具有,只欠東風。docker

    懶人安裝

    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做爲中間件的方式以及具體的一些配置內容

相關文章
相關標籤/搜索