Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
Elasticsearch - 簡介
Elasticsearch 作為核心的部分,是一個具有強大索引功能的文檔存儲庫,并且可以通過 REST API 來搜索數據。它使用 Java 編寫,基于?Apache Lucene,盡管這些細節隱藏在 API 中。通過被索引的字段,可以用許多不同的聚合方式找到任何被存儲(索引)的文檔。但是,ElasticSearch不僅僅只提供對這些被索引文檔的強大搜索功能。快速、分布式、水平擴展,支持實時文檔存儲和分析,支持數百臺服務器和 PB 級索引數據。同時作為 Elastic stack (aka ELK) 的核心,提供了諸如 LogStash、Kibana 和更多的強大應用。
Kibana?是 Elasticsearch 中專門提供強有力的可視化查詢Web應用程序。使用Kibana,能非常簡單地為 Elasticsearch 中索引的數據創建查詢、圖表和儀表盤。
Elasticsearch開放了一個 REST API,你會發現許多文檔示例是 HTTP 調用,你可以嘗試使用 curl 或 postman 等工具。當然,這個 API 的客戶端已經用許多不同的語言編寫,包括.Net、Java、Python、Ruby和JavaScript等。
Logstash是一個具備實時處理能力的開源的數據收集引擎。可以動態地從不同的來源收集數據,將數據處理(過濾、變形)過之后統一輸出到某個特定地址,為將來更多樣化的數據分析做準備。
如果你想,Elasticsearch?官方網站?可能是最好的地方。
注意:文章可能比較長,如果對Elasticsearch安裝以及了解的,可以直接略過,看ASP.NET Core和Nlog部分,本文所有linux命令均在root用戶下操作。
Java環境安裝
懶人一鍵安裝
yum install java*查看JDK版本信息
java -versionElasticsearch文檔
安裝
? 官方網站有很多安裝方式,我這里采用的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.30.128:9200,如下圖所示表示啟動成功了
Kibana文檔
安裝
官方下載地址,官方安裝教程
//進入elasticsearch目錄 cd /usr/local/elasticsearch //下載Kibana rpm 64位包 wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm //安裝Kibana rmp -ivh kibana-5.5.0-x86_64.rpm配置
//進入安裝目錄 cd /etc/kibana //編輯配置文件 vi kibana.yml?設置端口號:5601,Host地址:"192.168.30.128" ,elasticsearch服務地址為:"http://192.168.30.128:9200"
啟動服務
//開啟端口5601 firewall-cmd --add-port=5601/tcp --permanent //重新加載配置 firewall-cmd --reload//設置服務開機啟動 systemctl enable kibana //啟動服務 systemctl start kibana在瀏覽器打開http://192.168.30.128:5601,將進入到Kibana管理界面
LogStash文檔
安裝
官方下載地址?官方安裝教程
//進入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?input:采用TCP監控本機8001端口的消息
?filter:使用grok 插件,自定義消息格式,推薦使用grokdebug在線進行調試
?output:使用elasticsearch作為數據存儲
?
?注意:官方有非常豐富的插件進行消息處理,具體可以查看官方文檔。
啟動服務
//開啟端口8001 firewall-cmd --add-port=8001/tcp --permanent //重載配置 firewall-cmd --reload//設置開機啟動 systemctl enable logstash //啟動logstash systemctl start logstash?
ASP.ENT Core結合Nlog進行日志記錄
?下面是本文介紹的重點內容了,通過Nlog記錄日志,將消息發送到logstash,logstash將轉換后的消息存儲到elasticsearch,并供在kibana中查詢使用。
創建ASP.NET Core項目
本文通過VS2017創建的.NETCore 1.1 項目 Elasticsearch.QuickStart
通過Nuget安裝Nlog依賴包
NLog.Web.AspNetCore
?
?Nlog.Extensions.Logging (pre版本)
?
在Startup.cs添加Nlog服務
新增Nlog配置(Web根目錄)
<?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><!--enable NLog.Web for ASP.NET Core--><add assembly="NLog.Web.AspNetCore"/></extensions><!-- define various log targets --><!--定義日志文件目錄--><variable name="logDirectory" value="${basedir}/logs/${shortdate}"/><variable name="nodeName" value="node1"/><targets async="true"><!-- 全部日志target --><target xsi:type="File"name="allfile"fileName="${logDirectory}/nlog-all/${shortdate}.log"layout="#node1#${longdate}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"keepFileOpen="false"/><!-- 本地文件日志target --><target xsi:type="File"name="ownLog-file"fileName="${logDirectory}/nlog-${level}/${shortdate}.log"layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"keepFileOpen="false"/><!-- Tcp日志target --><target xsi:type="Network"name="ownLog-tcp"keepConnection="false"address ="tcp://192.168.30.128:8001"layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"/><!--grok 規則--><!--%#{DATA:request_time}#%{DATA:node_name}#%{DATA:class_name}#%{DATA:log_level}#%{DATA:call_site}#%{DATA:line_number}#%{DATA:request_url}#%{DATA:request_method}#%{DATA:container_name}#%{DATA:action_name}#%{DATA:log_info}#%{DATA:exception_msg}#--><!--空白--><target xsi:type="Null" name="blackhole" /></targets><!--日志級別 Trace -》Debug-》 Info -》Warn-》 Error-》 Fatal--><!--日志規則--><rules><!--全部日志, 包括Microsoft日志--><logger name="*" minlevel="Trace" writeTo="allfile" /><!--自定義日志,排除Microsoft日志--><logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /><logger name="*" minlevel="Debug" writeTo="ownLog-file" /><logger name="*" minlevel="Info" writeTo="ownLog-tcp" /></rules> </nlog>注意:Tcp target中的address指向在logstash中監聽的地址,在注釋中也給出來了grok的模板信息。
?
測試Nlog日志記錄
在Kibana中查看最終效果
?
總結
本文只是一個示例教程,希望能起到一個拋磚引玉的作用,詳細功能需要大家參考官方文檔。Elasticsearch,Kibana,logstash功能非常強大,我也是剛剛接觸到,如果有不對的地方,還望大家多多包涵和指正。如果這篇文檔對大家有幫助,請點一個贊,謝謝了。
參考
1:LogStash+ElasticSearch簡單使用(CentOS)
2:使用ElasticSearch,Kibana,ASP.NET Core和Docker可視化數據
3:Elastic Stack and Product Documentation
4:Elasticsearch在Centos 7上的安裝與配置
5:Nlog 官方文檔
6:從零開始搭建一個ELKB日志收集系統
posted on 2019-07-02 00:11 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/11117734.html
總結
以上是生活随笔為你收集整理的Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日志模块
- 下一篇: 设计模式---设计模式的分类及六大原则