分布式日志收集系統 - 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.pswp.cn/news/284496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284496.shtml
英文地址,請注明出處:http://en.pswp.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 流的…

spark-2.1.0 集群安裝

1、spark安裝前提——必須安裝好Hadoop&#xff08;本人有三臺機&#xff0c;已安裝好Hadoop&#xff09; 2、下載spark&#xff0c;解壓至master機本地文件 3、修改/conf/spark-env.sh&#xff08;原名spark-env.sh.template&#xff0c;把它改過來&#xff09; 配置如下&…

如何用grep命令同時顯示“匹配行”上下的n行?

如何用grep命令同時顯示匹配行上下的n行 標準unix/linux下的grep通過以下參數控制上下文grep -C 5 foo file 顯示file文件中匹配foo字串那行以及上下5行grep -B 5 foo file 顯示foo及前5行grep -A 5 foo file 顯示foo及后5行

【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…

sybase sp_procxmode簡述

今天整合存儲過程的腳本時&#xff0c;看到如下語句&#xff1a; sp_procxmode P_InitTaskByCond, anymodeGO 于是查詢了一下【sp_procxmode】 的一些簡單介紹&#xff0c;進行記錄一下&#xff1a;整理中 https://www.google.com.hk/search?newwindow1&safestrict&si…

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

上一篇文章主要是介紹了&#xff0c;每臺虛擬機的環境配置。接下來我們開始有關K8S的相關部署。另外補充一下上一篇文章中的K8S的changelog鏈接&#xff1a;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md1 配置yum源 所有節點都需要執行此…

[轉]Python 獲取Windows管理員權限

最近在寫一個可以自動更換 hosts 的 python 腳本&#xff0c;但是操作 hosts 需要管理員權限 &#xff0c;所以就想著要怎么獲取。 總結了一下&#xff0c;有三種方法可以獲取&#xff0c;下面分別介紹一下。 1. 以管理員運行 cmd 這個方法很簡單&#xff0c;也無需多說&#x…

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…

C++獲取本機的ip地址程序

C獲取本機的ip地址程序 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //鏈接到ws2_32動態鏈接庫class CInitSock { public:CInitSock(BYTE minorVer 2,BYTE majorVer 2){WSADATA wsaData;WORD VersionRequset;VersionRequset MAKEWORD(mino…

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%" …

Elasticsearch的Groovy Script自定義評分檢索

需求&#xff1a;以索引中的boostapp列作為評分的基礎分值&#xff0c;同時根據carpublishtime&#xff08;數據的刷新時間字段&#xff09;按時間進行衰減。 基于Groovy腳本實現。 1、query腳本方式&#xff1a; {"fields": ["boost","ucarid",…

stm32串口通訊問題

stm32串口通訊問題 在串口試驗中&#xff0c;串口通訊不正常&#xff0c;則可能會出現以下問題&#xff1a; 1. 配置完成后&#xff0c;串口沒有任何消息打印。 原因&#xff1a;1&#xff0c;端口配置有問題&#xff0c;需要重新檢查I/O口的配置 2&#xff0c;接線有問題&…

中國元宇宙白皮書

PS&#xff1a;PDF目錄&#xff08;書簽&#xff09;是為便于閱讀&#xff0c;重新整理過的。 2022《中國元宇宙白皮書》-互聯網文檔類資源-CSDN下載1月26日&#xff0c;2022《中國元宇宙白皮書》在北京中關村正式全網發布。該白皮書由國科創新研究院首席科學家更多下載資源、學…

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

本文講述安裝globalmapper后的一些簡單基本設置&#xff08;持續更新&#xff09;&#xff0c;為后續深入學習軟件打下基礎。訂閱專欄后私信作者&#xff0c;獲取中文安裝包及配套實驗數據包。 文章目錄1. 工具條的顯示與關閉2. 面積單位設置3. 選擇所選面要素的邊框4. 二三維聯…