• Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统


    Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

    Elasticsearch 官方网站 

    Elasticsearch文档

    NLog.Targets.ElasticSearch   package

    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是一个具备实时处理能力的开源的数据收集引擎。可以动态地从不同的来源收集数据,将数据处理(过滤、变形)过之后统一输出到某个特定地址,为将来更多样化的数据分析做准备。

    安装

    Java环境安装

    懒人一键安装

    yum install java*

    查看JDK版本信息

    java -version

    Elasticsearch安装

    官方网站有很多安装方式,我这里采用的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

    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

    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中查看最终效果

    参考

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

  • 相关阅读:
    批量修改文件名
    查看数据库版本及当前登录用户是什么?
    安装mysql5.5时候的报错解决办法:
    mysql.sock的作用
    Linux系统编程15_C函数总结
    Linux系统编程14_信号和进程状态
    Linux系统编程13_CoreDump
    Linux系统编程12_标准库和POSIX标准头文件
    gcc使用
    http长链接短链接
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/8548541.html
Copyright © 2020-2023  润新知