Asp.NetCore+Elasticsearch+Kibana日誌記錄

以前看留言一篇關於Elasticsearch搜索引擎的文章,今天試着用Elasticsearch寫了一下日誌統計的Demo,下面就記錄一下 Asp.NetCore+Elasticsearch+Kibana日誌記錄 的使用過程html

1、安裝Elasticsearch

一、下載 Elasticsearch  https://www.elastic.co/cn/downloads/elasticsearch java

二、 解壓文件 找到 bin 目錄下 elasticsearch.bat 文件 雙擊運行ios

三、 你會在控制檯看到git

訪問 http://127.0.0.1:9200/ 你會看到以下返回格式,說明 elasticsearch 安裝成功github

{
  "name" : "PC-20150622CPXX",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "EvGRrqQiRSuJVe4tsc4NSw",
  "version" : {
    "number" : "7.3.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "de777fa",
    "build_date" : "2019-07-24T18:30:11.767338Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 

2、建立項目

3、添加Nuget包

Install-Package NLog.Web.AspNetCore
Install-Package NLog
Install-package NLog.Targets.ElasticSearch

4、編寫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"
      internalLogToConsole="true">
  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions><targets>
    <target name="ElasticSearch" xsi:type="ElasticSearch" 
            ConnectionStringName="http://localhost:9200" 
            index="Jon.NLog-${date:format=yyyy.MM.dd}" 
            documentType="doc" 
            includeAllProperties="true" 
            layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
      <field name="MachineName" layout="${machinename}" />
      <field name="Time" layout="${longdate}" />
      <field name="level" layout="${level:uppercase=true}" />
      <field name="logger" layout=" ${logger}" />
      <field name="message" layout=" ${message}" />
      <field name="exception" layout=" ${exception:format=toString}" />
      <field name="processid" layout=" ${processid}" />
      <field name="threadname" layout=" ${threadname}" />
      <field name="stacktrace" layout=" ${stacktrace}" />
      <field name="Properties" layout="
             ${machinename} 
             ${longdate} 
             ${level:uppercase=true} 
             ${logger} 
             ${message} 
             ${exception}|${processid}|${stacktrace}|${threadname}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
  </rules>
</nlog>

配置文件說明:

ConnectionStringName:鏈接字符串docker

Index:ES索引json

documentType:ES類型windows

layout:佈局api

layout可配置變量以下:緩存

 

$ {activityid} - 將一個System.Diagnostics跟蹤關聯ID放入日誌中。
$ {all-event-properties} - 記錄全部事件上下文數據。
$ {appdomain} - 當前的應用程序域。
$ {assembly-version} - 默認應用程序域中可執行文件的版本。
$ {basedir} - 當前應用程序域的基本目錄。
$ {callsite} - 呼叫站點(類名稱,方法名稱和源信息)。
$ {callsite-linenumber} - 呼叫站點源行號。
$ {counter} - 一個計數器值(每一個佈局渲染都會增長)。
$ {currentdir} - 應用程序的當前工做目錄。
$ {date} - 當前日期和時間。
$ {document-uri} - 託管當前Silverlight應用程序的HTML頁面的URI。
$ {environment} - 環境變量。
$ {event-properties} - 記錄事件屬性數據 - 重命名$ {event-context}。
$ {exception} - 經過調用其中一個Logger * Exception()方法提供的異常信息。
$ {file-contents} - 渲染指定文件的內容。
$ {gc} - 關於垃圾收集器的信息。
$ {gdc} - 全局診斷上下文項目。字典結構來保存每一個應用程序實例值。
$ {guid} - 全局惟一標識符(GUID)。
$ {identity} - 線程標識信息(名稱和認證信息)。
$ {install-context} - 安裝參數(傳遞給InstallNLogConfig)。
$ {level} - 日誌級別。
$ {literal} - 一個字符串文字。
$ {log4jxmlevent} - 與log4j,Chainsaw和NLogViewer兼容的XML事件描述。
$ {logger} - 記錄器名稱。
$ {longdate} - 日期和時間格式很長,可排序yyyy-MM-dd HH:mm:ss.ffff。
$ {machinename} - 進程正在運行的機器名稱。
$ {mdc} - 映射的診斷上下文 - 一個線程局部結構。
$ {mdlc} - 異步映射的診斷上下文 - 一個線程局部結構。
$ {message} - 格式化的日誌消息。
$ {ndc} - 嵌套的診斷上下文 - 一個線程局部結構。
$ {ndlc} - 異步嵌套診斷上下文 - 一個線程局部結構。
$ {newline} - 換行符。
$ {nlogdir} - NLog.dll所在的目錄。
$ {performancecounter} - 性能計數器。
$ {processid} - 當前進程的標識符。
$ {processinfo} - 關於正在運行的進程的信息。
$ {processname} - 當前進程的名稱。
$ {processtime} - 格式爲HH:mm:ss.mmm的處理時間。
$ {qpc} - 高精度計時器,基於從QueryPerformanceCounter()返回的值(可選地轉換爲秒)。
$ {registry} - 來自注冊表的值。
$ {sequenceid} - 日誌序列標識
$ {shortdate} - 可排序格式的短日期yyyy-MM-dd。
$ {sl-appinfo} - 有關Silverlight應用程序的信息。
$ {specialfolder} - 系統特殊文件夾路徑(包括個人文檔,個人音樂,程序文件,桌面等)。
$ {stacktrace} - 堆棧跟蹤渲染器。
$ {tempdir} - 一個臨時目錄。
$ {threadid} - 當前線程的標識符。
$ {threadname} - 當前線程的名稱。
$ {ticks} - 當前日期和時間的Ticks值。
$ {time} - 以24小時可排序格式HH:mm:ss.mmm的時間。
$ {var} - 渲染變量(4.1中新增)
$ {windows-identity} - 線程Windows身份信息(用戶名)。
包裝
$ {cached}
- 將緩存應用於另外一個佈局輸出。 $ {filesystem-normalize} - 經過用安全字符替換文件名中不容許的字符。 $ {json-encode} - 使用JSON規則轉義另外一個佈局的輸出。 $ {lowercase} - 將另外一個佈局輸出的結果轉換爲小寫。 $ {onexception} - 僅在爲日誌消息定義異常時才輸出內部佈局。 $ {pad} - 將填充應用於另外一個佈局輸出。 $ {replace} - 用另外一個字符串替換另外一個佈局輸出中的字符串。 $ {replace-newlines} - 用另外一個字符串替換換行符。 $ {rot13} - 用ROT-13解碼「encrypted」文本。 $ {trim-whitespace} - 修剪另外一個佈局渲染器的結果中的空白。 $ {uppercase} - 將另外一個佈局輸出的結果轉換爲大寫。 $ {url-encode} - 編碼另外一個佈局輸出的結果以用於URL。 $ {when} - 只有在知足指定條件時才輸出內部佈局。 $ {whenEmpty} - 當內部佈局產生空結果時輸出替代佈局。 $ {WrapLine} - 在指定的行長度處包裝另外一個佈局輸出的結果。 $ {xml-encode} - 將另外一個佈局輸出的結果轉換爲XML兼容。
NLog.Extended軟件包
$ {appsetting}
- 應用程序配置設置。
NLog.Web包
$ {aspnet
-MVC-Action} - ASP.NET MVC動做名稱 $ {aspnet-MVC-Controller} - ASP.NET MVC控制器名稱 $ {aspnet-Application} - ASP.NET應用程序變量。 $ {aspnet-Item} - ASP.NET HttpContext項目變量。 $ {aspnet-TraceIdentifier} - ASP.NET跟蹤標識符 $ {aspnet-Request} - ASP.NET請求變量。 $ {aspnet-Request-Cookie} - ASP.NET請求cookie內容。 $ {aspnet-Request-Host} - ASP.NET請求主機。 $ {aspnet-Request-Method} - ASP.NET請求方法(GET,POST等)。 $ {aspnet-Request-IP} - 客戶端IP。 $ {aspnet-Request-QueryString} - ASP.NET請求查詢字符串。 $ {aspnet-Request-Referrer} - ASP.NET請求引用者。 $ {aspnet-Request-UserAgent} - ASP.NET請求useragent。 $ {aspnet-Request-Url} - ASP.NET請求URL。 $ {aspnet-Session} - ASP.NET Session變量。 $ {aspnet-SessionId} - ASP.NET會話ID變量。 $ {aspnet-User-isAuthenticated} - ASP.NET用戶身份驗證? $ {aspnet-User-AuthType} - ASP.NET用戶身份驗證。 $ {aspnet-User-Identity} - ASP.NET用戶變量。 $ {iis-site-name} - IIS站點名稱。

5、配置後臺Nlog

Program

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseNLog()
                .UseStartup<Startup>();
    }

Startup

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory log)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            
            log.AddNLog(); env.ConfigureNLog("NLog.config");//配置NLog文件

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

到這裏,後臺日誌基本配置完成,下面須要使用 Kibana 來查看日誌是否記錄

6、安裝Kibana

下面是Kibana的幾種安裝方式,參考 https://www.elastic.co/guide/en/kibana/current/install.html

我用的是在windows上安裝Kibana

1、下載安裝包

https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-windows-x86_64.zip

下載下來後解壓安裝包 進入bin目錄下 找到 kibana.bat  雙擊運行該文件

 

你看到該控制檯說明kibana運行成功

接下來你就能夠訪問 http://localhost:5601 你看到下面這個界面說明kibana已經正式運行了

接下來就該運行剛纔咱們寫的Demo , 運行成功以後你再來到這個界面 按一下步驟操做

而後出現下面這界面,裏面有一條數據就是咱們剛纔運行的Demo所生成的日誌

 

 

 到這裏整個demo就結束了

 

Elasticsearch 相關資料

 Elasticsearch官網下載 https://www.elastic.co/cn/downloads/

 Elasticsearch官網資料 https://www.elastic.co/guide/en/elasticsearch/client/net-api/7.x/elasticsearch-net-getting-started.html

 Kibana官網配置 https://www.elastic.co/guide/en/kibana/current/settings.html

 Elasticsearch權威指南(中文版) https://es.xiaoleilu.com/010_Intro/15_API.html

https://hub.docker.com/_/kibana

 

 github相關資料

https://github.com/elastic/elasticsearch

https://github.com/elastic/elasticsearch-net

https://github.com/liuzhenyulive/Elasticsearch.Net-Demo/tree/master/Elasticsearch

 

 他人博客

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

http://www.javashuo.com/article/p-ghmhvfia-cn.html

https://blog.csdn.net/qq_38762313/article/details/90290284

http://www.javashuo.com/article/p-xrykucyk-ky.html

相關文章
相關標籤/搜索