sentry性能监控平台搭建

2,667 阅读5分钟

sentry的作用是什么

sentry是一个开源的监控系统,能支持服务端与客户端的监控,还有个强大的后台错误分析、报警平台。
它可以实时掌握项目的健康状态,PV/UV、报错、用户分布等。
精细化分析每个报错问题,支持sourceMap源码定位。
深入分析每个用户,记录用户的所有行为。
分析页面和接口性能,加载耗时,成功率。

搭建sentry

搭建sentry有两种方式,可以结合项目情况选择合适的方式

方式一

登录sentry官网 注册账号后接入sdk即可使用

方式二sentry私有化部署

官方提供了基于 docker 镜像的一键部署实现 getsentry/onpremise
需要安装对应版本,否则安装会报错

  • Docker 19.03.6+
  • Docker-Compose 1.28.0+
  • 4 CPU Cores
  • 8 GB RAM
  • 20 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了

image.png

设置语言和时区

点击头像User settings - Account Details的相应菜单设置,刷新后生效

image.png

前端项目接入sentry

进入sentry创建一个项目,创建完成之后找到 依次找到以下信息并完成以下配置等会会用到

image.png image.png image.png

image.png

image.png

image.png

Release控制

在开发过程中我们希望不监控本地环境下的异常,测试环境的和生产环境的异常分离,所以就需要Release来进行“异常”的版本控制。

创建Release 为指定项目创建release

sentry-cli releases -o 组织 -p 项目 new v1.0.0

查看已经创建的release版本 image.png 删除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中看到自己上传的文件

image.png

查看错误信息

配置好以上步骤那么就可以在项目中监控错误信息了,可以具体定位到某个文件中的某一行,还可以查看到用户的轨迹 image.png

如何修改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了