欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-07 11:40:07
它是一个分布式日志解决方案,是Logstash、Elastaicsearch、Kibana的缩写,可用于从不同的服务中收集日志后进行处理和分析,通过Kibana可以全方面的展示收集后的信息,比如通过图表或者表格形式 ......

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

前言

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进行数据展示
懒人必备:.NetCore快速搭建ELK分布式日志中心
当然了logstash也有很多对应的插件beats用来收集不同的日志,在高并发的情况下你也可以通过使用redis或者kafka作为中间件进行过渡,就像下面的架构图一样
懒人必备:.NetCore快速搭建ELK分布式日志中心
在安装完成后我们用浏览器打开下面两个地址,这里会提示你输入用户名和密码:
user: elastic
password: changeme
这是默认的稍后和大家说下如何修改密码

  1. http://127.0.0.1:9200/ 打开可以看到es的一些版本信息等
    懒人必备:.NetCore快速搭建ELK分布式日志中心
  2. http://127.0.0.1:5601/ 打开后就是kibana的界面,如果es没有启动完成的话会提示你未找到es数据源
    懒人必备:.NetCore快速搭建ELK分布式日志中心
    好了,安装运行已经全部结束,是不是非常简单,比起网上那些长篇大论讲安装的,这里其实就两步:下载和运行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必须要先有数据后才能对数据进行展示,所以我们必须要有上面的测试数据,然后配置索引进行数据查看
登录进来后左边随机点一个菜单来到如下界面
懒人必备:.NetCore快速搭建ELK分布式日志中心
点击create index pattern来到如下界面,这里就是配置你要展现es中哪个索引下的内容,这里nci-bids-log-2019xxx这是logstash生成的,你们的可能叫logstash-2019xxxx,我的索引在配置中被我重命名了一下方便区分项目
懒人必备:.NetCore快速搭建ELK分布式日志中心
通过名称来进行模糊匹配,匹配规则貌似就是正则,匹配成功会提示如下信息,然后点击 next-step
懒人必备:.NetCore快速搭建ELK分布式日志中心
这里让你选择一个时间字段,就选择@timestamp然后下一步结束创建,然后点击左边第一个菜单就能看到图表和详细信息了
懒人必备:.NetCore快速搭建ELK分布式日志中心
其它的功能自己摸索吧

配置

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作为中间件的方式以及具体的一些配置内容

微信关注我哦!(转载注明出处)懒人必备:.NetCore快速搭建ELK分布式日志中心