Elasticsearch,Kibana,Logstash,NLog實現ASP.NET Core 分佈式日誌系統php
Elasticsearch 官方網站 html
Elasticsearch文檔java
NLog.Targets.ElasticSearch packagenode
Elasticsearch 做爲核心的部分,是一個具備強大索引功能的文檔存儲庫,而且能夠經過 REST API 來搜索數據。git
它使用 Java 編寫,基於 Apache Lucene,儘管這些細節隱藏在 API 中。github
經過被索引的字段,能夠用許多不一樣的聚合方式找到任何被存儲(索引)的文檔。apache
可是,ElasticSearch不單單隻提供對這些被索引文檔的強大搜索功能。centos
快速、分佈式、水平擴展,支持實時文檔存儲和分析,支持數百臺服務器和 PB 級索引數據。瀏覽器
同時做爲 Elastic stack (aka ELK) 的核心,提供了諸如 LogStash、Kibana 和更多的強大應用。bash
Kibana 是 Elasticsearch 中專門提供強有力的可視化查詢Web應用程序。
使用Kibana,能很是簡單地爲 Elasticsearch 中索引的數據建立查詢、圖表和儀表盤。
Elasticsearch開放了一個 REST API,你會發現許多文檔示例是 HTTP 調用,你能夠嘗試使用 curl 或 postman 等工具。
固然,這個 API 的客戶端已經用許多不一樣的語言編寫,包括.Net、Java、Python、Ruby和JavaScript等。
Logstash是一個具有實時處理能力的開源的數據收集引擎。能夠動態地從不一樣的來源收集數據,將數據處理(過濾、變形)過以後統一輸出到某個特定地址,爲未來更多樣化的數據分析作準備。
懶人一鍵安裝
yum install java*
查看JDK版本信息
java -version
官方網站有不少安裝方式,我這裏採用的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
下面是本文介紹的重點內容了,經過Nlog記錄日誌,將消息發送到logstash,logstash將轉換後的消息存儲到elasticsearch,並供在kibana中查詢使用。
本文經過VS2017建立的.NETCore 1.1 項目 Elasticsearch.QuickStart
NLog.Web.AspNetCore
Nlog.Extensions.Logging (pre版本)
<?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的模板信息。
1:LogStash+ElasticSearch簡單使用(CentOS)
2:使用ElasticSearch,Kibana,ASP.NET Core和Docker可視化數據
3:Elastic Stack and Product Documentation