sentry的作用是什么
sentry是一个开源的监控系统,能支持服务端与客户端的监控,还有个强大的后台错误分析、报警平台。
它可以实时掌握项目的健康状态,PV/UV、报错、用户分布等。
精细化分析每个报错问题,支持sourceMap源码定位。
深入分析每个用户,记录用户的所有行为。
分析页面和接口性能,加载耗时,成功率。
搭建sentry
搭建sentry有两种方式,可以结合项目情况选择合适的方式
方式一
登录sentry官网 注册账号后接入sdk即可使用
方式二sentry私有化部署
官方提供了基于 docker 镜像的一键部署实现 getsentry/onpremise
需要安装对应版本,否则安装会报错
Docker 19.03.6+Docker-Compose 1.28.0+4 CPU Cores8 GB RAM20 GB Free Disk Space
一键部署
git clone https://github.com/getsentry/onpremise
进入onpremise文件下,执行./install.sh脚本文件
cd onpremise
./install.sh
此脚本大致工作内容为以下几个步骤
- 环境检查
- 生成服务配置
docker volume数据卷创建(可理解为docker运行的应用的数据存储路径的创建)- 拉取和升级基础镜像
- 构建镜像
- 服务初始化
- 设置管理员账号(如果跳过此步,可手动创建)
脚本执行完成会提示你运行docker-compose up -d 启动服务,执行此命令
docker compose up -d
通过localhost:9000 可以访问sentry了
设置语言和时区
点击头像User settings - Account Details的相应菜单设置,刷新后生效
前端项目接入sentry
进入sentry创建一个项目,创建完成之后找到 依次找到以下信息并完成以下配置等会会用到
Release控制
在开发过程中我们希望不监控本地环境下的异常,测试环境的和生产环境的异常分离,所以就需要Release来进行“异常”的版本控制。
创建Release 为指定项目创建release
sentry-cli releases -o 组织 -p 项目 new v1.0.0
查看已经创建的release版本
删除Release
删除指定项目release
sentry-cli releases -o 组织 -p 项目 delete v1.0.0
在我们的前端项目中安装sentry依赖包
yarn add @sentry/browser
yarn add @sentry/react @sentry/tracing
在项目的入口文件中初始化sentry配置
Sentry.init({
// Sentry 项目的 dsn,可从项目设置中获取
dsn: 'http://xxxxxxx@xxx.xxx.xxx.xxx:9000/4',
integrations: [new BrowserTracing()],
// 指定release版本
release: 'v1.0.0',
tracesSampleRate: 1.0
})
在前端项目中创建.sentryclirc文件
url:sentry部署的地址org:控制台查看组织名称project:项目名称token:生成token需要勾选project:write项目写入权限
[auth]
token=填入控制台创建的TOKEN
[defaults]
url=http://xxx.xxx.xxx.xxx:9000/
org=sentry
project=web-test
上传source-map
在项目的webpack中配置source-map,这样可以看到很清晰的报错位置
安装@sentry/webpack-plugin插件
yarn add @sentry/webpack-plugin
在webpack.config.js中使用SentryWebpackPlugin插件
export default {
// ...
devtool: 'source-map',
plugins: [
new SentryWebpackPlugin({
//记得版本号和sentry初始化的版本号保持一致
release:"v1.0.0",
include: ".",
ignoreFile: ".sentrycliignore",
ignore: ["node_modules", "webpack.config.js"],
configFile: "sentry.properties",
urlPrefix:"~/static/js"
}),
// ...
}
打包构建
npm run build
构建完成之后就可以在sentry中看到自己上传的文件
查看错误信息
配置好以上步骤那么就可以在项目中监控错误信息了,可以具体定位到某个文件中的某一行,还可以查看到用户的轨迹
如何修改sentry默认端口
sentry默认端口为9000,倘若我们的9000端口被其他进程占用,那么我们需要改变sentry的访问端口
旧版的onpremise(也就是这个self-host项目)是直接在docker-compose.yml里改的,不过现在不推荐修改这个文件了(这个compose文件略微复杂),现在可以直接修改.env文件里的SENTRY_BIND环境变量来修改默认端口
SENTRY_BIND=9001
修改之后重新启动服务,就可以访问localhost:9001啦
docker compose down
docker compose build
docker compose up -d
sentry设置通过https访问
部署sentry之后发现我们访问的地址和DSN地址都是http,如果我们要通过https访问那么就需要给sentry配置ssl
首先修改onpremise/sentry/config.yml system.url-prefix 配置,将它设置为我们访问sentry的域名
system.url-prefix: 'https://web:9002'
然后修改onpremise/sentry/sentry.conf.py 文件下的 SSL/TLS 配置,将原来注释的部分全部打开。
###########
# SSL/TLS #
###########
# If you're using a reverse SSL proxy, you should enable the X-Forwarded-Proto
# header and enable the settings below
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
USE_X_FORWARDED_HOST = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
# End of SSL/TLS settings
修改之后也要重启服务
docker compose down
docker compose build
docker compose up -d
最后我们还需要搭建一个nginx来转发https协议的内容,其中需要生成ssl证书,可以用付费的,也可以用自签名证书,自签名证书一般是不被第三方信任,大多数用于内部使用及测试使用。
生成ssl证书,并放到nginx共享文件夹下
openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
nginx配置
server {
# 配置监听端口
listen 9002 ssl http2 default_server;
# 域名
server_name localhost;
# nginx 默认根目录
root /usr/share/nginx/html;
# 加载其他配置文件,这里是 nginx 默认配置,可以不需要
# include /etc/nginx/default.d/*.conf;
# ssl 设置
# ssl 证书地址
ssl_certificate /etc/nginx/sslcert/server.crt;
# ssl 密钥地址
ssl_certificate_key /etc/nginx/sslcert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 200M;
client_body_buffer_size 1024k;
# 这一段是最重要的,将域名代理到本机 http://localhost:9000 服务上,对应的就是 docker 内的 sentry 服务
location / {
proxy_pass http://localhost:9001;
}
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 9;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/x-shockwave-flash image/png image/x-icon image/gif image/jpeg;
gzip_buffers 16 8k;
}
做完这些重启一下nginx,就可以通过https://localhost:9002 访问sentry了