Exceptionless 5.0.0本地Docker快速部署介绍

640?wx_fmt=gif

在之前我有专门写两篇文章介绍过Exceptionless这款开源日志项目的使用和部署,但是当时是基于4.1.0版本(2017年的release),时隔两年多Exceptionless也推出了5.0.0版本。

(1)

(2)

01

关于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上了!

02

快速本地Docker部署

安装Docker CE 18.09+

        由于Exceptionless 5.0.0的一个前置要求是Docker版本(CE)在18.09及以上,因此我们需要安装一个18.09+的Docker CE版本到Linux服务器上,如果你之前安装了可以跳过此步骤,但如果版本小于18.09,那么请清理掉老版本升级到新版本,升级版本可以参考以下步骤。

  实验环境:阿里云ECS主机,CentOS 7.4

  (1)清理已有Docker老版本

  停止Docker老版本:

  卸载软件包:

  删除相关配置文件:

  (2)安装Docker 18.09+

  软件包安装:

  添加yum源:

  查看可安装的版本:目前最新版本已经是19.03

  安装指定版本:18.09

yum install docker-ce docker-ce-18.09.9-3.el7 -y

  启动Docker并设置开机自启动:

systemctl start docker	
systemctl enable docker

  查看Docker版本:

  你可以看到已经是18.09版本了:

  640?wx_fmt=png

下载Release包

        传送门:Exceptionless release

   640?wx_fmt=png

安装Exceptionless

(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的内存限制。如果你的量很小真的不大,那么这个最小化的运行环境也够用了,没必要为了高可用而高可用。 

  (2)将Release包上传到阿里云服务器,然后通过SSH执行一下shell命令(首先cd到这个release包的目录下)启动Exceptionless 5.0.0。

  整个过程会比较漫长,因为会经过34个Steps,拉取很多镜像,类似于Redis,ElasticSearch,Kibana及.NET Core SDK等等,请耐心等待。最终效果如下所示:

  640?wx_fmt=png

  640?wx_fmt=png

使用Exceptionless

        (1)访问你的服务器IP:5100 即可访问Exceptionless Web管理登录界面,如果你能看到,那么代表部署成功了。注册一个账号,然后登陆吧。

  640?wx_fmt=png

  (2)可以看到主页是全新的中文管理界面,感谢贡献者的努力

  640?wx_fmt=png

  640?wx_fmt=png

  (3)创建一些示例项目,如“XDP.Product.API”,并获取API Key

  640?wx_fmt=png

  (4)在你的ASP.NET Core WebAPI项目中配置API Key,并向Exceptionless API(这里是5000端口)发送Log

  (5)在Exceptionless中查看Log

  640?wx_fmt=png

  640?wx_fmt=png

03

遗留问题:Email通知配置

        使用过Exceptionless的童鞋都知道,Exceptionless提供了强大的Email通知机制,可以为用户提供及时的严重错误通知和每日报告。

  640?wx_fmt=png

  在上面介绍的安装基础上,根据官方Wiki文档,按理说我们只需要确保docker-compose.yml中的api和jobs的AppMode为Production模式并设置SMTP就可以开启Email通知。

EX_AppMode: Production	
EX_ConnectionStrings__Email: smtp://edisonchou%40qq.com:zltqvl2321ed@smtp.qq.com:465

  这里的%40是@的转义替代,在Exceptionless中会使用Decode进行解码为@,原因好像是因为它是通过@符号分割前方的用户名+密码和后方的Host+Port,也是醉了。

  设置完成后,通过以下命令重启docker:

docker-compose up -d

  docker-compose会自动帮我们重启更改过的容器,比如api和jobs。

  但是,我试了很多次都发现还是无法正常发送Email通知,由于不影响使用,也就暂时没去深究了,有解决的朋友可以告知并分享一下解决办法,谢谢。

04

小结

本文介绍了Exceptionless 5.0.0的容器化本地部署,主要参考自Exceptionless的Self-Host文档。

参考资料:

1、Exceptionless release

2、Exceptionless Self-Hosting Documention

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=png
点个在看,和更多人一起分享!

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

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

相关文章

数据库事务及隔离级别

一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态…

定了!10 月 8 日!Jupyter Notebook 原生支持将正式来到 VS Code!

北京时间 2019 年 9 月 21 日,在 PyCon China 2019 大会上,前不久,我们已经可以尽管如此,还是有许多童鞋来询问这个功能何时能正式发布。现在,我们可以在 VS Code Python 插件的 Release Plan 看到正式的发布时间已经确…

图解MySQL 内连接、左连接、右连接

一、准备工作 用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。 MySQL版本:Server version: 5.6.31 MySQL Comm…

微软想将新版Edge浏览器引入Linux

继推出 WSL2、将 exFAT 技术添加至 Linux 内核,和宣布第一届微软 Linux 大会后,微软再次瞄准了 Linux。这次 Linux 用户将很可能迎来新版 Edge 浏览器。微软网络技术程序经理 Sean Larson 在 Twitter 上发布了一条消息,表示 Edge 开发团队正在…

一套代码同时支持.NET Framework和.NET Core

在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core。如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码。但是,如果是一个大型分布式应用,几百台Server&#x…

从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

正文一、前情回顾哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆!放假这两天,倒是学到了很多东西&#…

MySQL——binlog,redo log

一、什么是binlog、redo log binlog属于逻辑日志,是逻辑操作。innodb redo属于物理日志,是物理变更。逻辑日志有个缺点是难以并行,而物理日志可以比较好的并行操作。 binlog是MySQL Server层记录的日志, redo log是InnoDB存储引…

“自启动”树莓派上的 .NET Core 3.0 环境

点击上方蓝字关注“汪宇杰博客”导语昨天发了一篇《自动配置环境变量Rapbian 系统启动时会去执行 .profile 文件里的命令。因此我们只需要把配置环境变量的命令加入 .profile 文件即可。在 Linux 中,.profile 扩展用于终端程序中的文件。Linux 和 Mac OS X 终端程序…

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站

喜迎国庆点击上方蓝字关注“汪宇杰博客”导语前几天发了两篇《能跑就行:Kestrel Hosting如果你的要求只是临时内网访问,可以只用 Kestrel 来承载 Web 服务器,只需要给 dotnet 命令一个 --urls 参数即可设置允许访问的主机名和端口号。我不希望…

常见的NoSQL数据库

NoSQL数据库发展迅猛,据说现在已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库 先来看张表,了解下典型的NoSQL数据库的分类 NoSQL一般特征: 临时性键值存储一般作为关系型数据库的缓存来使用由于存在数据丢失的可…

2019年9月中国编程语言排行榜,C#排第三

前两天,在 GitHub 上看到一份报告,上面统计了全国程编程语言排行榜 9 月份的情况,下面跟大家分享一下,这份报告里面都说了什么。https://github.com/juwikuang/china_job_survey/blob/master/notebook/201909/programming_languag…

从0开始编写dapper核心功能、压榨性能、自己动手丰衣足食

我偶然听说sqlsugar的性能比dapper强。对此我表示怀疑(由于我一直使用的dapper存在偏见吧),于是自己测试了sqlsugar、freesql、dapper发现他们的给我的结果是sqlsugar>dapper>freesql(这里并不是黑那个orm,毕竟不同orm功能不…

免费下载 80多种的微软推出入门级 .NET视频

.NET Core 3.0视频系列中宣布了80多个新的免费视频,这些视频同时放在Microsoft的Channel 9 和youtube上面。 在线观看由于跨洋网络效果不太好,下载到机器上慢慢看是最好的了。 所以Scott Hanselman 特别制作了一个页面 http://dot.net/videos。我把这个页…

数据库连接池原理及常用连接池介绍

一、背景介绍 1.1 什么是连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 1.2 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网…

DevOps案例研究|中华有为-解构华为软开云DevOps实践

内容来源:DevOps案例深度研究-华为软开云DevOps研究战队(本文只展示部分PPT研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:王英伟(Topic Leader)、蔡志超、陈安…

Excel催化剂插件安装过程升级,离线版全网公开下载!

Exce催化剂推出近2年,之前一直在推崇在线版的安装方式,但因安装步骤较多,可能吓退了一部分初级用户,此轮重新梳理,让安装方式更简单,也公开了离线版的安装文件,若部分用户不想使用在线版&#x…

包邮送88本畅销技术书

来给大家送一波福利,这次联系了 11个好友一起给各位送书,每个号送 8 本,一共 88本,还包邮哦。感谢清华大学出版社对本次活动的赞助。01 书怎么送很简单,关注下面的公众号,并在后台回复「抽奖」,…

字典树(Trie树)的原理与实现

一、概述 1.1 基本概念 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。 1.2 基本性质 根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一节点。路径上经过的字符连接…

C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

点击蓝字“dotNET匠人”关注我哟加个“星标★”,每日 7:15,好文必达!什么要刷LeetCode大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook、LinkedIn、Amazon/Apple、Google、Microsoft)&#xff0…

.NET Core迁移前的准备工作

前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家。大致有以下几个部分:1. .NET Core的由来2. 为什么要迁移.NET Core3. .NET Core3.X主要特性4. .NET Standard和.NET Core5. .NET Core Roadmap&版本选择接下来,我们详…