zoukankan      html  css  js  c++  java
  • asp.net core结合NLog搭建ELK实时日志分析平台 (转发)

    https://developer.aliyun.com/article/686284

    简介: 0、整体架构   整体架构目录:ASP.NET Core分布式项目实战-目录 一、介绍ELK   1、说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp.net core 的数据。

    0、整体架构


    整体架构目录:ASP.NET Core分布式项目实战-目录

    一、介绍ELK


    1、说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试

    承接上一篇文章的内容准备部署ELK来展示asp.net core 的数据。目前此篇文章只用到单台服务器,等下一篇将会介绍如何做到集群部署ELK+filebeat+MQ,因为这个集群部署才是真正体现大项目的价值。当然如果是小项目或者是内部项目单台足以。

    当然ELK只是在业界用的比较多,但是里面所用的工具是可以替换的,比如说 如下:

    体现价值的解决方案就是:es+kibana+filebeat/logstash+MQ(RabbitMQ/Kfaka) 来实现日志记录等。

    多介绍一下吧:

    Beats包含四种工具:

      Packetbeat(搜集网络流量数据)
      Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
      Filebeat(搜集文件数据)
      Winlogbeat(搜集 Windows 事件日志数据)
      它是一个轻量级的日志收集处理工具(Agent)

    自此,解决方案很多,关键在于不同的项目用不同的解决方案,关键看大家的选择啦。当然如果大家有兴趣可以加一下QQ群,可以互相探讨技术。

    如果大家对NLog不会部署,请看上一篇文章:asp.net core添加全局异常处理及log4net、Nlog应用

    好了接下来就要开始部署啦,请准备你们的服务器和VS吧。

    2、环境说明

    软件 版本
    CentOS 7.4
    Docker ce-18.06
    Elasticsearch 5.5.0
    Logstash 5.5.0
    Kibana 5.5.0
    VS2017 2017

    介绍一下ELK实时日志分析平台。

    Elasticsearch:是个开源分布式搜索引擎,提供收集、分析、存储数据三大功能,它的特点:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源、自动搜索负载等。

    Logstash:主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

    Kibana:Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

    二、部署ELK


    目前由于我在公司部署的ELK,在使用docker下载官方的ELK镜像时,无法下载。因此我在家里的时候就把ELK所需要的镜像下载好后放在阿里云的镜像仓库中,然后在公司的电脑里面直接下载,速度比较快。

    如果有碰到以上下载镜像问题的同学,可以尝试我这中办法。

    0、前提需要安装JAVA环境

    命令:
    wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm

    如果发现 下载地址失效请登录:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 这个链接找寻下载地址

    安装JDK8:
    rpm -ivh jdk-8u181-linux-x64.rpm

    检查 JDK是否安装成功:
    java -version

    1、部署Elasticsearch

    安装
    官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
    官方网站有很多安装方式,这里采用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.161.191:9200/,如下图所示表示启动成功了

    2、部署kibana

    官网文档:https://www.elastic.co/guide/en/kibana/current/index.html

    安装

    //进入elasticsearch目录
    cd /usr/local/elasticsearch


    //下载Kibana rpm 64位包
    wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm


    //安装Kibana
    rpm -ivh kibana-5.5.0-x86_64.rpm

    配置

    //进入安装目录
    cd /etc/kibana


    //编辑配置文件
    vi kibana.yml

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

    启动服务

    //开启端口5601
    firewall-cmd --add-port=5601/tcp --permanent


    //重新加载配置
    firewall-cmd --reload

    //设置服务开机启动
    systemctl enable kibana


    //启动服务
    systemctl start kibana

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

    3、部署logstash

    官方文档:https://www.elastic.co/guide/en/logstash/current/index.html

    安装

    //进入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

    直接在logstash.conf配置即可。

    input{
            tcp{
                    host=>"192.168.161.191"
                    port=>8001
            }
    }
    filter{
            grok{
                    match=>{
                            "message"=>"#%{DATA:request_time}#%{DATA:log_level}#%{DATA:log_info}#"
                    }
            }
    }
    output{
            elasticsearch{
                    hosts=>["192.168.161.191:9200"]
                    index=>"default"
                    document_type=>"logs"
            }
    }
    

      


    input:采用TCP监控本机8001端口的消息
    filter:使用grok 插件,自定义消息格式,推荐使用grokdebug在线进行调试
    output:使用elasticsearch作为数据存储

    5、重启修改配置后的logstash

    如果是上面的第二种方式,采用tcp端口,则重启需要配置 8001端口
    即: -p 8001:8001

    docker run -d --restart always -p 8001:8001 --name logstash -v /home/logstashdata/config:/usr/share/logstash/config -v /home/logstashdata/pipeline:/usr/share/logstash/pipeline logstash:6.3.0

    启动服务

    //开启端口8001
    firewall-cmd --add-port=8001/tcp --permanent


    //重载配置
    firewall-cmd --reload

    //设置开机启动
    systemctl enable logstash


    //启动logstash
    systemctl start logstash

    三、asp.net core 结合NLog


    1、在项目中的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"
          autoReload="true">
    
    
      <!-- the targets to write to -->
      <targets>
        <!-- 输出到文件,这个文件记录所有的日志 -->
        <target xsi:type="File" name="allfile" fileName="LogLogAll${shortdate}.htm"
                     layout="<HR COLOR=red>${longdate}<BR>${logger}<BR>${uppercase:${level}}<BR>${message} ${exception}<HR Size=1>" />
        <!-- 输出到文件,这个文件记录错误日志 -->
        <target xsi:type="File" name="logError" fileName="LogLogError${shortdate}.htm"
                layout="<HR COLOR=red>【异常时间】:${date} <BR>【异常级别】:${level:uppercase=true} <BR>${message}<HR Size=1>" />
    
        <!-- 输出到文件,这个文件记录操作日志 -->
        <target xsi:type="File" name="logInfo" fileName="LogLogInfo${shortdate}.htm"
                     layout="<HR COLOR=red>【操作时间】:${date} <BR>【操作级别】:${level:uppercase=true} <BR>${message}<HR Size=1>"  />
    
        <target xsi:type="Network" name="ownLog-tcp-Info" keepConnection="false" address ="tcp://192.168.161.191:8001"
                     layout="#【操作时间】:${date} #【操作级别】:${level:uppercase=true} #${message}#"/>
    
        <target xsi:type="Network" name="ownLog-tcp-Error" keepConnection="false" address ="tcp://192.168.161.191:8001"
                     layout="#【异常时间】:${date} #【异常级别】:${level:uppercase=true} #${message}#"/>
    
      </targets>
      <!-- rules to map from logger name to target -->
      <rules>
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />
        <logger name="*" minlevel="Error" writeTo="logError" />
        <logger name="*" minlevel="Info" writeTo="logInfo" />
        <logger name="*" minlevel="Info" writeTo="ownLog-tcp-Info" />
        <logger name="*" minlevel="Error" writeTo="ownLog-tcp-Error" />
        <!--Skip non-critical Microsoft logs and so log only own logs-->
        <logger name="Microsoft.*" maxLevel="Trace" final="true" />
        <!--<logger name="DotNetCore.CAP.*" maxLevel="Info" final="true" />
        <logger name="IdentityServer4.*" maxLevel="Info" final="true" />-->
    
      </rules>
    </nlog>
    

      

    配置结束,运行项目。

    打开kibana,添加一下索引,当然这个索引名称需要和上面在logstash中的es索引一样,因为是要根据索引名称来查找数据的。

     

     添加索引完后,就可以查看数据啦。

    等下一篇部署在Docker上。拭目以待吧。

     参考文档:https://www.cnblogs.com/piscesLoveCc/p/7230426.html

     
  • 相关阅读:
    一些小姿势
    <学习笔记>《具体数学》
    【react】报错Need at least a key or a value or a label (only for OptGroup) for [object Object]
    Calibration Checkerboard Collection
    华为云如何建表并创建作业定时调度抽取数据
    HIVE SQL教程
    postgresql 教程
    PC机启用了fiddler代理,在手机或其它机器上连接该代理,无法抓包
    Unity3d的Scroll View组件不能滑动到底的解决方式
    Unity3d让GridLayoutGroup按照子物体的数量自动调整宽高
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/12916791.html
Copyright © 2011-2022 走看看