ELK安装好后,我们现在.net Core中使用一下,大体思路就是结合NLog日志组件将数据写入ELK中,其它语言同理。

ELK的安装还是有些复杂的,我们也可以在Docker中安装ELK:docker run -it --rm -p 9200:9200 -p 5601:5601 --name esk nshou/elasticsearch-kibana

这条命令执行完成后,我们就在本地运行了elasticsearch和Kibana,没有错误的话我们就可以通过localhost:5601直接访问Kibana界面了:

这里我们可以看到在一个容器里运行了多个程序,这样节省了资源,同样增加了管理的复杂性,不建议在生产环境中这样使用。

同样我们也可以通过localhost:9200访问elasticsearch,返回如下数据:

有了elasticsearch和kibana我们还需要logstash,我这里以阿里云上安装的logstash为例,首先进到目录下,我们需要新增一个nlog.conf配置文件:

内容如下:

这里使用最简单的配置(其实是复杂的配置我一时还没看懂。。。),这里我们指定监听端口8001,同时指定数据输出到elasticsearch中,下面是它的IP和端口。

添加完配置文件后在logstash文件夹下通过:bin/logstash -f nlog.conf 运行当前配置。

elasticsearch和kibana正常运行就可以,这样我么的ELK就算都运行起来了。

新建一个.net core API项目,通过Nuget安装Nlog依赖包:

在Startup.cs添加Nlog服务

我们这里用到了一个配置文件nlog.conf,配置如下:

<?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>
<!--enable NLog.Web for ASP.NET Core-->
<add assembly="NLog.Web.AspNetCore"/>
</extensions> <!-- define various log targets -->
<!--定义日志文件目录-->
<variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
<variable name="nodeName" value="node1"/> <targets async="true">
<!-- 全部日志target -->
<target xsi:type="File"
name="allfile"
fileName="${logDirectory}/nlog-all/${shortdate}.log"
layout="#node1#${longdate}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
keepFileOpen="false"
/> <!-- 本地文件日志target -->
<target xsi:type="File"
name="ownLog-file"
fileName="${logDirectory}/nlog-${level}/${shortdate}.log"
layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
keepFileOpen="false"
/> <!-- Tcp日志target -->
<target xsi:type="Network"
name="ownLog-tcp"
keepConnection="false"
address ="tcp://47.99.92.76:8001"
layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
/>
<!--grok 规则-->
<!--%#{DATA:request_time}#%{DATA:node_name}#%{DATA:class_name}#%{DATA:log_level}#%{DATA:call_site}#%{DATA:line_number}#%{DATA:request_url}#%{DATA:request_method}#%{DATA:container_name}#%{DATA:action_name}#%{DATA:log_info}#%{DATA:exception_msg}#-->
<!--空白-->
<target xsi:type="Null" name="blackhole" />
</targets> <!--日志级别 Trace -》Debug-》 Info -》Warn-》 Error-》 Fatal-->
<!--日志规则-->
<rules>
<!--全部日志, 包括Microsoft日志-->
<logger name="*" minlevel="Trace" writeTo="allfile" /> <!--自定义日志,排除Microsoft日志-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Debug" writeTo="ownLog-file" />
<logger name="*" minlevel="Info" writeTo="ownLog-tcp" />
</rules>
</nlog>

注意点是下面这里我们需要指定logstash的地址和端口:

然后我们在默认的ValueController中使用如下:

public class ValuesController : Controller
{
private readonly ILogger _logger=LogManager.GetCurrentClassLogger(); // GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
_logger.Info("这是一条测试日志信息");
_logger.Warn("这是一条测试日志信息Warn");
_logger.Error("这是一条测试日志信息Error");
return new string[] { "value1", "value2" };
}
}

如何不出问题的话,F5之后数据已经被写入ELK,如图:

这里只是简单的展示如何在程序里集成ELK,公司里并不是用的NLog日志组件,是架构组封装的日志组件,当然,方法原理都是一样的,通过logstash将日志数据输出到elasticsearch,通过kibana展示。

参考文章:

https://blog.csdn.net/quryktcs/article/details/71331718

https://www.cnblogs.com/piscesLoveCc/p/7230426.html

ELK系列(二):.net core中使用ELK的更多相关文章

  1. elk系列教程:docker中安装配置elk

    elasticSearch Docker安装elasticsearch: docker pull docker.io/elasticsearch:7.2.0 启动: docker run -p 920 ...

  2. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  3. ELK系列四:Logstash的在ELK架构中的使用和简单的输入

    1.ELK架构中Logstash的位置: 1.1.小规模集群部署(学习者适用的架构) 简单的只有Logstash.Elasticsearch.Kibana,由Logstash收集日志或者流量信息,过滤 ...

  4. ELK系列二:Elasticsearch的架构原理和配置优化

    1.Elasticsearch的数据组织架构 1.1.Elasticsearch结构概念 集群(cluster):拥有相同cluster-name的elasticsearch结点的集合(每个结点其实就 ...

  5. ABP架构学习系列二:ABP中配置的注册和初始化

    一.手工搭建平台 1.创建项目 创建MVC5项目,手动引入Abp.Abp.Web.Abp.Web.Mvc.Abp.Web.Api 使用nuget添加Newtonsoft.Json.Castle.Cor ...

  6. Postman系列二:Postman中get接口实战讲解(接口测试介绍,接口测试流程,头域操作)

    一:接口测试介绍 接口测试:就是针对软件对外提供服务的接口输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能和接口描述文档的一致性. 接口测试好处:接口测试通常能对系统测试的更为彻底,更高的保障 ...

  7. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. ELK系列七:Elasticsearch的集群配置和监控以及在部署ELK中踩的坑

    1.基本下载安装 #按照ELK系列一博客安装启动即可,没有大坑,注意一下权限即可 chmod -R 777 ./elasticsearch #此外没有java的,注意安装下JDK,我这次部署的环境是C ...

  9. 探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs

    原文:探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs 前言:.NET Core 3.0 SDK包含比以前版本更多的现成模板. 在本文中,我将 ...

随机推荐

  1. c++学习笔记_4

    前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用,且本笔记建立在会使用c和java的基础上,只针对与c和java的不同来写 运算符重 ...

  2. HTML(七)CSS

    一个实例 <!DOCTYPE html> 菜鸟教程(runoob.com) body { background-color:#d0e4fe; } h1 { color:orange; te ...

  3. CodeForces 1107 - G Vasya and Maximum Profit 线段树

    题目传送门 题解: 枚举 r 的位置. 线段树每个叶子节点存的是对应的位置到当前位置的价值. 每次往右边移动一个r的话,那么改变的信息有2个信息: 1. sum(a-ci) 2.gap(l, r) 对 ...

  4. 模板汇总——Tarjian

    1. 单向边  + 新图建边 int belong[N], dfn[N], low[N], now_time, scc_cnt; stack<int> s; void dfs(int u) ...

  5. lightoj 1119 - Pimp My Ride(状压dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1119 题解:状压dp存一下车有没有被搞过的状态就行. #include < ...

  6. 美团2018年CodeM大赛-资格赛 分数 暴力模拟

    链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...

  7. 题解 CF499A 【Watching a movie】

    题意 看一部电影,从第一分钟开始看,你每次可以按下快进键,快进x分钟,电影有n个精彩片段,问看到所有精彩片段至少需要看多少分钟电影.(数据保证能看到所有精彩片段) 我们可以发现答案其实 就是间隔时间% ...

  8. 分布式Id - redis方式

    本篇分享内容是关于生成分布式Id的其中之一方案,除了redis方案之外还有如:数据库,雪花算法,mogodb(object_id也是数据库)等方案,对于redis来说是我们常用并接触比较多的,因此主要 ...

  9. JS数组方法整理(附使用示例)

    整理目前所用过的数组方法,学习了新增的es6方法. 1.arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2, is 8.3,4,5] console.lo ...

  10. Linux入门基础之 中

    五.Linux 下获取帮助 没必要记住所有东西 Linux 提供了极为详细的帮助工具及文档,一定要养成查帮助文档的习惯,可以大大减少需要记忆的东西并且提高效率 5.1.HELP 几乎所有命令都可以使用 ...