分布式日志收集系统 - 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- redisimage: exceptionless/app:latestenvironment:EX_AppMode: ProductionEX_ConnectionStrings__Cache: provider=redisEX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200EX_ConnectionStrings__MessageBus: provider=redis#EX_ConnectionStrings__Metrics: provider=statsd;server=statsd;EX_ConnectionStrings__Queue: provider=redisEX_ConnectionStrings__Redis: server=redis,abortConnect=falseEX_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.pfxEX_RunJobsInProcess: 'false'ports:- 5000:80# 关了HTTPS,不需要映射443端口#- 5001:443volumes:- ex_appdata:/app/storage- ex_ssldata:/httpsjobs:depends_on:- appimage: exceptionless/job:latestenvironment:EX_AppMode: Production# UI地址,修改这里的IP地址为你的服务器IP地址EX_BaseURL: http://你的IP:5000EX_ConnectionStrings__Cache: provider=redisEX_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=redisEX_ConnectionStrings__Redis: server=redis,abortConnect=falseEX_ConnectionStrings__Storage: provider=folder;path=/app/storagevolumes:- ex_appdata:/app/storageelasticsearch:image: exceptionless/elasticsearch:7.15.2environment:discovery.type: single-nodexpack.security.enabled: 'false'ES_JAVA_OPTS: -Xms1g -Xmx1gports:- 9200:9200- 9300:9300volumes:- ex_esdata:/usr/share/elasticsearch/datakibana:depends_on:- elasticsearchimage: docker.elastic.co/kibana/kibana:7.15.2ports:- 5601:5601redis:image: redis:6.0-alpineports:- 6379:6379volumes:ex_esdata:driver: localex_appdata:driver: localex_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设置了用户信息,在异常列表就可以看到用户名,如图

5c966289a98f48ff107b0dda98b66388.png
image

AddTags添加标签,在页面中以badge的形式显示

eeb2d17e5828fafca250f396c4c4f50d.png
image

还有AddObject,很方便,可以直接把对象传进去,由于C#语言有匿名对象,那就更方便了,在页面上的“扩展数据”标签页上可以看到,ExceptionLess会把对象处理成表格形式,更加直观

3ce8f53aa54d307052ceedf05e6740bb.png
image

提交错误信息

ExceptionLess提供了Exception对象的扩展方法

可以catch到错误后直接Submit

try {}
catch (Exception ex) {ex.ToExceptionless().Submit();
}

当然也可以附加一些信息进去

ex.ToExceptionless().AddObject(...).Submit();

集成日志框架

除了手动提交事件,它还提供了与现有日志框架集成的方法

安装对应的nuget包就行(简单搜了一下,至少对Log4net和NLog的支持应该是没啥问题的)

fde28b7b8ed4b681a74d0429a10b8ca9.png
image

以与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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]使用npm发布vue组件

&#x1f636; NPM 是随同 NodeJS 一起安装的 javascript 包管理工具&#xff0c;能解决 NodeJS 代码部署上的很多问题 发布前的准备 注册一个 npm 账号 前往 NPM 官网进行注册 初始化项目 这里用的是webpack-simple,可以理解为精简版的vue-cli。 如果没有全局安装 vue 的话&am…

[置顶]tcpflow 抓包

转自&#xff1a; http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 tcpdump 是一个很方便的抓包工具&#xff0c; 但是 tcpdump 是以包为单位进行输出的&#xff0c;阅读起来不是很方便。 而 tcpflow 是面向 TCP 流的…

【CASS精品教程】CASS自动插入DOM影像(附插件下载)

本文讲解在CASS中快速自动插入栅格数据(影像、DOM、DEM)等,支持tif、img等格式。 文章目录 一、效果预览二、插件安装三、插件下载一、效果预览 二、插件安装 打开CASS9.1软件,输入命令appload,回车。 选择插入影像插件,点击【加载】。 输入命令aimg,回车,可以进行影像…

用python来获取Github IP地址

Title: 快速获Github网站的IP地址 Author: JackieZheng Date: 2022-01-20 19:37:35 LastEditTime: 2022-01-22 09:14:49 LastEditors: Please set LastEditors Description: FilePath: \\vsTemp\\gitdns.pyimport os import sys import re import shutil import requestshosts_…

DNS原理及其解析过程【精彩剖析】

DNS原理及其解析过程精彩剖析原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://369369.blog.51cto.com/319630/812889网络通讯大部分是基于TCP/IP的&#xff0c;而TCP/IP是基于IP地址的&am…

基于Kubernetes v1.24.0的集群搭建(二)

上一篇文章主要是介绍了&#xff0c;每台虚拟机的环境配置。接下来我们开始有关K8S的相关部署。另外补充一下上一篇文章中的K8S的changelog链接&#xff1a;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md1 配置yum源 所有节点都需要执行此…

JavaScript中的一些特殊用法(一)

为什么80%的码农都做不了架构师&#xff1f;>>> 1. 不使用script自闭合标签 script中使用自闭合标签&#xff0c;虽然他在XHTML中合法&#xff0c;但是不符合HTML规范&#xff0c;而且得不到某些浏览器的正确解析。我曾经就在引入EXT时使用此方式&#xff0c;导致无…

SPICE简史

如今每一天都有不知其数的半导体芯片设计公司与设计验证工程师&#xff0c;在用着电路仿真软件SPICE。SPICE广泛应用在仿真模拟电路&#xff08;例如运放Op Amp&#xff0c;能隙基准稳压电源Bandgap Reference&#xff0c;数模/模数转换 AD/DA等&#xff09;&#xff0c;混合信…

【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解

本文以案例的形式&#xff0c;讲解Globalmapper中进行影像矩形框裁剪&#xff0c;矢量范围裁剪&#xff0c;标准图幅批量分幅的方法&#xff0c;配套实验数据为数据包中的data003.rar。订阅专栏后私信作者&#xff0c;获取中文安装包及配套实验数据包&#xff0c;便于同步学习。…

基于Kubernetes v1.24.0的集群搭建(三)

1 使用kubeadm部署Kubernetes 如无特殊说明&#xff0c;以下操作可以在所有节点上进行。1.1 首先我们需要配置一下阿里源cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernet…

BAT批处理代码快速打开注册表并定位到指定目录

主要代码&#xff1a; echo off echo %1 copy %~nx0 c:\windows\system32 if "%1" NEQ "" (set regPath%1) else (set /p regPath输入打开的注册表路径:) :trimRight if "%regPath:~-1%""\" set "regPath%regPath:~0,-1%" …

中国元宇宙白皮书

PS&#xff1a;PDF目录&#xff08;书签&#xff09;是为便于阅读&#xff0c;重新整理过的。 2022《中国元宇宙白皮书》-互联网文档类资源-CSDN下载1月26日&#xff0c;2022《中国元宇宙白皮书》在北京中关村正式全网发布。该白皮书由国科创新研究院首席科学家更多下载资源、学…

【GlobalMapper精品教程】002:GlobalMapper中文版安装后的基本设置

本文讲述安装globalmapper后的一些简单基本设置&#xff08;持续更新&#xff09;&#xff0c;为后续深入学习软件打下基础。订阅专栏后私信作者&#xff0c;获取中文安装包及配套实验数据包。 文章目录1. 工具条的显示与关闭2. 面积单位设置3. 选择所选面要素的边框4. 二三维联…

【GlobalMapper精品教程】005:影像拼接与裁切(分幅)作业案例教程

本文讲述Globalmapper影像拼接与裁剪案例教程。 文章目录 一、影像的拼接(1)针对少量影像的拼接(2)针对大量影像的拼接二、影像的裁剪一、影像的拼接 (1)针对少量影像的拼接 如果影像数量比较小,可以通过加载→导出的方式进行拼接。 如下图所示,案例数据(配套实验数…

元宇宙行业深度研究报告:为什么元宇宙是下一代互联网?

目录 1、什么是元宇宙&#xff1f;为什么元宇宙是下一代互联网 1.1、 元宇宙&#xff1a;下一代沉浸式互联网 1.1.1、超越虚拟与现实的科幻畅想&#xff1a;元宇宙概念来源 1.1.2、新技术由点突破连接成面&#xff0c;移动互联网继承者的孕育 1.1.3、元宇宙的五大要素&…

redis 安装错误 jemalloc.h: No such file or directory

为什么80%的码农都做不了架构师&#xff1f;>>> 错误描述 [rootmysql-rtb-slave redis-4.0.1]# make && make install cd src && make all make[1]: Entering directory /usr/local/src/redis-4.0.1/srcCC Makefile.dep make[1]: Leaving director…

OAuth,JWT ,OIDC你们搞得我好乱啊

hi&#xff0c;这里是桑小榆&#xff0c;这次分享的不是生活文&#xff0c;而是技术文。基于OAuth2.0协议的授权认证&#xff0c;初次接触授权认证知识的时候&#xff0c;出现了不少热门名词&#xff0c;“OAuth”&#xff0c;“JWT”&#xff0c;“OIDC”&#xff0c;这简直让…

软件测试技术第二次作业——程序错误的判断

在做作业之前我们首先要明确软件测试过程中的几个名词&#xff1a; Fault&#xff1a;在软件测试中&#xff0c;fault是指程序中静态的缺陷&#xff0c;也就是指在程序中存在的编程错误。 Error&#xff1a;在软件测试中&#xff0c;error是指由于程序中存在的fault而产生的不正…

不只是日志收集,项目监控工具Sentry的安装、配置、使用

前言上一篇文章介绍了ExceptionLess这个日志收集系统&#xff1a;ExceptionLess的安装、配置、使用由于ExceptionLess官方提供的客户端只有.Net/.NetCore平台和js的&#xff0c;本文继续介绍另一个日志收集系统&#xff1a;SentrySentry 是一个实时事件日志记录和聚合平台。&am…