Sentry 在百瓶的落地实践

公众号名片 作者名片

前言

本文不仅仅面向 Flutter 开发者,而且还面 Web、React、Vue、Go、iOS 等其他开发者。笔者主要从方案选型 & 落地实践两个大的方面进行阐述。提供一些常用的 Sentry 实践,希望能帮助开发者更好的使用 Sentry。

方案选型

Sentry 是什么

Sentry 是一个开源的应用程序监控平台, 它可以使用文件名和行号上报崩溃,监控您的完整堆栈信息,让您停止猜测和挖掘日志,可以帮助您跟踪、修复所有主要语言和框架中的错误。

优点

  • 精美的 UI 界面,产品体验好,功能完善;
  • 支持几乎所有的主流开发语言的 SDK(JavaScript、Node.js、Python、PHP、Ruby、Java、React、Go、Android、iOS、Flutter 等 101 中平台),接入比较简单;
  • 提供完整的错误详情;
  • 支持统一的错误聚合分析;
  • 支持团队成员管理;
  • 可以及时更新错误日志,支持邮箱报警设置 & WebHook;
  • 支持多种环境设置(development、testing、staging 或 production);
  • 主动邮件警告;
  • 开源有免费版,可以部署自己的服务器、安全。

platforms

events

缺点

上面说了一堆 Sentry 的优点,当然它也有一些缺点,比如:

  • 部署依赖繁多,需要利用官方提供的 GitHub 仓库,基于 Docker & Docker Compose 可以实现一键部署,但是 Docker 容器过多;
  • 需要自己保障高可用。

自己部署

在 Sentry 的介绍中已经讲过了它的优点和缺点,那我们先来看下如何快速自己部署吧~

环境要求:

  • Docker 19.03.6+
  • Compose 1.28.0+
  • 4 CPU Cores
  • 8 GB RAM
  • 20 GB Free Disk Space

安装步骤:

  1. 首先需要到官网下载 Docker ,这个大家可以自行 Google or 百度一下;
  2. 由于本示例是在 Mac 下进行演示,Docker Desktop for Mac 包括 Compose 以及其他 Docker 应用程序,因此 Mac 用户无需单独安装 Compose;
  3. 下载安装 Sentry 安装文件;

sentry_release

下面就可以进行愉快地安装了,但是在进入仓库根目录后,执行 ./install.sh,发现报错,如下所示:

install_error

当然遇到问题不要慌,我们通过升级 coreutils 后,问题便可以迎刃而解。

brew install coreutils
复制代码

当再次执行 ./install.sh,然后就是漫长的等待了。

install

然而,我们发现 Fetching and updating Docker images 等了几个世纪也没有反应,实在是太慢了。当然,山人自有妙计,我们只需要把 Docker Engine 配置镜像就好了。接下来,我们打开 阿里云企业应用中心 ,在下面的镜像搜索框中搜索 Docker,然后会看到如下界面:

ali_yun

按照阿里云镜像加速进行操作,如下图:

docker_config

然后我们就可以愉快的进行接下来的操作了,我们再次在命令行里执行 ./install.sh, 一顿操作猛如虎,接下来就会提示让我们创建账号,如下图所示:

install_retry

在命令行里输入 docker-compose up -d 命令,接下来在浏览器输入 127.0.0.1:9000,就会出现如下登录界面:

login

输入刚才我们设置的账号密码登录,就大功告成了!

welcome

付费

如果选择付费版本,我们有 Developer、Business、Team 和 Enterprise 几个版本可供选择,那么这两个版本有什么区别呢?当然 Developer 是免费用,不过功能相对较少,我们团队当前选择的是 Team,差不多够用了,当然 Business 和 Enterprise 有更高级的功能,大家可以自行去官网研究下,在这里就不再赘述了。

fee

落地实践

上面已经讲述了方案选型,下面我们就正式开始进入落地实践部分吧~

注册

使用 Sentry 首先得注册,注册当然是免费的,相信这对大家并不陌生,就不再详细介绍了。

项目集成

  1. 选择 Create Project 图标来创建一个新的项目;

practice_step_one 2. Sentry 有各种各样的开发平台支持,在本文中我们只针对 Flutter 平台,选择默认报警设置,并且给项目起一个名字 test; practice_step_two 3. 为了向 Sentry 报告错误,我们需要一个 DSN(数据源名称),它将用 Sentry 服务器唯一的标识我们的应用程序。因此在 Sentry 上创建项目后,我们讲从上面的步骤中创建的应用程序中复制 DSN,切记不要泄露它; practice_step_three 4. Flutter 项目中使用 Sentry 我们还需要从 pub 中找到 sentry_flutter 接入到我们的项目中。 practice_step_four

至此我们已经成功部署并且把 Sentry 接入到了我们的 Flutter 项目中。

报警机制

刚才创建项目时,我们用的是默认设置,当然我们也可以设置预警规则来进行完善上报机制,下面我们就一起来看一下如何设置预警规则:

依次找到 Settings -> 你的项目组 -> 项目 -> Alert Settings -> View Alert Rules -> Create Alert -> Set Conditions,如下如所示:

alert_setting_one alert_setting_two alert_setting_three

举个例子:

下面我们以一个小时内,事件级别为 Warn 以上并且在一个小时内连续触发 50 次为例,设置邮件通知团队所有成员为例来进行设置。当然我们也可以设置其他条件。

alert_setting_four

然后我们便可以在刚才设置的报警规则看到详细数据了。

alert_setting_five

如果只设置这些报警规则进行邮件通知,在众多的邮件中,我们很有可能没能及时看到,这些 Sentry 都为我们考虑到了,我们也可以设置 WebHooks 进行企业微信等通知等。

webhooks

我们只需要记住上图中的 Callback URls 就可以自己定义 WebHooks 进行通知了。

查询上报

当项目出现异常,我们可以点击 左侧 Issues,然后根据条件来进行筛选,比如:根据环境、日期、问题类型等筛选我们想要的结果。

issues

当我们选择某一条 issue 后,点击后可以查看详细信息,如下:

  • issue 发生次数
  • 影响用户数
  • 环境信息
  • 额外信息(App 版本号,操作系统、SDK 版本等),这些需要在初始化 SDK 时额外配置

issues_detail

配额管理

事件和配额在 Sentry 中是相互关联的,当我们订阅 Sentry 时,我们需要为我们跟踪的事件的数量进行付费。这些事件都有一定的配额,当 Sentry 接受一个事件时,它就会计入该类型的事件的配额当中。

比如说,我们选择了如下图所示的版本,每个月可以接收 Errors(错误)为 5K 条,Transactions(事务)为 10W 条,Attachments(附件)为 1GB。当我们当月使用完后,就不会再接收到新的事件。那这个时候我们该怎么办呢?

charge

1. SDK 配置采样率

SDK 配置允许事件或过滤掉事件,要防止某些事务被报告给 Sentry,我们可以使用 tracesSampler 配置选项,它允许我们提供一个函数来评估当前事务,如果不是我们想要的,则将其丢弃。

sample

2. 删除错误并丢弃

如果我们选择删除并丢弃一个问题,那么未来相同的错误事件将不会计入配额。我们只需要找到一个 issue ,然后点击 ... 然后选择 delete & discard future events 就可以了,很遗憾的是,这个操作需要购买 Business Plan 或者更高版本才可以。

delete_step_one delete_step_two

3. 入站过滤器配置

我们可以在入站过滤器配置以下规则:

  • 浏览器扩展错误
  • 本地主机事件
  • 已知的旧浏览器错误
  • 已知的网络爬虫
  • 错误消息类型过滤
  • 特定错误事件过滤
  • 特定的 IP
  • 发布版本过滤

我们可以到 Project > Settings > Inbound Filters 下进行设置,但是,发布版本、错误消息类型、特定错误事件过滤也是需要 购买 Business Plan 或者更高版本才可以使用。

4. 购买配额

当然,也可以购买新的配额继续使用。相关的费用,大家可以自行查看一下官网收费标准。

最后

通过上述对 Sentry 的介绍以及实践,想必大家已经对 Sentry 有了大致的了解。后续笔者会根据 Sentry 在百瓶 APP 生产过程中上报的一些异常进行分析(自我忏悔)一下。

参考文献

docs.docker.com/compose/ins…

develop.sentry.dev/

更多精彩请关注我们的公众号「百瓶技术」,有不定期福利呦!

猜你喜欢

转载自juejin.im/post/7106043598235566110