asp.net core结合NLog搭建ELK实时日志分析平台

2023-11-06 15:08

本文主要是介绍asp.net core结合NLog搭建ELK实时日志分析平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、介绍ELK


 

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

承接上一篇文章的内容asp.net core添加全局异常处理及log4net、Nlog应用准备部署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、环境说明

软件版本
CentOS7.4
Dockerce-18.06
Elasticsearch5.5.0
Logstash5.5.0
Kibana5.5.0
VS20172017

 

介绍一下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)(目前单节点模式,其他参数请参考官方文档)

 640?wx_fmt=png

 

启动服务

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


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

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


//启动服务
systemctl start elasticsearch

 

在浏览器打开http://192.168.161.191:9200/,如下图所示表示启动成功了

640?wx_fmt=png

 

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"

640?wx_fmt=png

 

启动服务

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


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

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


//启动服务
systemctl start kibana

 

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

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

直接在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= "Log\LogAll\${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= "Log\LogError\${shortdate}.htm"
             layout= "<HR COLOR=red>【异常时间】:${date} <BR>【异常级别】:${level:uppercase=true} <BR>${message}<HR Size=1>"  />
     <!-- 输出到文件,这个文件记录操作日志 -->
     <target xsi:type= "File"  name= "logInfo"  fileName= "Log\LogInfo\${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索引一样,因为是要根据索引名称来查找数据的。

 640?wx_fmt=png

 

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

640?wx_fmt=png

 

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

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

原文地址:https://www.cnblogs.com/guolianyu/p/9600659.html


 

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

这篇关于asp.net core结合NLog搭建ELK实时日志分析平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/357358

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb