asp.net core結合NLog搭建ELK實時日誌分析平臺

0、總體架構


 

總體架構目錄:ASP.NET Core分佈式項目實戰-目錄html

1、介紹ELK


 

一、說明(此篇ELK採用rpm的方式安裝在服務器上)-牛刀小試

承接上一篇文章的內容準備部署ELK來展現asp.net core 的數據。目前此篇文章只用到單臺服務器,等下一篇將會介紹如何作到集羣部署ELK+filebeat+MQ,由於這個集羣部署纔是真正體現大項目的價值。固然若是是小項目或者是內部項目單臺足以。java

固然ELK只是在業界用的比較多,可是裏面所用的工具是能夠替換的,好比說 以下:linux

體現價值的解決方案就是:es+kibana+filebeat/logstash+MQ(RabbitMQ/Kfaka) 來實現日誌記錄等。docker

 

多介紹一下吧:瀏覽器

Beats包含四種工具:服務器

  Packetbeat(蒐集網絡流量數據)
  Topbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用狀況等數據)
  Filebeat(蒐集文件數據)
  Winlogbeat(蒐集 Windows 事件日誌數據)
  它是一個輕量級的日誌收集處理工具(Agent)微信

 

自此,解決方案不少,關鍵在於不一樣的項目用不一樣的解決方案,關鍵看你們的選擇啦。固然若是你們有興趣能夠加一下QQ羣,能夠互相探討技術。restful

 

若是你們對NLog不會部署,請看上一篇文章:asp.net core添加全局異常處理及log4net、Nlog應用cookie

好了接下來就要開始部署啦,請準備大家的服務器和VS吧。網絡

 

二、環境說明

軟件 版本
CentOS 7.4
Docker ce-18.06
Elasticsearch 5.5.0
Logstash 5.5.0
Kibana 5.5.0
VS2017 2017

 

介紹一下ELK實時日誌分析平臺。

Elasticsearch:是個開源分佈式搜索引擎,提供收集、分析、存儲數據三大功能,它的特色:分佈式、零配置、自動發現、索引自動分片、索引副本機制、restful風格接口、多數據源、自動搜索負載等。

Logstash:主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。

Kibana:Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。

 

2、部署ELK


 

目前因爲我在公司部署的ELK,在使用docker下載官方的ELK鏡像時,沒法下載。所以我在家裏的時候就把ELK所須要的鏡像下載好後放在阿里雲的鏡像倉庫中,而後在公司的電腦裏面直接下載,速度比較快。

若是有碰到以上下載鏡像問題的同窗,能夠嘗試我這中辦法。

0、前提須要安裝JAVA環境

命令:
wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm

 

若是發現 下載地址失效請登陸:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 這個連接找尋下載地址

 

安裝JDK8:
rpm -ivh jdk-8u181-linux-x64.rpm

檢查 JDK是否安裝成功:
java -version

 

一、部署Elasticsearch

安裝
官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方網站有不少安裝方式,這裏採用rpm安裝。

//進入local目錄
cd /usr/local


//建立elasticsearch文件夾

mkdir elasticsearch


//進入elasticsearch文件夾
cd elasticsearch


//開始下載
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm


//開始安裝
rpm -ivh elasticsearch-5.5.0.rpm

 

配置

//查找安裝目錄
whereis elasticsearch


//進入安裝目錄
cd /etc/elasticsearch


//編輯配置文件
vi elasticsearch.yml

 

主要配置Network.host(本機ip)和http.port(默認9200)(目前單節點模式,其餘參數請參考官方文檔)

 

 

啓動服務

//開啓端口9200
firewall-cmd --add-port=9200/tcp --permanent


//從新加載配置
firewall-cmd --reload

//設置服務開機啓動
systemctl enable elasticsearch


//啓動服務
systemctl start elasticsearch

 

在瀏覽器打開http://192.168.161.191:9200/,以下圖所示表示啓動成功了

 

二、部署kibana

官網文檔:https://www.elastic.co/guide/en/kibana/current/index.html

安裝

//進入elasticsearch目錄
cd /usr/local/elasticsearch


//下載Kibana rpm 64位包
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm


//安裝Kibana
rpm -ivh kibana-5.5.0-x86_64.rpm

 

配置

//進入安裝目錄
cd /etc/kibana


//編輯配置文件
vi kibana.yml

 

設置端口號:5601,Host地址:"192.168.161.191" ,elasticsearch服務地址爲:"http://192.168.161.191:9200"

 

啓動服務

//開啓端口5601
firewall-cmd --add-port=5601/tcp --permanent


//從新加載配置
firewall-cmd --reload

//設置服務開機啓動
systemctl enable kibana


//啓動服務
systemctl start kibana

 

在瀏覽器打開http://192.168.161.191:5601,將進入到Kibana管理界面

 

三、部署logstash

官方文檔:https://www.elastic.co/guide/en/logstash/current/index.html

安裝

//進入elasticsearch目錄
cd /usr/local/elasticsearch


//下載logstash rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.rpm


//安裝rpm包
rpm -ivh logstash-5.5.0.rpm

 

配置

//進入安裝目錄
cd /etc/logstash


//進入conf.d目錄
cd conf.d


//新增配置信息
vi nlog.conf

 

 

直接在logstash.conf配置便可。

input{
        tcp{
                host=>"192.168.161.191"
                port=>8001
        }
}
filter{
        grok{
                match=>{
                        "message"=>"#%{DATA:request_time}#%{DATA:log_level}#%{DATA:log_info}#"
                }
        }
}
output{
        elasticsearch{
                hosts=>["192.168.161.191:9200"]
                index=>"default"
                document_type=>"logs"
        }
}

  


input:採用TCP監控本機8001端口的消息
filter:使用grok 插件,自定義消息格式,推薦使用grokdebug在線進行調試
output:使用elasticsearch做爲數據存儲

 

五、重啓修改配置後的logstash

若是是上面的第二種方式,採用tcp端口,則重啓須要配置 8001端口
即: -p 8001:8001

docker run -d --restart always -p 8001:8001 --name logstash -v /home/logstashdata/config:/usr/share/logstash/config -v /home/logstashdata/pipeline:/usr/share/logstash/pipeline logstash:6.3.0

 

啓動服務

//開啓端口8001
firewall-cmd --add-port=8001/tcp --permanent


//重載配置
firewall-cmd --reload

//設置開機啓動
systemctl enable logstash


//啓動logstash
systemctl start logstash

3、asp.net core 結合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">


  <!-- the targets to write to -->
  <targets>
    <!-- 輸出到文件,這個文件記錄全部的日誌 -->
    <target xsi:type="File" name="allfile" fileName="Log\LogAll\${shortdate}.htm"
                 layout="<HR COLOR=red>${longdate}<BR>${logger}<BR>${uppercase:${level}}<BR>${message} ${exception}<HR Size=1>" />
    <!-- 輸出到文件,這個文件記錄錯誤日誌 -->
    <target xsi:type="File" name="logError" fileName="Log\LogError\${shortdate}.htm"
            layout="<HR COLOR=red>【異常時間】:${date} <BR>【異常級別】:${level:uppercase=true} <BR>${message}<HR Size=1>" />

    <!-- 輸出到文件,這個文件記錄操做日誌 -->
    <target xsi:type="File" name="logInfo" fileName="Log\LogInfo\${shortdate}.htm"
                 layout="<HR COLOR=red>【操做時間】:${date} <BR>【操做級別】:${level:uppercase=true} <BR>${message}<HR Size=1>"  />

    <target xsi:type="Network" name="ownLog-tcp-Info" keepConnection="false" address ="tcp://192.168.161.191:8001" layout="#【操做時間】:${date} #【操做級別】:${level:uppercase=true} #${message}#"/> <target xsi:type="Network" name="ownLog-tcp-Error" keepConnection="false" address ="tcp://192.168.161.191:8001" layout="#【異常時間】:${date} #【異常級別】:${level:uppercase=true} #${message}#"/>

  </targets>
  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <logger name="*" minlevel="Error" writeTo="logError" />
    <logger name="*" minlevel="Info" writeTo="logInfo" />
 <logger name="*" minlevel="Info" writeTo="ownLog-tcp-Info" /> <logger name="*" minlevel="Error" writeTo="ownLog-tcp-Error" />
    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxLevel="Trace" final="true" />
    <!--<logger name="DotNetCore.CAP.*" maxLevel="Info" final="true" />
    <logger name="IdentityServer4.*" maxLevel="Info" final="true" />-->

  </rules>
</nlog>

  

配置結束,運行項目。

打開kibana,添加一下索引,固然這個索引名稱須要和上面在logstash中的es索引同樣,由於是要根據索引名稱來查找數據的。

 

 

 添加索引完後,就能夠查看數據啦。

 

等下一篇部署在Docker上。拭目以待吧。

 

 參考文檔:https://www.cnblogs.com/piscesLoveCc/p/7230426.html

 

asp.net core 交流羣:787464275 歡迎加羣交流
若是您認爲這篇文章還不錯或者有所收穫,您能夠點擊右下角的【推薦】按鈕精神支持,由於這種支持是我繼續寫做,分享的最大動力!

做者:LouieGuo
聲明:原創博客請在轉載時保留原文連接或者在文章開頭加上本人博客地址,如發現錯誤,歡迎批評指正。凡是轉載於本人的文章,不能設置打賞功能,若有特殊需求請與本人聯繫!

微信公衆號:歡迎關注                                                 QQ技術交流羣: 歡迎加羣

                

相關文章
相關標籤/搜索