Exceptionless 5.0.0 本地Docker快速部署介紹
在之前我有專門寫兩篇文章介紹過Exceptionless這款開源日誌專案的使用和部署,但是當時是基於4.1.0版本(2017年的release),時隔兩年多Exceptionless也推出了5.0.0版本。
一、關於Exceptionless 5.0.0
Exceptionless 是一個開源的實時的好用的日誌收集框架,它將日誌收集變得簡單易用並且不需要了解太多的相關技術細節及配置。但是之前的版本將其Web和API繫結在了Windows平臺通過IIS執行,對於已經步入雲原生時代的我們顯得有點格格不入。5.0.0的釋出解決了這一痛點,其最大的變化就是基於ASP.NET Core重寫並支援跨平臺,也就是說當初我們設想的要是能夠基於Docker部署在Linux伺服器下就更好了的願望已經實現了,在此真心感謝Exceptionless專案的各位貢獻者
至此我也可以將我們之前的Exceptionless從Windows Server遷移到Linux上了!
二、快速本地部署步驟
2.1 安裝Docker 18.09+
由於Exceptionless 5.0.0的一個前置要求是Docker版本(CE)在18.09及以上,因此我們需要安裝一個18.09+的Docker CE版本到Linux伺服器上,如果你之前安裝了可以跳過此步驟,但如果版本小於18.09,那麼請清理掉老版本升級到新版本,升級版本可以參考以下步驟。
實驗環境:阿里雲ECS主機,CentOS 7.4
(1)清理已有Docker老版本
停止Docker老版本:
systemctl stop docker
解除安裝軟體包:
yum erase docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
刪除相關配置檔案:
find /etc/systemd -name '*docker*' -exec rm -f {} \; find /etc/systemd -name '*docker*' -exec rm -f {} \; find /lib/systemd -name '*docker*' -exec rm -f {} \; rm -rf /var/lib/docker #刪除以前已有的映象和容器,非必要,慎刪 rm -rf /var/run/docker
(2)安裝Docker 18.09+
軟體包安裝:
yum install -y yum-utils device-mapper-persistent-data lvm2
新增yum源:
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
檢視可安裝的版本:目前最新版本已經是19.03
yum list docker-ce --showduplicates | sort -r
安裝指定版本:18.09
yum install docker-ce docker-ce-18.09.9-3.el7 -y
啟動Docker並設定開機自啟動:
systemctl start docker systemctl enable docker
檢視Docker版本:
docker version
你可以看到已經是18.09版本了:
2.2 下載Exceptionless 5.0.0 Release包
傳送門:Exceptionless release
2.3 安裝Exceptionless 5.0.0
(1)修改docker-compose.yml檔案,設定外部訪問地址/域名(適配你的伺服器IP地址 或 域名+SSL證書,這裡我直接修改為我的阿里雲伺服器的外網IP地址,參考我的註釋)
version: '3.4' services: api: depends_on: - elasticsearch - redis build: context: . target: api image: exceptionless/api:latest restart: on-failure environment: EX_AppMode: Production EX_BaseURL: http://192.168.16.170:5100 #UI地址,修改這裡的IP地址為你的伺服器IP地址 EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 #EX_ConnectionStrings__Email: smtps://user:[email protected]:587 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 EX_RunJobsInProcess: 'false' ports: - 5000:80 # This can be commented out if using reverse proxy. volumes: - appdata:/app/storage jobs: depends_on: - api build: context: . target: job image: exceptionless/job:latest restart: on-failure environment: EX_AppMode: Production EX_BaseURL: http://192.168.16.170:5100 #UI地址,修改這裡的IP地址為你的伺服器IP地址 EX_ConnectionStrings__Cache: provider=redis EX_ConnectionStrings__Elasticsearch: server=http://elasticsearch:9200 #EX_ConnectionStrings__Email: smtps://user:[email protected]:587 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: - appdata:/app/storage ui: image: exceptionless/ui:latest environment: AppMode: Production EX_ApiUrl: http://192.168.16.170:5000 #API地址,修改這裡的IP地址為你的伺服器IP地址 #EX_Html5Mode: 'false' #EX_EnableSsl: 'false' #EX_EnableAccountCreation: 'false' ports: - 5100:80 # This can be commented out if using reverse proxy. # reverseproxy: # depends_on: # - api # - ui # image: valian/docker-nginx-auto-ssl # restart: on-failure # ports: # - 80:80 # - 443:443 # volumes: # - ssldata:/etc/resty-auto-ssl # environment: # ALLOWED_DOMAINS: '(ex-ui|ex-api).mydomainn.com' # SITES: 'ex-ui.mydomainn.com=ui;ex-api.mydomainn.com=api' elasticsearch: image: exceptionless/elasticsearch:1 restart: on-failure environment: cluster.name: 'exceptionless' bootstrap.memory_lock: 'true' discovery.type: single-node ES_JAVA_OPTS: '-Xms512m -Xmx512m' xpack.security.enabled: 'false' xpack.graph.enabled: 'false' xpack.watcher.enabled: 'false' ports: - 9200:9200 - 9300:9300 ulimits: memlock: soft: -1 hard: -1 volumes: - esdata:/usr/share/elasticsearch/data kibana: depends_on: - elasticsearch image: exceptionless/kibana:1 restart: on-failure environment: xpack.security.enabled: 'false' ports: - 5601:5601 redis: image: redis:alpine restart: on-failure ports: - 6379:6379 volumes: esdata: driver: local appdata: driver: local ssldata: driver: local
Note:在這個docker-compose.yml中定義了Exceptionless的最小化執行環境,但官方建議生產環境使用ElasticSearch叢集,並適當修改ElasticSearch的記憶體限制。如果你的量很小真的不大,那麼這個最小化的執行環境也夠用了,沒必要為了高可用而高可用。
(2)將Release包上傳到阿里雲伺服器,然後通過SSH執行一下shell命令(首先cd到這個release包的目錄下)啟動Exceptionless 5.0.0。
docker-compose up -d
整個過程會比較漫長,因為會經過34個Steps,拉取很多映象,類似於Redis,ElasticSearch,Kibana及.NET Core SDK等等,請耐心等待。最終效果如下所示:
2.4 使用Exceptionless 5.0.0
(1)訪問你的伺服器IP:5100 即可訪問Exceptionless Web管理登入介面,如果你能看到,那麼代表部署成功了。註冊一個賬號,然後登陸吧。
(2)可以看到主頁是全新的中文管理介面,感謝貢獻者的努力
(3)建立一些示例專案,如“XDP.Product.API”,並獲取API Key
(4)在你的ASP.NET Core WebAPI專案中配置API Key,並向Exceptionless API(這裡是5000埠)傳送Log
(5)在Exceptionless中檢視Log
三、遺留問題:Email通知配置
使用過Exceptionless的童鞋都知道,Exceptionless提供了強大的Email通知機制,可以為使用者提供及時的嚴重錯誤通知和每日報告。
在上面介紹的安裝基礎上,根據官方Wiki文件,按理說我們只需要確保docker-compose.yml中的api和jobs的AppMode為Production模式並設定SMTP就可以開啟Email通知。
EX_AppMode: Production EX_ConnectionStrings__Email: smtp://edisonchou7%40qq.com:[email protected]:465這裡的%40是@的轉義替代,在Exceptionless中會使用Decode進行解碼為@,原因好像是因為它是通過@符號分割前方的使用者名稱+密碼和後方的Host+Port,也是醉了。 設定完成後,通過以下命令重啟docker:
docker-compose up -ddocker-compose會自動幫我們重啟更改過的容器,比如api和jobs。 但是,我試了很多次都發現還是無法正常傳送Email通知,由於不影響使用,也就暫時沒去深究了,有解決的朋友可以告知並分享一下解決辦法,謝謝。
四、小結
本文介紹了Exceptionless 5.0.0的容器化本地部署,主要參考自Exceptionless的Self-Host文件。
參考資料
1、Exceptionless release
2、Exceptionless Self-Hosting Documention
作者:周旭龍
出處:http://edisonchou.cnblogs.com
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。