• .NetCore快速搭建ELK分布式日志中心


    懒人必备:.NetCore快速搭建ELK分布式日志中心

     

    该篇内容由个人博客点击跳转同步更新!转载请注明出处!

    前言

    ELK是什么

    它是一个分布式日志解决方案,是Logstash、Elastaicsearch、Kibana的缩写,可用于从不同的服务中收集日志后进行处理和分析,通过Kibana可以全方面的展示收集后的信息,比如通过图表或者表格形式。

    能用来做什么

    (一)ELK组件在海量日志系统的运维中,可用于解决:

    • 分布式日志数据集中式查询和管理
    • 系统监控,包含系统硬件和应用各个组件的监控
    • 故障排查
    • 安全信息和事件管理
    • 报表功能
      (二)ELK组件在大数据运维系统中,主要可解决的问题如下:
    • 日志查询,问题排查,上线检查
    • 服务器监控,应用监控,错误报警,Bug管理
    • 性能分析,用户行为分析,安全漏洞分析,时间管理

      安装前准备

      我的系统环境是CentOS Linux release 7.6.1810 (Core)
    1. 安装GIT(用于下载下文提到的GITHUB项目,你也可以用curl,但项目更新比较快用GIT方便更新)
    2. 安装Docker(下面项目将部署到Docker中)
    3. 安装Docker-Compose(文章会用DC进行服务构建)
      好了,万事具备,只欠东风。

      懒人安装

      ELK的安装比较繁琐,网上的教程也基本都是一个个下载之后再进行安装和配置。逛了一圈gayhub找到了docker安装部署的懒人方式这是项目地址
      首先在你的根目录新建一个文件夹就叫elk,然后通过GIT命令下载项目到该目录下,进入到该目录下你可以看到这样的目录结构
    [root@localhost docker-elk]# ls
    docker-compose.yml  docker-stack.yml  elasticsearch  extensions  filebeat  kibana  LICENSE  logstash  README.md

    运行命令进行服务构建,记住一定要加个d,不然退出终端服务就停了,这个过程有点漫长,毕竟装的东西有点多

    [root@localhost docker-elk]# docker-compose up -d

    装完后他会默认打开以下这些端口
    5000: Logstash TCP input(Logstash数据的接收通道)
    9200: Elasticsearch HTTP(ES的http通道)
    9300: Elasticsearch TCP transport(ES的TCP通道)
    5601: Kibana(UI管理界面)
    这几个服务对应的关系如下图,应用程序将日志推送给Logstash,然后放到ES进行存储,最后通过Kibana进行数据展示
    服务关系
    当然了logstash也有很多对应的插件beats用来收集不同的日志,在高并发的情况下你也可以通过使用redis或者kafka作为中间件进行过渡,就像下面的架构图一样
    复杂一点
    在安装完成后我们用浏览器打开下面两个地址,这里会提示你输入用户名和密码:
    user: elastic
    password: changeme
    这是默认的稍后和大家说下如何修改密码

    1. http://127.0.0.1:9200/ 打开可以看到ES的一些版本信息等
      ES信息
    2. http://127.0.0.1:5601/ 打开后就是Kibana的界面,如果ES没有启动完成的话会提示你未找到ES数据源
      kibana界面
      好了,安装运行已经全部结束,是不是非常简单,比起网上那些长篇大论讲安装的,这里其实就两步:下载和运行dc文件

      .NetCore使用Nlog进行日志收集

      首先在你的项目中用Nuget安装以下两个类库
      NLog.Extensions.Logging和NLog.Web.AspNetCore
      然后新建NLog的配置文件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"
          internalLogLevel="Warn"
          internalLogFile="internal-nlog.txt">
    
      <extensions>
        <add  assembly="NLog.Web.AspNetCore"/>
      </extensions >
      <variable name="logDirectory" value="${basedir}logs"/>
      <!--define various log targets-->
      <targets>
        <!--write logs to file-->
        <!--address 填写Logstash数据的接收通道-->
        <target xsi:type="Network"
                name="elastic"
                keepConnection="false"
                address ="tcp://127.0.0.1:5000"
                layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
        />
        <target xsi:type="Null" name="blackhole" />
      </targets>
      <rules>
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />
        <!--Skip Microsoft logs and so log only own logs-->
        <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
        <logger name="*" minlevel="Trace" writeTo="elastic" />
      </rules>
    </nlog>

    然后在Startup>Configure中引入Nlog

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
           LogManager.LoadConfiguration("Nlog.config");//引入配置文件
           loggerFactory.AddNLog();//注入Nlog
    }

    接下来在自己项目是进行一个简单的测试

    Logger log = NLog.LogManager.GetCurrentClassLogger();
    log.Debug("测试日志内容");

    Kibana中配置对刚才的日志进行分析

    Kibana必须要先有数据后才能对数据进行展示,所以我们必须要有上面的测试数据,然后配置索引进行数据查看
    登录进来后左边随机点一个菜单来到如下界面
    界面
    点击Create index pattern来到如下界面,这里就是配置你要展现ES中哪个索引下的内容,这里nci-bids-log-2019xxx这是logstash生成的,你们的可能叫logstash-2019xxxx,我的索引在配置中被我重命名了一下方便区分项目
    配置索引
    通过名称来进行模糊匹配,匹配规则貌似就是正则,匹配成功会提示如下信息,然后点击 Next-Step
    匹配
    这里让你选择一个时间字段,就选择@timestamp然后下一步结束创建,然后点击左边第一个菜单就能看到图表和详细信息了
    日志信息
    其它的功能自己摸索吧

    配置

    ELK的配置文件都是以Volume的方式来挂载的,对应每个文件夹下面的Configs里面。
    比如logstash的配置文件cd logstash/config下面的logstash.yml就是他的配置文件。
    对了这里使用的版本需要密码是因为es使用了一个商业版,有效期是30天,如果不想使用这个的话可以去es的配置目录把xpack的配置改成如下就可以:

    xpack.license.self_generated.type: basic
    xpack.security.enabled: false
    xpack.monitoring.collection.enabled: false

    后面有空和大家再分享下通过kafka作为中间件的方式以及具体的一些配置内容

  • 相关阅读:
    刘若英和她的<<蝴蝶>>
    我的心情日记
    flash鼠标特效
    flash的播放器
    NoSQL数据存储引擎
    分享iphone开发的好网站,希望大家也能提供一些分享下
    创业经验总结
    产品经理之我见
    软件开发报价的计算方法
    Android实现号码归属地查询
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/11796634.html
Copyright © 2020-2023  润新知