简介
线上监控作为前端基建最重要的组成部分之一,值得重视。目前线上监控的方案也有很多,比如:
Sentry的优势:
- 免费;
- 开源;
- 容器化部署;
- 简单易上手,开发、维护、接入成本低;
- 功能强大(异常报错收集、日志主动上传、邮件提醒、性能监控、SourceMap上传协助问题定位、可集成github/gitlab等、支持单点登录、管理端报表齐全);
- 社区活跃,生态好;
本文带你一起看看Mac和Linux如何部署Sentry,以及Sentry的使用。
注意:最新官方版 22.3.0,截止到2022年04月06日
环境要求
- Docker 19.03.6+
- Compose 1.28.0+
- 4 CPU Cores
- 8 GB RAM
- 20 GB Free Disk Space
相关地址
本地部署(MacOS)
我的本地是MacOS,双核,16G。这配置服务可以运行起来。
本地安装docker 和docker-compose,我本地以前已经安装好了,这个步骤省略。 下载代码到工程目录 git@github.com:getsentry/self-hosted.git 查看git仓库当前最新版本是22.3.0
这里查看版本的时候我觉得docker和docker-compose 和官方要求差别不大,就继续安装了,后来发现版本还是低了,还是得按照官方要求的版本来:
先查看一下当前的docker容器,等安装完成之后对比一下:
安装问题记录
开始由于习惯使用sh,所以执行sh install.sh时,发现报错:
./install/_lib.sh: line 9: syntax error near unexpected token `>'
github有记录这个问题,暂时不支持sh
我们进入到仓库目录后,执行./install.sh,发现还是报错:
./install/_lib.sh: line 22: realpath: command not found
我们通过升级coreutils就可以了
brew install coreutils
执行时,发现我本地的docker-compose还是低了,需要升级。
升级完docker和docker-compose之后:
再次运行install命令:
接下来就是漫长的等待,期间可能会让创建管理员账号及密码。
安装完成
查看一些安装了哪些容器:
运行启动命令:
docker compose up -d
## 如果想多进程开启服务可以通过指定worker数量实现负载均衡 docker-compose up -d --scale worker=2
## 停止服务是 docker-compose down
这个过程也比较慢,会初始化很多容器。
如果你安装了可是换管理Docker DeskTop会更加直观的管理docker容器
服务器环境搭建
我尝试部署在我的阿里云服务器上,但是我的服务器配置太低,所以只能体验一下安装流程:
服务器安装docker
yum install -y yum-utils
#使用阿里云镜像安装docker
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache
# 安装社区版docker
yum install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
docker -v查看版本号:
如果以后想卸载docker的话:
# 以后想卸载docker直接运行
yum remove docker-ce docker-ce-cli containerd.io
# 清空工作路径
sudo rm -rf /var/lib/docker
服务器安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
安装完成之后设置文件权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本号
docker-compose -v
# 想卸载docker-compose的话直接运行
rm /usr/local/bin/docker-compose
下载sentry仓库,运行install.sh
在自己的工作空间目录拉取git仓库
# 下载仓库,运行sh文件
git clone git@github.com:getsentry/self-hosted.git
cd self-hosted/
./install.sh
内存不足,哈哈,我的服务器配置不够,但是安装流程是这样的,如果配置够,继续走下去等下载完,运行docker compose up -d 就可以了,然后修改相关配置。
使用Sentry
登录
用之前创建的账号密码登录,会自动跳转到http://127.0.0.1:9000/organizations/sentry/issues/
先忽略后面可以再设置,点击继续跳转到首页:http://127.0.0.1:9000/organizations/sentry/issues/
常用功能设置
语言及时间设置
点击左上角头像下的User settings
选择简体中文:
时间设置选择上海:
刷新页面,语言及时间设置成功:
常规设置
修改组织名称,重新上传头像:
新建组织
创建项目
新建一个react项目吧: 在 “设置 => 组织 => 项目” 中点击创建项目
根据不同端。我们选择不同的应用类型,这里我们先选一个浏览器,react类型的项目:
命名项目的名称、所属团队、点击创建项目
点击按钮后会进入接入指南页面:
我们复制一下DSN链接
http://436ea8eedd264c7eb85ec3d609e5e5e1@127.0.0.1:9000/2
设置预警规则
在项目中找到刚才创建的项目,点击右上角的“Create Alert”按钮
你可以为每个项目创建各种警报规则。我们可以看到规则可以针对不同的问题类型,比如问题数目、会话、新能等等
我们点击问题数量,设置规则,我们可以看到规则的近七天数据图。以及条件的各种选项(环境、数量条件,这里为了测试方便设置的阈值非常低)
这里我们还可以添加action,比如发送邮件,我们定于规则名称,选择团队然后保存规则。
保存后就可以在预警里看到规则监控的数据大盘:
前端接入SDK
react 接入
前端按照接入指南接入并启动项目 主要接入代码片段
// npm i @sentry/react @sentry/tracing
// index.js中
import * as Sentry from "@sentry/react";
import { BrowserTracing } from "@sentry/tracing";
Sentry.init({
dsn: "http://436ea8eedd264c7eb85ec3d609e5e5e1@127.0.0.1:9000/2",
integrations: [new BrowserTracing()],
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for performance monitoring.
// We recommend adjusting this value in production
tracesSampleRate: 1.0,
});
import * as Sentry from "@sentry/react";
try {
a=1;// 这是测试一个未定义的变量a
} catch (error) {
Sentry.captureException(error); // 手动上传报错
}
// <Button onClick={test12}>12313123</Button> // 这是测试未定义的方法test12,会自动上传报错
运行项目,我们可以看到报错上传
在Sentry问题面板中也可以看到相关报错捕获记录,其中
Sentry部分文档及运行流程
高级概述
连线代表服务依赖。
事件管道
如何保存事件。连线表示通过系统的数据流。
由于布局限制,该图非常简化。此图中缺少:
- Relay 如何获取项目配置。 答案: 来自 sentry-web;
- Relay 如何缓存项目配置。答:在内存中,在 Redis 中;
- Relay 如何计算事件并跟踪配额。答案:更多Redis;
- 如何触发警报。答案:postprocess-event,一个负责警报的 Celery 任务(由 Sentry 中的 Kafka 消费者从事件流中读取);
- ...
nginx
进行服务间的请求转发
relay:
- web 上报的数据先到 relay
- relay 直接返回响应状态
- 然后在后台任务中继续处理数据
- 解析事件、格式调整、启用过滤规则等
- 数据写入 kafka
kafka
数据响应,建立服务间的长连接
事件提取管道:
后续
本文介绍了sentry在MacOS和Linux上的通过docker-compose的方式安装部署和基础功能使用(基础设置、新建组、项目、前端接入等);还有其他功能由于篇幅有点长没有介绍,比如邮件提醒、单点登录、gitlab\github集成、sourcemap等等功能。大家可以参考官方文档一个功能一个功能接入使用。