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

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

 

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

前言

ELK是什么css

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

能用来作什么git

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

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

    安装前准备

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

    懒人安装

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

相关文章
相关标签/搜索