sentry是一个实时事件日志记录和聚合平台。它专门用于监视错误和提取执行适当的事后操作所需的所有信息, 而无需使用标准用户反馈循环的任何麻烦。
Sentry 是一个日志平台,分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web节目方便查看。Sentry由python编写,好多公司都在用,今天我来教你用docker搭建,跟我一步步敲,绝对没问题
Sentry 提供了两种安装方式:docker 和 Python 包。
我推荐搭建使用第一种方式,比较简便,否则你需要自行安装和启动 PostgreSQL、Redis、Kafka 等一系列服务和创建表等操作。
购买ECS
购买华为云弹性云服务(这一步是为了找一台服务器部署sentry;如果你或者公司要是有服务器,可以直接忽略此步)
作者作为一名打工人有点穷,对比了一下金山云 、阿里云、 华为云后发现华为云较便宜,所以我选择了华为云,其实其他云厂商都大同小异,这一步知识教大家如何购买ECS,很简单
华为云控制台网站:account.huaweicloud.com
sentry本地部署版地址:github.com/getsentry/o…
sentry官方要求最低4核8G,我们这是购买的是8核16G
的ECS
- 选择控制台-弹性云服务器ECS
- 左上角选择-
购买弹性云服务器
- 选按需计费-乌兰察布区-8核16G(都是穷闹的,这一步土豪请随意)
- 公共镜像-Centos-Centos8.2-下一步
- 网络-自己选一个默认的就行(这是为了测试,生产环境中要按照生产环境规范来选择网络环境),
弹性公网IP-选择按流量计费-5M(土豪请随意)
- 设置密码-确认订单就买就完成了, 这里注意,因为我们没有设置防火墙和安全组,我们还加了公网IP,肯定会让所有人能给扫到这台机器尝试暴力破解,存在很大风险,所以密码设置一定要有复杂度
- 控制台-弹性云服务器ECS
- 这时候我们会看到服务器正在创建,等1-2分钟创建好后,IP地址会显示一个弹性公网IP,我的ECS公网IP是
121.37.71.117
, 到此ECS购买完成,你看花钱的速度快不快~
部署Sentry
登录和配置ECS
- 拿到上面的IP,登录云服务器
ssh [email protected]
第一次连接输入yes
,然后输入你设置的密码
- 当SSH远程命令或者远程工具登录云服务器时,经常会发现SSH连接后一会儿SSH客户端就被服务器T掉,就会失去连接,我们先来设置一下SSH服务(此操作仅为测试,生产环境中请根据生产规范配置)
编辑SSH配置文件 vim /etc/ssh/sshd_config
,找到找到以下配置项ClientAliveInterval
和ClientAliveCountMax
#ClientAliveInterval 0 #服务端每隔多少秒向客户端发送一个心跳数据
#ClientAliveCountMax 3 #客户端多少次没有相应,服务器自动断掉连接
复制代码
去掉注释,改成:
ClientClientAliveInterval 60
ClientAliveCountMax 86400
复制代码
保存退出
如图:
最重要的要重启SSH服务systemctl restart sshd
,然后输入exit
再重新连接ssh [email protected]
(这里我做了主机信任,所以没用输密码,正常情况下会让输入密码)
准备yum源
这一步也可忽略,如果yum安装包没有问题,可以不用执行此步骤
为了更好的接下来的操作,我把yum源换成阿里的(仅为测试,生产环境请遵守生产规范)
- 先删除原先的yum源
cd /etc/yum.repos.d/
rm -rf *
ls
复制代码
- 下载阿里yum源
如果提示wget
没有安装,也可以用curl
来下载
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
复制代码
安装docker
- 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
复制代码
- 安装docker依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
复制代码
- 安装docker-ce源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码
- 安装docker-ce最新版本(根据官网要求,docker版本不能低于19.03.6)
yum install docker-ce docker-ce-cli containerd.io
复制代码
- 启动docker并加入开机自启动
systemctl start docker
systemctl enable docker
复制代码
- 验证docker
docker run hello-world
复制代码
如图所示,docker安装成功:
- 查看docker版本\
docker -v
复制代码
安装Docker-compose
- Docker Compose 存放在Git Hub,不太稳定。所以我采用国内源来安装docker-compose(官网最低要求docker-compose不能低于1.28.0,安装时注意版本)
你可以通过修改URL中的版本,可以自定义您的需要的版本。
curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
复制代码
- 查看docker-compose的版本
如图所示安装成功:
docker-compose --version
复制代码
配置阿里云镜像加速
因为镜像都在国外,所以我们配置阿里云容器镜像加速服务
阿里云镜像服务地址:cr.console.aliyun.com/cn-beijing/…
- 选择镜像工具-镜像加速
按照文档说的敲就行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://********.mirror.aliyuncs.com"] #注意要替换成自己的加速地址
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
复制代码
配置安全组
因为sentry对外访问的是9000端口,ECS默认没有开放9000端口,所以我们要在安全组打开9000端口,以便能够访问9000
- 选择云服务器,进入管理页面
- 选择安全组-更改安全组
- 新建安全组
- 选择创建安全组
- 名称-sentry
描述:开放sentry服务9000端口
- 配置规则
- 入方向规则-添加规则
开放端口:9000
描述:sentry访问端口
源地址注意:0.0.0.0/0代表的是任何人任何地址都能访问的到,这里仅为测试,生产环境不能这样做
能够看到我们添加了一条安全组
任何来源IP都能访问此ECS的9000端口
- 再进入到ECS管理页面
- 选择安全组-更改安全组
- 点击下三角,勾选sentry安全组
如图:确定
安装sentry
- 先安装git
yum -y install git
复制代码
- 获取 onpremise
获取的版本是21.11.0
git clone https://github.com/getsentry/onpremise.git
复制代码
- 执行安装脚本
进入 onpremise 目录执行脚本
这个过程稍微有点慢,安装过程中会提示你创建管理者(admin/owner)的账号和密码,请注意留意,按照提示输入即可
这里我为了测试 Email:[email protected],正式环境应该填写自己的邮箱
这一步骤是非必须的,启动时会有一个配置的页面,到时候再根据提示填写也是可以的
配置文件为sentry/config.yml
,需要设置邮件、域名等,具体配置可以参见官方文档。
cd onpremise
./install.sh
复制代码
- 看到这一步就算安装完成(根据网速不同,安装时间略有不同,请大家耐心等待,不要终止安装,否则会起不来服务)
- 启动服务
docker-compose up -d
复制代码
- 看一下docker容器是否启动
docker ps -a
复制代码
如图都是UP状态
- 打开控制台-弹性云服务器
能看到我们的公网IP:121.37.71.117
- 浏览器访问:http://121.37.71.117:9000/
输入账号密码登录,就是安装过程中你输入的邮箱和密码
- 配置一些邮箱信息 ,我这里为了测试就略过了
- 继续下一步
11.看到sentry的页面
至此,sentry部署安装完成,接下来我们Flask框架接入sentry
Python Flask接入Sentry
- 选择Project-Create Project 创建项目
- 选择Flask 平台,注意一定要选中Flask图标
输入项目名字flask-new
点击Creat Project
- 接下来就会看到senty教你如何在你项目中接入,接下来我们就按照官方文档接入Flask框架
- 用Pycharm创建一个flask项目
选择Flask框架-输入项目名-选择环境变量
- 在终端中安装sentry sdk
pip3 install --upgrade 'sentry-sdk[flask]'
复制代码
- 在
app.py
中写入如下内容:注意dsn要替换成自己sentry服务器上的
import sentry_sdk
from flask import Flask
from sentry_sdk.integrations.flask import FlaskIntegration
sentry_sdk.init(
dsn="http://[email protected]:9000/5", #要替换成自己sentry服务器的dns
integrations=[FlaskIntegration()],
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for performance monitoring.
# We recommend adjusting this value in production.
traces_sample_rate=1.0
)
app = Flask(__name__)
复制代码
如图:
6.模拟一个报错:
1/0会引发ZeroDivisionError错误
@app.route('debug-sentry')
def trigger_error():
division_by_zero=1/0
复制代码
如图:
浏览器访问:http://127.0.0.1:5000/debug-sentry
能看到报错
看Pycharm输出也能看到报错:
- 浏览器打开sentry页面,选择Project,点击自己刚创建的项目
flask-new
- 点击
View All Issues
- 能看到我们的报错和Pycharm输出一样
有不足之处欢迎指正,如遇其他报错,欢迎一起探讨
作者原创不易,转载请联系