在之前我有专门写两篇文章介绍过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:
- : # 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:
- : # This can be commented out if using reverse proxy. # reverseproxy:
# depends_on:
# - api
# - ui
# image: valian/docker-nginx-auto-ssl
# restart: on-failure
# ports:
# - :
# - :
# 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:
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:
- :
- :
ulimits:
memlock:
soft: -
hard: -
volumes:
- esdata:/usr/share/elasticsearch/data kibana:
depends_on:
- elasticsearch
image: exceptionless/kibana:
restart: on-failure
environment:
xpack.security.enabled: 'false'
ports:
- : redis:
image: redis:alpine
restart: on-failure
ports:
- : 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

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Exceptionless 5.0.0 本地Docker快速部署介绍的更多相关文章

  1. 私活利器,docker快速部署node.js应用

    http://cnodejs.org/topic/53f494d9bbdaa79d519c9a4a 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维, ...

  2. 使用Docker快速部署各类服务

    使用Docker快速部署各类服务 一键安装Docker #Centos环境 wget -O- https://gitee.com/iubest/dinstall/raw/master/install. ...

  3. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  4. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  5. 利用Docker快速部署Mysql

    写在前面 我又来更新了~~~,今天内容较少,主要是利用Docker快速部署Mysql和初始化数据 利用Docker下载Mysql 简洁明了,在命令提示符中输入 docker pull mysql:8. ...

  6. docker快速部署本地项目到服务器(tomcat8+mysql8)

    目标是:将本地运行的spring项目,部署到服务器上 为什么使用docker? 环境隔离 服务器上,各种环境交杂,使用docker,能清楚的把各个项目进行隔离,不单维护的人员方便,也会省去很多维护这些 ...

  7. docker快速部署DNS,实现快速上线

    概念Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.这里我将使用do ...

  8. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  9. SpringBoot使用Docker快速部署项目

    1.简介 建议阅读本文最好对Dokcer有一些了解 首先我们先了解一下Docker是什么 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器 ...

随机推荐

  1. Hadoop HA Hbase启动报UnknownHostException: mycluster

    Hadoop HA 搭建hbase启动时只有HMaster起来,HRegionServer没有起来 查看报错信息为: 2019-08-31 19:17:14,212 ERROR [main] regi ...

  2. JavaScript String 小球重力弹回

    JavaScript String 小球重力弹回 <!DOCTYPE html> <html lang="en"> <head> <met ...

  3. Delphi - Indy TIdThreadComponent 线程研究

    Indy IdThreadComponent 线程研究 前几天在开发数据实时解析功能模块的时候,发现解析数据量巨大,特别耗时,程序一跑起来界面假死. 为了优化用户体验,采用了Indy 自带的IdThr ...

  4. Netty源码分析 (二)----- ServerBootstrap

    BootStrap在netty的应用程序中负责引导服务器和客户端.netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通 ...

  5. 面向微服务的体系结构评审中需要问的三个问题-咖啡杂谈:Java、新闻、故事和观点

    面向微服务的体系结构如今风靡全球.这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺. 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为面向微服务的体系结构, ...

  6. spring MVC的流程

    spring MVC的工作流程

  7. 快速构建第一个Flink工程

    本文简述通过maven和gradle快速构建的Flink工程.建议安装好Flink以后构建自己的Flink项目,安装与示例运行请查看:Flink快速入门--安装与示例运行. 在安装好Flink以后,只 ...

  8. 漫谈JavaScript中的作用域(scope)

    什么是作用域 程序的执行,离不开作用域,也必须在作用域中才能将代码正确的执行. 所以作用域到底是什么,通俗的说,可以这样理解:作用域就是定义变量的位置,是变量和函数的可访问范围,控制着变量和函数的可见 ...

  9. 【Offer】[38] 【字符串的排列】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个字符串,打印出该字符串中字符的所有排列.例如,输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb. ...

  10. SSM框架使用分页插件显示信息

    1.在该SSM工程的pom.xml中加入PageHelper的分页插件依赖(若是版本号不对,可以尝试修改一下) <!-- 分页插件 --> <dependency> <g ...