ExceptionLess的安装、配置、使用教程
前言
Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技术开发的应用程序中,并且提供了REST接口可以应用在 Javascript,Node.js 中。(基本就是.Net技术栈的一套东西)
项目地址:https://github.com/exceptionless/Exceptionless
它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置,对于微服务架构的应用程序来说,统一的日志收集系统的建立更是有必要。
要使用的话只需要在其官网上注册个账号,然后在代码中配置一下APIKey就可以了,不过免费版额度有限,当然还是自己部署一套比较好,这次依然使用docker部署
安装
docker部署可以在GitHub下载代码自己构建,也可以用官方打包好的镜像,为了方便这里我直接使用官方打包的镜像
docker-compose.yml
内容如下
可以看到其中包含5个容器:ExceptionLess App、ExceptionLess Job、elasticsearch、kibana、Redis
version: '3.7' services: app: depends_on: - elasticsearch - redis image: exceptionless/app:latest environment: EX_AppMode: Production EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 EX_ConnectionStrings__MessageBus: provider=redis #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd; EX_ConnectionStrings__Queue: provider=redis EX_ConnectionStrings__Redis: server=redis,abortConnect=false EX_ConnectionStrings__Storage: provider=folder;path=/app/storage # 官方配置默认包含HTTPS,我把它关了 #ASPNETCORE_URLS: http://+;https://+ ASPNETCORE_URLS: http://+ # 关了HTTPS,这个端口也不用配置了 #ASPNETCORE_HTTPS_PORT: 5001 # 关了HTTPS,证书也不用配置 #ASPNETCORE_Kestrel__Certificates__Default__Password: password #ASPNETCORE_Kestrel__Certificates__Default__Path: /https/aspnetapp.pfx EX_RunJobsInProcess: 'false' ports: - 5000:80 # 关了HTTPS,不需要映射443端口 #- 5001:443 volumes: - ex_appdata:/app/storage - ex_ssldata:/https jobs: depends_on: - app image: exceptionless/job:latest environment: EX_AppMode: Production # UI地址,修改这里的IP地址为你的服务器IP地址 EX_BaseURL: http://你的IP:5000 EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 # 邮件配置 EX_ConnectionStrings__Email: smtps://邮箱地址:密码@SMTP服务器:端口 EX_SmtpFrom: 发件邮箱地址 EX_ConnectionStrings__MessageBus: provider=redis #EX_ConnectionStrings__Metrics: provider=statsd;server=statsd; EX_ConnectionStrings__Queue: provider=redis EX_ConnectionStrings__Redis: server=redis,abortConnect=false EX_ConnectionStrings__Storage: provider=folder;path=/app/storage volumes: - ex_appdata:/app/storage elasticsearch: image: exceptionless/elasticsearch:7.15.2 environment: discovery.type: single-node xpack.security.enabled: 'false' ES_JAVA_OPTS: -Xms1g -Xmx1g ports: - 9200:9200 - 9300:9300 volumes: - ex_esdata:/usr/share/elasticsearch/data kibana: depends_on: - elasticsearch image: docker.elastic.co/kibana/kibana:7.15.2 ports: - 5601:5601 redis: image: redis:6.0-alpine ports: - 6379:6379 volumes: ex_esdata: driver: local ex_appdata: driver: local ex_ssldata: driver: local
邮件配置
邮件配置是比较麻烦的地方,我查了一些资料才解决
在jobs
容器中的这两个环境变量里配置
EX_ConnectionStrings__Email: smtps://邮箱地址:密码@SMTP服务器:端口 EX_SmtpFrom: 发件邮箱地址
有坑的地方就是EX_ConnectionStrings__Email
变量的邮箱地址需要对@符号进行转义,用%40
代替@符号
以我的自建邮箱为例,邮箱地址是:test@dealiaxy.com,那么配置就是这样
EX_ConnectionStrings__Email: smtps://test%40dealiaxy.com:密码@SMTP服务器:端口 EX_SmtpFrom: test@dealiaxy.com
这样配置完成就可以正常发邮件了~
PS:还可以配置Webhook实现报错自动推送到微信、钉钉之类的平台,不细说了
AspNetCore集成
我主要使用的.Net技术栈是AspNetCore,其他项目可以参考官方文档的集成教程
首先在ExceptionLess中创建一个项目,把APIKey复制下来
编辑AspNetCore项目的appsettings.json
文件,增加配置
"Exceptionless": { "ServerUrl": "http://12.0.0.1:5000", "ApiKey": "Rajo99MksQTS6zZK81238jTkNHNOQP33A3iW45JC" }
然后编辑Program.cs
,添加服务和中间件
builder.Services.AddExceptionless(builder.Configuration); app.UseExceptionless();
集成这一步就搞定了
记录事件
Exceptionless中的事件有以下几种类型:
- 日志消息:记录的日志,可以是任何文本内容
- 特性使用:功能使用量的记录,例如接口调用情况等
- 异常情况:记录异常的信息
- 失效链接:当被访问的页面不存在时进行记录
除此之外,每个事件还可以附加tags、object、UserIdentity、Description之类的信息,有这些信息的辅助可以方便后续排查问题。
最简单的使用
ExceptionlessClient.Default.CreateLog("message").Submit();
CreateLog
方法会放回一个EventBuilder
类型的对象,之后在这个对象上进行大部分操作支持链式调用
可以像上面那样一行代码链式调用,也可以这样
// 先创建 var eventBuilder = ExceptionlessClient.Default.CreateLog("message"); // 再来慢慢添加 eventBuilder.AddObject(...); eventBuilder.AddTags(...); // 最后提交 eventBuilder.Submit();
可以附加到事件中的信息有很多,下面是官网提供的一些例子
// Set the reference id of the event so we can search for it later (reference:id). // This will automatically be populated if you call ExceptionlessClient.Default.Configuration.UseReferenceIds(); .SetReferenceId(Guid.NewGuid().ToString("N")) // Add the order object but exclude the credit number property. .AddObject(order, "Order", excludedPropertyNames: new [] { "CreditCardNumber" }, maxDepth: 2) // Set the quote number. .SetProperty("Quote", 123) // Add an order tag. .AddTags("Order") // Mark critical. .MarkAsCritical() // Set the coordinates of the end user. .SetGeo(43.595089, -88.444602) // Set the user id that is in our system and provide a friendly name. .SetUserIdentity(user.Id, user.FullName) // Set the users description of the error. .SetUserDescription(user.EmailAddress, "I tried creating an order from my saved quote.")
例如,使用SetUserIdentity
设置了用户信息,在异常列表就可以看到用户名,如图
用AddTags
添加标签,在页面中以badge的形式显示
还有AddObject
,很方便,可以直接把对象传进去,由于C#语言有匿名对象,那就更方便了,在页面上的“扩展数据”标签页上可以看到,ExceptionLess会把对象处理成表格形式,更加直观
提交错误信息
ExceptionLess提供了Exception对象的扩展方法
可以catch到错误后直接Submit
try {} catch (Exception ex) { ex.ToExceptionless().Submit(); }
当然也可以附加一些信息进去
ex.ToExceptionless().AddObject(...).Submit();
集成日志框架
除了手动提交事件,它还提供了与现有日志框架集成的方法
安装对应的nuget包就行(简单搜了一下,至少对Log4net和NLog的支持应该是没啥问题的)
以与Log4net集成为例,首先安装nuget包:Exceptionless.Log4net
附上一个简单的Log4net配置
<log4net> <appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="exceptionless"/> </root> </log4net>
其他语言能用吗?
虽然官方只支持.Net平台和前端(js调用、vue3),不过ExceptionLess提供了大量的HTTP接口,想要在其他语言的项目中使用,只需要调用对应的接口就行了,甚至可以自己封装一个
不过在其他语言的项目中,我推荐使用Sentry(下一篇文章要介绍的),支持的语言/框架更多,ExceptionLess的优势在于和AspNetCore这类.Net平台的结合更好,结果页面更直观~
话说回来,ExceptionLess的接口文档(Swagger)在/docs/index.html
,根据部署地址访问就能看到,里面你要的功能基本都有。
参考资料
官方 Self Hosting Wiki:https://github.com/exceptionless/Exceptionless/wiki/Self-Hosting
.NET Core微服务之基于Exceptionless实现分布式日志记录:https://www.cnblogs.com/edisonchou/p/exceptionless_foundation_and_quick_start.html
开源日志框架Exceptionless使用教程:https://www.cnblogs.com/youring2/p/11546485.html
Exceptionless 5.x 无法正常发送邮件的问题解决 :https://www.cnblogs.com/edisonchou/p/solve_the_problem_of_exceptionless_on_cannot_send_emails.html
到此这篇关于ExceptionLess的安装、配置、使用教程的文章就介绍到这了,更多相关ExceptionLess安装使用内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://www.cnblogs.com/deali/p/16504111.html
相关文章
- 编译安装非常的简单了我们现在的php版本已经到了php7了,下文小编来为各位介绍一篇关于PHP7快速编译安装的步骤,希望文章能够帮助到各位。 一、安装必要一些依赖 yum...2016-11-25
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- 这篇文章主要介绍了Rstudio中安装package出现的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
- PHP-FPM我们相信各位用高版本的php经常使用到了,下面整理了一些关于PHP-FPM的笔记,有兴趣的可进来看看。 今天赶上了123System OPenVZ VPS全场半价的机会,购入了一...2016-11-25
使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24如何使用php脚本给html中引用的js和css路径打上版本号
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31安装和使用percona-toolkit来辅助操作MySQL的基本教程
一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24Linux安装Pytorch1.8GPU(CUDA11.1)的实现
这篇文章主要介绍了Linux安装Pytorch1.8GPU(CUDA11.1)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-25- 一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
- 这篇文章主要介绍了vscode安装git及项目开发过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-19
- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
- 无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
- C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
- php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
- 这篇文章主要为大家详细介绍了Visual Studio 2015下载和安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22