

ExceptionLess的安装、配置、使用 - 程序设计实验室
source link: https://www.cnblogs.com/deali/p/16504111.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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
代替@符号
以我的自建邮箱为例,邮箱地址是:[email protected],那么配置就是这样
EX_ConnectionStrings__Email: smtps://test%40dealiaxy.com:密码@SMTP服务器:端口
EX_SmtpFrom: [email protected]
这样配置完成就可以正常发邮件了~
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
,根据部署地址访问就能看到,里面你要的功能基本都有。
__EOF__
Recommend
-
52
-
33
-
63
写在前面 从上一篇博客
-
12
Django数据库性能优化之 - 使用Python集合操作 - 程序设计实验室 - 博客园 最近有个新需求: 人员基础信息(记作人员A),10w ...
-
9
Sentry的安装、配置、使用 - 程序设计实验室 - 博客园 上一篇文章介绍了ExceptionLess这个日志收集系统:
-
8
前言# 最近一直在忙(2月份沉迷steam,3月开始工作各种忙),好久没更新博客了,不过也积累了一些,忙里偷闲记录一下。 这个需求是这样...
-
3
前言# 最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很...
-
10
前言# 时间过得飞快,一转眼国庆假期也要过去了,再不更新博客就太咸鱼了…… 最近在开发AIHub的时候想找个C#能用的命名实体识别库,但一...
-
6
前言# 新版 hive 提供了 beeline 工具,可以执行SQL并导出数据,不过操作还是有点复杂的,团队里有些同学不会Linux的基本操作,所以我花了亿点...
-
6
SignalR牛刀小试 在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。 简介
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK