Sentry部署及使用

7,080 阅读6分钟

简介

线上监控作为前端基建最重要的组成部分之一,值得重视。目前线上监控的方案也有很多,比如:

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。这配置服务可以运行起来。

image.png

本地安装docker 和docker-compose,我本地以前已经安装好了,这个步骤省略。 下载代码到工程目录 git@github.com:getsentry/self-hosted.git 查看git仓库当前最新版本是22.3.0

这里查看版本的时候我觉得docker和docker-compose 和官方要求差别不大,就继续安装了,后来发现版本还是低了,还是得按照官方要求的版本来:

先查看一下当前的docker容器,等安装完成之后对比一下:

image.png

安装问题记录

开始由于习惯使用sh,所以执行sh install.sh时,发现报错:

./install/_lib.sh: line 9: syntax error near unexpected token `>'

github有记录这个问题,暂时不支持sh

image.png

我们进入到仓库目录后,执行./install.sh,发现还是报错:

./install/_lib.sh: line 22: realpath: command not found

我们通过升级coreutils就可以了

brew install coreutils

image.png

执行时,发现我本地的docker-compose还是低了,需要升级。

升级完docker和docker-compose之后:

image.png

再次运行install命令:

image.png

接下来就是漫长的等待,期间可能会让创建管理员账号及密码。

image.png 安装完成

查看一些安装了哪些容器:

image.png

运行启动命令:

docker compose up -d
## 如果想多进程开启服务可以通过指定worker数量实现负载均衡 docker-compose up -d --scale worker=2
## 停止服务是 docker-compose down

这个过程也比较慢,会初始化很多容器。

image.png

如果你安装了可是换管理Docker DeskTop会更加直观的管理docker容器

image.png

访问http://127.0.0.1:9000

image.png

服务器环境搭建

我尝试部署在我的阿里云服务器上,但是我的服务器配置太低,所以只能体验一下安装流程:

服务器安装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

image.png

#启动docker
systemctl start docker

docker -v查看版本号: image.png

如果以后想卸载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

image.png

# 想卸载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 

image.png image.png 内存不足,哈哈,我的服务器配置不够,但是安装流程是这样的,如果配置够,继续走下去等下载完,运行docker compose up -d 就可以了,然后修改相关配置。

使用Sentry

登录

访问http://127.0.0.1:9000

image.png

用之前创建的账号密码登录,会自动跳转到http://127.0.0.1:9000/organizations/sentry/issues/

image.png

先忽略后面可以再设置,点击继续跳转到首页:http://127.0.0.1:9000/organizations/sentry/issues/

image.png

常用功能设置

语言及时间设置

点击左上角头像下的User settings

image.png

选择简体中文:

image.png

时间设置选择上海:

image.png

刷新页面,语言及时间设置成功:

image.png

常规设置

修改组织名称,重新上传头像:

image.png

新建组织

image.png

创建项目

新建一个react项目吧: 在 “设置 => 组织 => 项目” 中点击创建项目

image.png

根据不同端。我们选择不同的应用类型,这里我们先选一个浏览器,react类型的项目:

image.png

命名项目的名称、所属团队、点击创建项目

image.png

点击按钮后会进入接入指南页面:

image.png

我们复制一下DSN链接

http://436ea8eedd264c7eb85ec3d609e5e5e1@127.0.0.1:9000/2

设置预警规则

在项目中找到刚才创建的项目,点击右上角的“Create Alert”按钮

image.png

你可以为每个项目创建各种警报规则。我们可以看到规则可以针对不同的问题类型,比如问题数目、会话、新能等等

image.png

我们点击问题数量,设置规则,我们可以看到规则的近七天数据图。以及条件的各种选项(环境、数量条件,这里为了测试方便设置的阈值非常低)

image.png

这里我们还可以添加action,比如发送邮件,我们定于规则名称,选择团队然后保存规则。

image.png

保存后就可以在预警里看到规则监控的数据大盘:

image.png

前端接入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,会自动上传报错
  

运行项目,我们可以看到报错上传

image.png

在Sentry问题面板中也可以看到相关报错捕获记录,其中

image.png

Sentry部分文档及运行流程

高级概述

连线代表服务依赖。

test2_.png

事件管道

如何保存事件。连线表示通过系统的数据流。

由于布局限制,该图非常简化。此图中缺少:

  • Relay 如何获取项目配置。 答案: 来自 sentry-web;
  • Relay 如何缓存项目配置。答:在内存中,在 Redis 中;
  • Relay 如何计算事件并跟踪配额。答案:更多Redis;
  • 如何触发警报。答案:postprocess-event,一个负责警报的 Celery 任务(由 Sentry 中的 Kafka 消费者从事件流中读取);
  • ...

test_3.png

nginx

进行服务间的请求转发

relay:

  • web 上报的数据先到 relay
  • relay 直接返回响应状态
  • 然后在后台任务中继续处理数据
  • 解析事件、格式调整、启用过滤规则等
  • 数据写入 kafka

kafka

数据响应,建立服务间的长连接

事件提取管道:

test_.png

后续

本文介绍了sentry在MacOS和Linux上的通过docker-compose的方式安装部署和基础功能使用(基础设置、新建组、项目、前端接入等);还有其他功能由于篇幅有点长没有介绍,比如邮件提醒、单点登录、gitlab\github集成、sourcemap等等功能。大家可以参考官方文档一个功能一个功能接入使用。

参考博文