ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理
本文将介绍使用NLOG、Elmah结合ElasticSearch实现分布式日志管理。
一、ElasticSearch简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,
能够达到实时搜索,稳定,可靠,快速,安装使用方便。 建立一个网站或应用程序,并要添加搜索功能,令我们受打击的
是:搜索工作是很难的。希望我们的搜索解决方案要快,希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们
要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。
ElasticSearch的Schema与其它DB比较:
ElasticSearch三方访问方式:
环境是CentOS6.4,安装方法有好几种,在这儿我们直接从官网下载包, 1.71版解压后,进入目录执行:
bin/elasticsearch
检查服务是否正常工作
curl -X GET http://localhost:9200/
elasticsearch默认是9200端口,返回一个JSON数据,有版本说明运行正常。
elasticsearch的伸缩性很高,如下示例数据分片:
安装前端elasticsearch-head
elasticsearch/bin/plugin –install mobz/elasticsearch-head
打开 http://localhost:9200/_plugin/head/,可以看如下UI,此处我们配置IP是192.168.0.103,它多语言版,已经自动识别为中文UI

在这儿我们还安装一个管理结点的前端 bigdesk, 安装方式类似,也是推荐插件模式:
$ ./bin/plugin -install lukas-vlcek/bigdesk/<bigdesk_version>
http://192.168.0.103:9200/_plugin/bigdesk/ 之后UI是这样的:
还有其他的前端项目,在这儿我们不一 一 描述,其目的为了更好的管理ElasticSearch集群。
二、ElasticSearch与Asp.net应用程序集成
好了,我们在Asp.net项目中已经安装Elmah,现在我们安装 Elmah.Elasticsearch,这里是1.1.0.27
PM> Install-Package Elmah.Elasticsearch
在web.config中配置节,我们配置index名称:elmahCurrent
<elmah>
<!--
See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for
more information on remote access and securing ELMAH.
--><security allowRemoteAccess="true" />
<errorLog type="Elmah.Io.ElasticSearch.ElasticSearchErrorLog, Elmah.Io.ElasticSearch" connectionStringName="ElmahIoElasticSearch" defaultIndex="elmahCurrent" />
</elmah>
连接字符串增加
<connectionStrings>
<add name="ElmahIoElasticSearch" connectionString="http://192.168.0.103:9200/" />
</connectionStrings>
让我们来访问一个不存在http://localhost:1960/KK webpage 故意引发异常,然后我们到前端head里可以看到:

完整记录JSON数据,当然也可以使用查询方式。
接下来,让我们来配置NLOG的日志也输出到ElasticSearch,先安装包 NLog.Targets.ElasticSearch 1.0.14
PM> Install-Package NLog.Targets.ElasticSearch
对应的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">
<extensions>
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets async="true">
<target name="elastic" xsi:type="ElasticSearch" uri="http://192.168.0.103:9200/" index="DevLogging" documentType="logevent">
</target>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${logger} ${uppercase:${level}} ${message} ${exception:format=ToString,StackTrace,method:maxInnerExceptionLevel=5:innerFormat=ToString}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="f" />
<logger name="*" minlevel="Trace" writeTo="elastic" />
</rules>
</nlog>
这样我们可以把非异常的日志自由输出到ElasticSearch中,例如我们记录webapi请求的日志:

devlogging是我们在配置文件已配置过的index名称。 我们同时使用NLOG记录了文件日志。
搜索:

基于REST方式请求按ID查询:
http://localhost:9200/<index>/<type>/<id>.
如:
http://192.168.0.103:9200/devlogging/logevent/AU9a4zu6oaP7IVhrhcmO
还有一些搜索示例如下:
//索引
$ curl -XPUT http://localhost:9200/twitter/tweet/2 -d '{
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "You know, for Search"
}' //lucene语法方式的查询
$ curl -XGET http://localhost:9200/twitter/tweet/_search?q=user:kimchy //query DSL方式查询
$ curl -XGET http://localhost:9200/twitter/tweet/_search -d '{
"query" : {
"term" : { "user": "kimchy" }
}
}' //query DSL方式查询
$ curl -XGET http://localhost:9200/twitter/_search?pretty=true -d '{
"query" : {
"range" : {
"post_date" : {
"from" : "2009-11-15T13:00:00",
"to" : "2009-11-15T14:30:00"
}
}
}
}'
我们可以配置多个应用程序的日志统一输出到ES中,以便于我们查询与分析。
今天先这儿,希望对您有软件开发帮助。
来资料收集与整合,希望对您软件开发与企业信息化有帮助。 其它您可能感兴趣的文章:
N-Tier Entity Framework开源项目介绍
IT基础架构规划方案二(计算机系统与机房规划规划)
IT基础架构规划方案三(IT基础软件和系统规划)
如有想了解更多软件研发 , 系统 IT集成 , 企业信息化 等资讯,请关注我的微信订阅号:

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理的更多相关文章
- ELK(ElasticSearch, Logstash, Kibana) v5.3.2 分布式日志收集分析最佳解决方案 基于CentOS 7 ( 一 )
[root@localhost temp]# .tar.gz -C /usr/local/ [root@localhost temp]# vim logstatsh_test.conf ======= ...
- springboot集成elk实现分布式日志管理
1.安装elk https://www.cnblogs.com/xuaa/p/10769759.html 2.idea创建springboot项目 File -> New -> Proje ...
- Java 日志管理最佳实践
转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...
- Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据.它使用 Java 编写,基于 Apac ...
- ELK分布式日志+NLog在.NetCore中的应用
一.ELK简介 ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台 Elasticsearch ...
- ELK +Nlog 分布式日志系统的搭建 For Windows
前言 我们为啥需要全文搜索 首先,我们来列举一下关系型数据库中的几种模糊查询 MySql : 一般情况下LIKE 模糊查询 SELECT * FROM `LhzxUsers` WHERE UserN ...
- ASP.NET Core分布式日志系统ELK实战演练
一.ELK简介 ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. • Elastics ...
- ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...
- ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
一.前言 1.ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进 ...
随机推荐
- xamarin UWP证书问题汇总
打算开发一个软件使用rsa加密的东西,所以有用到数字证书这块,最近遇到些问题, 问题一:使用如下代码添加数字证书后,在证书管理器的当前用户和本地计算机下都找不到这张证书. using (X509Sto ...
- Atitit事件代理机制原理 基于css class的事件代理
Atitit事件代理机制原理 基于css class的事件代理 1.1. 在javasript中delegate这个词经常出现,看字面的意思,代理.委托1 1.2. 事件代理1 1.3. 代理标准化规 ...
- SQL Server 数据库子查询基本语法
一.SQL子查询语句 1.单行子查询 select ename,deptno,sal from emp where deptno=(select deptno ...
- 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?
今天群里有人聊图片上传,简单说下自己的经验(大牛勿喷) 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那 ...
- Sql Server系列:索引设计原则及优化
1. 索引设计原则 索引设计不合理或缺少索引都会对数据库的性能造成障碍,高效的索引对于获得良好的性能非常重要. 设计索引时的一些原则: ◊ 索引并不是越多越好,一个表中如果有大量的索引,不仅占用大量的 ...
- SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- 门外汉的IT
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机很早就走入了我的生活.小学时,家里放一台联想“天琴”的电脑.它霸气的音箱造型 ...
- Visual Studio常用小技巧一:代码段+快捷键+插件=效率
用了visual studio 5年多,也该给自己做下备忘录了.每次进新的组换新的电脑,安装自己熟悉的环境又得重新配置,不做些备忘老会忘记一些东西.工具用的好,效率自然翻倍. 1,代码段 在Visua ...
- EntityFramework 如何进行异步化(关键词:async·await·SaveChangesAsync·ToListAsync)
应用程序为什么要异步化?关于这个原因就不多说了,至于现有项目中代码异步化改进,可以参考:实际案例:在现有代码中通过async/await实现并行 这篇博文内容针对的是,EntityFramework ...
- 如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程
使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: ...



