分佈式、微服務必須配個日誌管理系統才優秀,Exceptionless走起~~~

前言

在真實的項目中,不管是功能日誌、錯誤日誌還是異常日誌,已經是項目的重要組成部分。在原始的單體架構,通常看日誌的方式簡單粗暴,直接登錄到服務器,把日誌文件拷貝下來進行分析;而如今分佈式、微服務架構盛行,如果每個節點服務器都去拷貝一次,估計還沒等你拷貝完,Boss就要炸鍋了;特別是遇到線上問題,肯定需要快速響應,所以好的日誌管理工具真的不能少,這裡就來說說Excetpionless日誌框架。

正文

1. Exceptionless簡介

Exceptionless是開源的,可以為 ASP.NET、Web API、WebForms、WPF、控制台項目收集對應的異常、事件和日誌信息,並將收集到的信息進行分組歸類,有利於問題排查及相關數據統計。使用簡單也便捷,主要功能如下:

  • 針對關注信息可進行通知提醒;
  • 收集信息根據種類進行分組管理;
  • 記錄詳細的錯誤或異常信息,排查錯誤更輕鬆;
  • 可以管理用戶查看信息;
  • 圖表形式顯示數據更加直觀;
  • 相關配置輕鬆設置;
  • 收集日誌、錯誤信息等很方便;

通俗一點來說就是把異常、日誌等信息收集在一起,統一的入口查看;針對相關信息進行分組,並以圖表的形式進行查看,還可以對用戶關心的信息進行通知提醒等擴展功能;

Exceptionless有兩種方式可以進行日誌管理:

  • 託管方式

    這種方式只需要在Exceptionless官網(//exceptionless.com/)註冊一個賬號即可,存儲那些都不用管,比較省心,簡單三步走就能完成日誌收集,如下:

    這種方式是把採集到的信息存儲到官方的服務器上了,感覺不太好,一是日誌信息其實對於一些項目來說很重要,二是要收費啊,免費版其實就是試用版,高級功能用不了,還要限制人數和項目數。

  • 自己搭建環境

    自己搭建環境,服務器都是自己,私有化,爽歪歪;但這種方式,不好的點就是需要花錢買服務器;

下面以WebAPI項目的方式進行演示,版本用.NET5。

2. 託管方式實現

2.1 註冊賬號並創建組織和項目

直接進入官網(//exceptionless.com/)註冊一個賬號即可,註冊賬號絕對免費滴;

image-20210925110911088

創建組織和項目,如下:

先創建組織

再創建項目

2.2 引入NuGet包並在Startup.cs注入和使用

這裡創建了一個WebAPI項目,引入Exceptionless.AspNetCore 即可;

在Startup.cs文件中進行注入相關服務並註冊到管道中,如下:

2.3 記錄日誌看效果

這裡在API中進行日誌記錄和異常信息上報,如下:

看效果,登錄進官網(//exceptionless.com/),就會看到對應的異常信息了,如下:

3. 自己搭建環境

2.1 安裝環境

Exceptionless提供Docker安裝版,這裡先以Dockerfile形式演示,Docker Compose就一樣的道理,只是分開容器部署更方便了。現在先直接下載(//github.com/exceptionless/Exceptionless/releases),推薦7.1.0版本,7.1.1的折騰了我好久,要麼腳本執行不成功,要麼缺少文件;然後拷貝到對應的Docker主機上解壓,如下:

 # 如果unzip命令找不到,就需要安裝
 yum install -y unzip zip
 # 然後解壓
 unzip Exceptionless-7.1.0.zip

解壓後的信息如下

Dockerfile 把對應的Exceptionless UI、Elasticsearch等都安裝在內部了由於我的雲服務內存比較小(內存大的可以不改),Dockerfile文件中默認指定了Elasticsearch最小使用內存為1G,如果內存不夠,就會報錯空間不足,所以稍微改動一下Dockerfile,如下:

改好之後就直接構建為鏡像,執行如下命令:

  docker build -t test333 .

構建成功之後,直接通過鏡像啟動容器即可,如下命令

 docker run -it --name tt3 -p 5000:80 -p 9200:9200 test333

可能由於服務器配置比較低的原因,啟動稍微需要點時間。

註:如果對docker還不太熟的,參考docker系列文章

Excpetionless API和Exceptionless UI 站點部署為一個站點了,如果能如下訪問頁面並能註冊成功,環境就搭建完成。

2.2 實操演練

登錄Exceptionless UI系統(//IP:5000/)進去之後就創建組織和項目,和託管的步驟差不多:

下一步就是針對選擇自己的項目類型,集成就行了(這步託管的也有,只是沒截圖),如下:

稍微改改Startup.cs文件,其他不用動,如下:

好了,這樣就改完了,其他代碼不動,運行訪問一下API ,看日誌效果:

2.3 Exceptionless 還提供接口調用

不管是託管還是自己搭建環境,都有提供對應的API進行調用,所以可以通過API的形式自己搞一個個性化的UI出來,也可以在其他系統中集成顯示日誌,反正接口在手,愛咋玩就咋玩;實在不行就改源代碼,嘿嘿嘿~~~。

Exceptionless的使用還是很簡單的,只是搭建的時候的花點心思。

代碼地址//gitee.com/CodeZoe/microservies-demo/tree/main/ExceptionlessDemo

Exceptionless官網//exceptionless.com

Exceptionless源代碼//github.com/exceptionless/Exceptionless/releases

總結

關於上面只是演示Exceptionless的使用,包含託管和自己搭建環境,基本上小夥伴都會選擇自己搭建;搭建過程需要花點心思,比如ES要不要集群,要不要支持APM,郵件通知配置等等,不過現在可以通過Docker-compose一鍵安裝,最多就是需要等待一會。還有如果想搞點個性化的,也可以在Exceptionless的源代碼上做操作;後續細節再單獨匯總吧;

關注「Code綜藝圈」,和我一起學習吧;