懶人必備:.NetCore快速搭建ELK分散式日誌中心
該篇內容由個人部落格點選跳轉同步更新!轉載請註明出處!
前言
ELK是什麼
它是一個分散式日誌解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,可用於從不同的服務中收集日誌後進行處理和分析,通過Kibana可以全方面的展示收集後的資訊,比如通過圖表或者表格形式。
能用來做什麼
(一)ELK元件在海量日誌系統的運維中,可用於解決:
- 分散式日誌資料集中式查詢和管理
- 系統監控,包含系統硬體和應用各個元件的監控
- 故障排查
- 安全資訊和事件管理
- 報表功能
(二)ELK元件在大資料運維繫統中,主要可解決的問題如下: - 日誌查詢,問題排查,上線檢查
- 伺服器監控,應用監控,錯誤報警,Bug管理
效能分析,使用者行為分析,安全漏洞分析,時間管理
安裝前準備
我的系統環境是CentOS Linux release 7.6.1810 (Core)
- 安裝GIT(用於下載下文提到的GITHUB專案,你也可以用curl,但專案更新比較快用GIT方便更新)
- 安裝Docker(下面專案將部署到Docker中)
安裝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
這是預設的稍後和大家說下如何修改密碼
- http://127.0.0.1:9200/ 開啟可以看到ES的一些版本資訊等
http://127.0.0.1:5601/ 開啟後就是Kibana的介面,如果ES沒有啟動完成的話會提示你未找到ES資料來源
好了,安裝執行已經全部結束,是不是非常簡單,比起網上那些長篇大論講安裝的,這裡其實就兩步:下載和執行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作為中介軟體的方式以及具體的一些配置內容
微信關注我哦!(轉載註明出處)