0%

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 - 雨~桐 - 博客园

Excerpt

Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据。它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在 API 中。通过被索引的字段,可以用许多不同的聚合


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环境安装

懒人一键安装

查看JDK版本信息

Elasticsearch文档

安装

  官方网站有很多安装方式,我这里采用的rpm安装,大家可以按照自己习惯的方式进行安装即可,下载地址

1

2

3

4

5

6

7

8

9

10

cd /usr/local

mkdir elasticsearch

cd elasticsearch

wget https:

rpm -ivh elasticsearch-5.5.0.rpm 

配置

1

2

3

4

5

6

whereis elasticsearch

cd /etc/elasticsearch

vi elasticsearch.yml

主要配置Network.host(本机ip)和http.port(默认9200)(目前单节点模式,其他参数请参考官方文档)

 

启动服务

1

2

3

4

5

6

7

8

9

firewall-cmd --add-port=9200/tcp --permanent

firewall-cmd --reload

systemctl enable elasticsearch

systemctl start elasticsearch

 在浏览器打开http://192.168.30.128:9200,如下图所示表示启动成功了

Kibana文档

安装

官方下载地址官方安装教程

1

2

3

4

5

6

cd /usr/local/elasticsearch

wget https:

rmp -ivh kibana-5.5.0-x86_64.rpm

配置

1

2

3

4

cd /etc/kibana

vi kibana.yml

 设置端口号:5601,Host地址:”192.168.30.128” ,elasticsearch服务地址为:”http://192.168.30.128:9200

启动服务

1

2

3

4

5

6

7

8

9

firewall-cmd --add-port=5601/tcp --permanent

firewall-cmd --reload

systemctl enable kibana

systemctl start kibana

在浏览器打开http://192.168.30.128:5601,将进入到Kibana管理界面

LogStash文档

安装

官方下载地址 官方安装教程

1

2

3

4

5

6

cd /usr/local/elasticsearch

wget https:

rpm -ivh logstash-5.5.0.rpm

配置

1

2

3

4

5

6

cd /etc/logstash

cd conf.d

vi nlog.conf

 input:采用TCP监控本机8001端口的消息

 filter:使用grok 插件,自定义消息格式,推荐使用grokdebug在线进行调试

 output:使用elasticsearch作为数据存储

 注意:官方有非常丰富的插件进行消息处理,具体可以查看官方文档。

启动服务

1

2

3

4

5

6

7

8

9

firewall-cmd --add-port=8001/tcp --permanent

firewall-cmd --reload

systemctl enable 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根目录)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

<?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日志收集系统