Elasticsearch,Kibana,Logstash,NLog實現ASP.NET Core 分佈式日誌系統

原文: Elasticsearch,Kibana,Logstash,NLog實現ASP.NET Core 分佈式日誌系統

Elasticsearch - 簡介

Elasticsearch 做爲核心的部分,是一個具備強大索引功能的文檔存儲庫,而且能夠經過 REST API 來搜索數據。它使用 Java 編寫,基於 Apache Lucene,儘管這些細節隱藏在 API 中。經過被索引的字段,能夠用許多不一樣的聚合方式找到任何被存儲(索引)的文檔。可是,ElasticSearch不單單隻提供對這些被索引文檔的強大搜索功能。快速、分佈式、水平擴展,支持實時文檔存儲和分析,支持數百臺服務器和 PB 級索引數據。同時做爲 Elastic stack (aka ELK) 的核心,提供了諸如 LogStash、Kibana 和更多的強大應用。php

Kibana 是 Elasticsearch 中專門提供強有力的可視化查詢Web應用程序。使用Kibana,能很是簡單地爲 Elasticsearch 中索引的數據建立查詢、圖表和儀表盤。
Elasticsearch開放了一個 REST API,你會發現許多文檔示例是 HTTP 調用,你能夠嘗試使用 curl 或 postman 等工具。固然,這個 API 的客戶端已經用許多不一樣的語言編寫,包括.Net、Java、Python、Ruby和JavaScript等。html

Logstash是一個具有實時處理能力的開源的數據收集引擎。能夠動態地從不一樣的來源收集數據,將數據處理(過濾、變形)過以後統一輸出到某個特定地址,爲未來更多樣化的數據分析作準備。java

若是你想閱讀更多,Elasticsearch 官方網站 多是最好的地方。node

注意:文章可能比較長,若是對Elasticsearch安裝以及瞭解的,能夠直接略過,看ASP.NET Core和Nlog部分,本文全部linux命令均在root用戶下操做linux

Java環境安裝

懶人一鍵安裝

yum install java*

查看JDK版本信息

java -version

Elasticsearch文檔

安裝

  官方網站有不少安裝方式,我這裏採用的rpm安裝,你們能夠按照本身習慣的方式進行安裝便可,下載地址git

//進入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)(目前單節點模式,其餘參數請參考官方文檔)github

 

啓動服務

//開啓端口9200
firewall-cmd --add-port=9200/tcp --permanent
//從新加載配置
firewall-cmd --reload

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

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

Kibana文檔

安裝

官方下載地址官方安裝教程centos

//進入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日誌收集系統

相關文章
相關標籤/搜索