从零搭建Sentry

前言

Sentry 为一套开源的应用监控和错误追踪的解决方案。这套解决方案由对应各种语言的 SDK 和一套庞大的数据后台服务组成。应用需要通过与之绑定的 token 接入 Sentry SDK 完成数据上报的配置。通过 Sentry SDK 的配置,还可以上报错误关联的版本信息、发布环境。同时 Sentry SDK 会自动捕捉异常发生前的相关操作,便于后续异常追踪。异常数据上报到数据服务之后,会通过过滤、关键信息提取、归纳展示在数据后台的 Web 界面中。
Sentry 的管理后台是基于 Python Django 开发的。这个管理后台由背后的 Postgres 数据库(管理后台默认的数据库,后续会以 Postgres 代指管理后台数据库并进行分享)、ClickHouse(存数据特征的数据库)、relay、kafka、redis 等一些基础服务或由 Sentry 官方维护的总共 23 个服务支撑运行。可见的是,如果独立的部署和维护这 23 个服务将是异常复杂和困难的。幸运的是,官方提供了基于 docker 镜像的一键部署实现 getsentry/onpremise。
这种部署方式依赖于 Docker 和 Compose

Docker 是可以用来构建和容器化应用的开源容器化技术。
Compose 是用于配置和运行多 Docker 应用的工具,可以通过一个配置文件配置应用的所有服务,并一键创建和运行这些服务。

准备工作

环境准备

硬件/系统条件

CentOS 7.8
4 CPU Cores
8 GB RAM
20 GB Free Disk Space

软件条件

git 1.8.0.0+
Docker 19.03.6+ (这里的版本是指 Docker Engine Server version)
Compose 1.28.0+
python 3

硬件环境检查

检查系统版本

lsb_release -a

//...
Distributor ID:	CentOS
Description:	CentOS Linux release 7.8.2003 (Core)
Release:	7.8.2003
//...
检查CPU

lscpu

//...
CPU(s):                8
On-line CPU(s) list:   0-7
//...
检查内存

free -m

              total        used        free        shared  	buff/cache   available
Mem:          15307        2819       11433          769          1055       11451
Swap:          7679           0        7679
检查磁盘空间

df -hl

Filesystem                   Size  Used Avail Use% Mounted on
//...
/dev/mapper/centos-root       50G  7.9G   43G  16% /
/dev/sda1                   1014M  140M  875M  14% /boot
/dev/mapper/centos-home       42G   33M   42G   1% /home
/dev/mapper/vg_data-lv_data  500G  2.6G  498G   1% /data
//...

软件安装教程参考

git

起步 - 安装 Git

Docker

Docker 版本升级
Docker-----版本选择

Compose

Docker-Compose安装、卸载、使用详解
docker-compose教程(安装,使用, 快速入门)
Docker Compose

Python3

Linux下安装Python3,超详细完整教程

软件环境检查

git version

git version 1.8.3.1

docker version

Client: Docker Engine - Community
 Version:           20.10.21
 API version:       1.40
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:04:24 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          19.03.9
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       9d988398e7
  Built:            Fri May 15 00:24:05 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.11
  GitCommit:        d986545181c905378b0f90faa9c5eae3cbfa3755
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker-compose version

docker-compose version 1.29.2, build 5becea4c

python3 --version

Python 3.11.0

快速部署Sentry

克隆项目
# 可以尝试使用镜像地址:https://github.91chi.fun//https://github.com/getsentry/self-hosted.git
git clone https://github.com/getsentry/onpremise.git
进入项目
cd self-hosted/
切换版本
git checkout 22.11.0
安装项目

在后续部署的过程中,需要拉取大量镜像,建议修改docker镜像源,修改文件位置为/etc/docker/daemon.json。相关资料可以参考:Docker 镜像加速

./install.sh 

提示内容:

▶ Parsing command line ...

▶ Detecting Docker platform
Detected Docker platform is linux/amd64

▶ Initializing Docker Compose ...

▶ Setting up error handling ...

Hey, so ... we would love to automatically find out about issues with your
Sentry instance so that we can improve the product. Turns out there is an app
for that, called Sentry. Would you be willing to let us automatically send data
about your instance upstream to Sentry for development and debugging purposes?

  y / yes / 1
  n / no / 0

(Btw, we send this to our own self-hosted Sentry instance, not to Sentry SaaS,
so that we can be in this together.)

Here's the info we may collect:

  - OS username
  - IP address
  - install log
  - runtime errors
  - performance data

Thirty (30) day retention. No marketing. Privacy policy at sentry.io/privacy.

y or n? 

大致内容讲是否允许Sentry收集运行的相关信息,允许是 输入 y ,不允许输入 n
输入之后等待相关程序的安装,安装时间较长,笔者第一次安装的时间接近40分钟。

如果中间安装失败,可以重新执行命令,笔者因为网络问题重试了3次。

启动项目
docker-compose up -d 

Sentry默认绑定9000端口,我们可以通过 http://127.0.0.1:9000/ 登录页面

注意:Sentry不支持子路径配置。例如想要实现 http://127.0.0.1/sentry 指向 http://127.0.0.1:9000/ ,这是不行的。

详情查看:

  • https://github.com/getsentry/sentry/issues/34760
  • https://github.com/getsentry/develop/pull/584/files

调整配置

调整日志配置

修改日志存储位置
# 在容量最大的目录下创建文件夹
mkdir -p /data/var/sentry/lib/
# 停止 docker 服务
systemctl stop docker
# 将 docker 的默认数据复制到新路径下,删除旧数据并创建软连接,即使得存储实际占用磁盘为新路径
/bin/cp -a /var/lib/docker /data/sentry/var/lib/docker && rm -rf /var/lib/docker &&  ln -s /data/sentry/var/lib/docker /var/lib/docker
# 重启 docker 服务
systemctl start docker
修改日志存储时间

在仓库的位置下面有个.env文件,使用vim打开,修改SENTRY_EVENT_RETENTION_DAYS的值为30,修改后的配置为:

COMPOSE_PROJECT_NAME=sentry-self-hosted
SENTRY_EVENT_RETENTION_DAYS=30
# You can either use a port number or an IP:PORT combo for SENTRY_BIND
# See https://docs.docker.com/compose/compose-file/#ports for more
SENTRY_BIND=9000
# Set SENTRY_MAIL_HOST to a valid FQDN (host/domain name) to be able to send emails!
# SENTRY_MAIL_HOST=example.com
SENTRY_IMAGE=getsentry/sentry:22.11.0
SNUBA_IMAGE=getsentry/snuba:22.11.0
RELAY_IMAGE=getsentry/relay:22.11.0
SYMBOLICATOR_IMAGE=getsentry/symbolicator:0.5.1
WAL2JSON_VERSION=latest
HEALTHCHECK_INTERVAL=30s
HEALTHCHECK_TIMEOUT=60s
HEALTHCHECK_RETRIES=10

按ESC退出之后,输入:wq保存,然后重启项目。

systemctl start docker

创建超级用户

使用[email protected]进行账号创建:

docker-compose run --rm web createuser --email [email protected] --password admin --superuser

账号:[email protected]

密码:admin

登录配置

第一次登录之后,会出现配置页面

从零搭建Sentry_第1张图片

  • Root URL:异常上报接口的公网根地址(在做网络解析配置时,后台服务可以配置到内网外网两个域名,只将上报接口的解析规则 /api/[id]/store/ 配置到公网环境,保证数据不会泄密)。
  • Admin Email:在 install.sh 阶段创建的管理员账号。
  • Outbound email:这部分内容为邮件服务配置,可以先不配置。

其他配置

修改语言为简体中文

从零搭建Sentry_第2张图片

页面刷新之后,语言会变为中文。

调整时区为上海

从零搭建Sentry_第3张图片

参考资料

Docker 版本升级
Docker-----版本选择
docker-compose教程(安装,使用, 快速入门
Docker Compose
Docker-Compose安装、卸载、使用详解
Linux下安装Python3,超详细完整教程
【得物技术】前端项目使用Sentry错误监控实践
sentry 私有化部署
前端异常监控 Sentry 的私有化部署和使用
Self-Hosted Sentry 22.11.0
Self-Hosted Sentry

你可能感兴趣的:(前端监控,sentry,前端异常监控)