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 5.0.0版本介紹一下快速地部署開發環境和生產環境,相信對有興趣的朋友會有一點幫助。

  至此我也可以將我們之前的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:password@smtp.host.com: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:password@smtp.host.com: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的內存限制。如果你的量很小真的不大,那么這個最小化的運行環境也夠用了,沒必要為了高可用而高可用。  

  此外,貌似官方已經將exceptionless/elasticsearch:1這個鏡像移除了,大家可以使用這個鏡像:edisonsaonian/exceptionless-elasticsearch:1

  (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: smtps://edisonchou7%40qq.com:zltqvl2321ed@smtp.qq.com:465
  這里的%40是@的轉義替代,在Exceptionless中會使用Decode進行解碼為@,原因好像是因為它是通過@符號分割前方的用戶名+密碼和后方的Host+Port,也是醉了。
  設置完成后,通過以下命令重啟docker:
docker-compose up -d
  docker-compose會自動幫我們重啟更改過的容器,比如api和jobs。
  但是,我試了很多次都發現還是無法正常發送Email通知,由於不影響使用,也就暫時沒去深究了,有解決的朋友可以告知並 分享一下解決辦法,謝謝。

四、小結

  本文介紹了Exceptionless 5.0.0的容器化本地部署,主要參考自Exceptionless的Self-Host文檔。

參考資料

1、Exceptionless release

2、Exceptionless Self-Hosting Documention

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM