在之前我有专门写两篇文章介绍过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. Selenium3 + Python3自动化测试系列九——cookie操作

    cookie操作 一.Cookie操作 WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. 使用方法: 1:get_cookies() ,获取cookie信息 ...

  2. python学习——面向对象编程

    关于python面向对象编程,请参考: https://blog.csdn.net/zhoudaxia/article/details/23341261

  3. Codeforces 814C

    题意略. 思路: 尺取法,依然是要利用之前的结果. 感觉时间复杂度太高了,竟然也过了. #include<bits/stdc++.h> using namespace std; ; ]; ...

  4. 2. Sentinel源码分析—Sentinel是如何进行流量统计的?

    这一篇我还是继续上一篇没有讲完的内容,先上一个例子: private static final int threadCount = 100; public static void main(Strin ...

  5. 在javascript中的浏览器兼容问题以及兼容浏览器汇总(默认事件,阻止冒泡,事件监听。。。)以及解决方式详解

    在javascript中常见的浏览器兼容问题,以及解决方式. 在前端工作当中我们遵循这样的原则:渐进增强和优雅降级   渐进增强(progressive enhancement): 针对低版本浏览器进 ...

  6. Android Activity启动耗时统计方案

    作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...

  7. MySql连接笔记

    一.内连接查询  inner join 关键字:inner  join   on 语句:select * from a_table a inner join b_table b on a.a_id = ...

  8. 1044/1045 - Access denied for user 'username'@'yourhost'

    度娘很久都未能解决,大多都是修改配置文件,或是执行如下SQL: update user set Password=password('111111') where `user`='root'; 我本地 ...

  9. Python连载37-多进程、进程子类、进程父子id

    一.线程替代方案 1.subprocess (1)完全跳过线程,使用进程 (2)是派生进程的主要替代方案 (3)python2.4后引入 2.multiprocessing (1)使用threadin ...

  10. java中public,private,protected和default的区别

    类中的数据成员和成员函数据具有的访问权限包括:public.private.protect.default(包访问权限) 作用域       当前类     同一package 子孙类   其他pac ...