CentOS安装sentry

news2024/12/27 13:32:03

Sentry介绍

Sentry 是一套开源的实时的异常收集、追踪、监控系统。这套解决方案由对应各种语言的 SDK 和一套庞大的数据后台服务组成,通过 Sentry SDK 的配置,还可以上报错误关联的版本信息、发布环境。同时 Sentry SDK 会自动捕捉异常发生前的相关操作,便于后续异常追踪。异常数据上报到数据服务之后,会通过过滤、关键信息提取、归纳展示在数据后台的 Web 界面中

● Github: https://github.com/getsentry/sentry

● 文档 Sentry Docs | Application Performance Monitoring & Error Tracking Software

支持如下语言

sentry功能架构

sentry核心架构

Sentry私有化部署

Sentry 的管理后台是基于 Python Django 开发的。这个管理后台由背后的 Postgres 数据库(管理后台默认的数据库)、ClickHouse(存数据特征的数据库)、relay、kafka、redis 等一些基础服务或由 Sentry 官方维护的总共 23 个服务支撑运行。可见的是,如果独立的部署和维护这 23 个服务将是异常复杂和困难的。幸运的是,官方提供了基于 docker 镜像的一键部署实现 getsentry/onpremise

sentry 本身是基于 Django 开发的,而且也依赖到其他的如 Postgresql、 Redis 等组件,所以一般有两种途径进行安装:通过 Docker 或用 Python 搭建

环境准备

● Docker 19.03.6+

● Docker-Compose 2.19.0+

● 4 CPU Cores

● 16 GB RAM

● 20 GB Free Disk Space

安装 Docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce-20.10.9 docker-ce-cli-20.10.9

启动docker

systemctl start docker
systemctl enable docker

安装 Docker-Compose

通过访问 https://github.com/docker/compose/releases/latest 得到最新的 docker-compose 版本(例如:1.23.2),然后执行一下命令安装 docker-compose

# 下载最新版本的 docker-compose 到 /usr/bin 目录下 

curl -L https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose  

# 给 docker-compose 授权 

chmod +x /usr/bin/docker-compose

查询docker-compose版本

docker-compose -v

部署Sentry

部署

yum -y install git
git clone https://github.com/getsentry/onpremise
cd onpremise/
./install.sh

选择n,继续安装,中间需要设置管理员帐号和密码,这里设置的帐号和密码要记住,后面登录需要用到。安装过程比较慢,要多等一会。

安装结束后,执行下面命令启动服务,启动也比较慢。

docker-compose up -d

▶ Setting up GeoIP integration ...

Setting up IP address geolocation ...

Installing (empty) IP address geolocation database ... done.

IP address geolocation is not configured for updates.

See https://develop.sentry.dev/self-hosted/geolocation/ for instructions.

Error setting up IP address geolocation.

启动成功后,访问9000端口,输入刚才设置的帐号和密码登录。

如果想停止sentry服务,执行:

docker-compose down

设置语言

登录之后,点开用户设置,可以设置语言为中文。

小结

如果不想自己部署,可以到sentry saas平台注册一个帐号,不过只能免费试用30天。

新建前端项目

前端项目集成sentry

Vue 项目引入 Sentry

Vue | Sentry for Vue

项目创建完成后,会跳转至Vue配置的说明文档,主要是Vue项目如何引入Sentry的一些内容,内容如下所示:

1.  安装依赖

   # Using yarn
   yarn add @sentry/vue @sentry/tracing
   
   # Using npm
   npm install --save @sentry/vue @sentry/tracing

2.  main.js里引入

   import Vue from "vue";
   import * as Sentry from "@sentry/vue";
   import { Integrations } from "@sentry/tracing";
   
   Sentry.init({
     Vue,
     dsn: "http://cd7f733c2e1e4641bdeb11ba0811d9aa@123.11.22.133:211/12",
     integrations: [new Integrations.BrowserTracing()],
   
     // Set tracesSampleRate to 1.0 to capture 100%
     // of transactions for performance monitoring.
     // We recommend adjusting this value in production
     tracesSampleRate: 1.0,
     // 上报console异常信息
     logErrors: true
   });

此时,只要项目正常部署在线上,打开项目,然后打开浏览器控制台,查看Network列表,会发现很多类似这样的请求,并没有报错,这就意味着当前已经正常上报到 Sentry 系统了,如下所示:

?sentry_key=cd7f733c2e1e4641bdeb11ba0811d9aa&sentry_version=7

异常报错示例

为了真实验证Sentry的功能,现以一个真实场景来演示,在项目中添加一个按钮,然后设置点击事件之后,触发打印console,sentryTest并未定义,所以会报错,代码如下所示:

<template>
 <div>
  <el-button @click="sentryClicked">Sentry测试</el-button>
 </div>
</template>
<script>
export default {
  methods:{
    sentryClicked(){
      console.log('sentryClicked: ', sentryTest);
    }
  }
}
</script>

在项目页面,我们可以看到,在浏览器控制台,确实有报错信息生成,如下图所示:

然后,我们到Sentry在线系统查看,确实有收到报错信息,如下图所示:

里面指明了报错原因是sentryTest is not defined,然后还提交了用户的IP、浏览器版本以及版本号、平台系统等等信息,便于分析异常错误。

上传 SourceMap 文件

通常Sentry在线系统上面的信息,也是可以排查解决BUG的,比如sentryTest is not defined,我们只需要在项目中搜索sentryTest就可以定位到代码报错的位置,但是如果是一些比较通用的,或者信息比较含糊的,是没办法精准定位代码位置的,这个时候,就可能有想法了,怎么让才能在Sentry在线系统看到,到底是执行到哪一步的时候,报错了呢?

这就是本节所需要实现功能,这就需要SourceMap文件,什么是SourceMap文件呢?

因为使用webpack打包之后,所有代码都压缩在一起,很难从中定位到异常代码的位置,而SourceMap就是源码,有了它,就可以定位到具体位置,所以需要提供SourceMap文件到Sentry在线系统。

首先,需要将vue项目下config/index.js里的productionSourceMap设置为true,然后运行npm run build命令,在生成的dist/static/js里就会发现很多后缀为.map的文件,如下图所示:

然后我们需要把.map文件上传到Sentry在线系统,具体步骤如下:

1.  登录Sentry在线系统,在终端输入如下:

   sentry-cli --url http://123.11.22.133:211/ login

然后会提示输入token,如下所示:

   dstweihao@weihao-mac-mini vue % sentry-cli --url http://123.11.22.133:211/ login
   This helps you signing in your sentry-cli with an authentication token.
   If you do not yet have a token ready we can bring up a browser for you
   to create a token now.
   
   Sentry server: 123.11.22.133
   Open browser now? [y/n] n
   Enter your token: 


token是在Sentry在线系统生成的,如下图所示:

这时,只要复制token到终端,就可以完成登录流程了,如下所示,就是成功登录了Sentry在线系统:

   Enter your token: 4e6488262fb849ef93c6217ac8bc8e9a2d635572eb584fa3b69b859e0edc5104
   Valid token for user test001
   
   Stored token in /Users/weihao/.sentryclirc
   dstweihao@weihao-mac-mini vue % 


上传SourceMap到Sentry在线系统

登录成功之后,就需要将 SourceMap 文件上传到 Sentry 在线系统,首先,需要在项目里新建一个.sentryclirc文件,里面的内容,如下所示:

   [defaults]
   url=http://123.11.22.133:211/
   org=dst
   project=test
   [auth]
   token=4e6488262fb849ef93c6217ac8bc8e9a2d635572eb584fa3b69b859e0edc5104

然后使用以下命令:

   sentry-cli releases -o dst -p test files test@1.0.0 upload-sourcemaps './dist/static/js/' --url-prefix '~/test/js' 


这里需要对该命令一些参数说明一下:

● dst:组织名

● test:项目名

● 1.0.0:版本号,需和 main.js 里的release: 'test@1.0.0'一致

● ./dist/static/js/:项目打包生成的dist里.map文件所在目录

● ~/test/js:如果部署在服务器上面,不是部署在主目录,而是在 test 文件夹下面,那就需要加上

在终端显示如下,就表示已经上传成功:

   dstweihao@weihao-mac-mini vue % sentry-cli releases -o dst -p test files 1.0.0 upload-sourcemaps './dist/static/js/' --url-prefix '~/test/js' 
   > Found 20 release files
   > Analyzing 20 sources
   > Analyzing completed in 0.238s
   > Rewriting sources
   > Rewriting completed in 0.252s
   > Adding source map references
   > Bundling files for upload... ~/test/js/vendor.331b4cf7bdabb46a7655.js.map
   > Bundling completed in 0.373s
   > Optimizing completed in 0.01s
   > Uploading completed in 0.337s
   > Uploaded release files to Sentry
   > Processing completed in 0.114s
   > File upload complete (processing pending on server)
   
   Source Map Upload Report
     Minified Scripts
       ~/test/js/0.5578cfbb7e2e6688ddf5.js (sourcemap at 0.5578cfbb7e2e6688ddf5.js.map)
       ~/test/js/1.08ce936a2efe46fada3a.js (sourcemap at 1.08ce936a2efe46fada3a.js.map)
       ~/test/js/2.21a7baf07c2e2f7e0e2e.js (sourcemap at 2.21a7baf07c2e2f7e0e2e.js.map)
       ~/test/js/3.31b60f7af161be6ebdd9.js (sourcemap at 3.31b60f7af161be6ebdd9.js.map)
       ~/test/js/4.fb6e7da7da26fad2df3a.js (sourcemap at 4.fb6e7da7da26fad2df3a.js.map)
       ~/test/js/5.ee4c344db81fc2458f9c.js (sourcemap at 5.ee4c344db81fc2458f9c.js.map)
       ~/test/js/6.9079b1090416a666a327.js (sourcemap at 6.9079b1090416a666a327.js.map)
       ~/test/js/app.ad01bb777553f9efe703.js (sourcemap at app.ad01bb777553f9efe703.js.map)
       ~/test/js/manifest.380384094e7763635655.js (sourcemap at manifest.380384094e7763635655.js.map)
       ~/test/js/vendor.331b4cf7bdabb46a7655.js (sourcemap at vendor.331b4cf7bdabb46a7655.js.map)
     Source Maps
       ~/test/js/0.5578cfbb7e2e6688ddf5.js.map
       ~/test/js/1.08ce936a2efe46fada3a.js.map
       ~/test/js/2.21a7baf07c2e2f7e0e2e.js.map
       ~/test/js/3.31b60f7af161be6ebdd9.js.map
       ~/test/js/4.fb6e7da7da26fad2df3a.js.map
       ~/test/js/5.ee4c344db81fc2458f9c.js.map
       ~/test/js/6.9079b1090416a666a327.js.map
       ~/test/js/app.ad01bb777553f9efe703.js.map
       ~/test/js/manifest.380384094e7763635655.js.map
       ~/test/js/vendor.331b4cf7bdabb46a7655.js.map
   zlgweihao@zlgweihao-mac-mini vue % 


此时,我们可以在 Sentry 在线系统上面查看到上传的 sourcemap 文件,如下图所示:

sourceMap 只需上传到 sentry,不需要上传到线上环境

可以根据打包和发布的时机,在发布到线上前,将 sourceMap 文件删除。或者上传到服务器时,过滤掉 .map 文件。

对于上面遇见的问题,其实仔细阅读文档都可以避免。开发时,可以参考并借鉴写得比较好的同事的代码,但不能太过盲目,需要有自己的见解和想法。同时也需要在使用过后,好好地去了解一下它的具体实现。做得好,看能否做得更好。

以上如有不到之处,欢迎发消息一起交流探讨。

小程序集成sentry

Sentry 小程序 SDK | 微信开放社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电线电缆测厚双测径仪联控测厚系统

关键字:线缆测厚系统,绝缘层测厚设备,电线皮套测厚,电缆绝缘层测厚, 产品简介&#xff1a; 双测径仪联控测厚系统的工作原理基于光电测量技术。一台测径仪测量电缆的成品直径&#xff0c;另一台测径仪测量线芯的直径。通过这些测量数据&#xff0c;系统计算出绝缘层或护套层的厚…

IT课程学习搭子

各种IT课程齐全可学&#xff0c;价格你说了算&#xff0c;相比于培训班有以下优势&#xff1a; 1、避免被割韭菜&#xff0c;避免踩坑&#xff0c;避免交智商税&#xff0c;最低的成本学最有价值的课&#xff0c;同时又能达到比培训班更好的效果 2、收徒&#xff0c;带你学习 本…

第十五节、三段攻击动画的实现

一、创建攻击动画 新建图层 新建状态 放入攻击动画 二、攻击实现 三段式攻击 1、按下触发三段式 2、按键触发第一下攻击 设立两个参数 一个计数器 计数器并未使用 三、代码实现 1、注册攻击事件 2、设置动画参数关联

中国制造2025,会抛弃精益生产吗?

时至今日&#xff0c;“精益生产”模式依旧大行其道&#xff0c;它始终支持着中国制造业以最低的成本做出优质产品。我们认为&#xff0c;纵然是中国制造2025成为现实&#xff0c;精益生产模式也仍然是整个制造业的精髓之一。 首先&#xff0c;精益生产模式最重要的一根脊梁就是…

【密码学】密码协议的分类:①密钥建立协议

密码协议的分类有很多种方式&#xff0c;这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类&#xff1a;认证协议、密钥建立协议、认证密钥建立协议。这些协议在密码学和网络安全中扮演着至关重要的角色&#xff0c;下面我来对密钥建立协议详细介绍 密钥建立协议…

Rsync未授权访问漏洞 *

Rsync是Linux/Unix下的一个远程数据同步工具&#xff0c;可通过LAN/WAN快速同步多台主机间的文件和目录&#xff0c;默认运行在873端口。由于配置不当&#xff0c;导致任何人可未授权访问rsync&#xff0c;上传本地文件&#xff0c;下载服务器文件。Rsync 默认允许匿名访问&…

mysql数据库数据类型和约束

mysql数据库:数据类型和约束 常见的数据类型和约束 数据类型 数值类型&#xff1a;INT、BIGINT、FLOAT、DOUBLE&#xff0c;DECIMAL等。字符串类型&#xff1a;CHAR、VARCHAR、TEXT等。日期和时间类型&#xff1a;DATE、DATETIME、TIMESTAMP等。二进制类型&#xff1a;BLOB、LO…

《机器学习by周志华》学习笔记-决策树-02

1、剪枝处理(Pruning) 1.1、背景概念 上文「决策树01」的学习中,我们了解了著名的3种决策树算法ID3、C4.5、CART。这3种决策树算法最根本的核心就是根据特征选择离散属性作为节点来搭建树结构,运用搭好的结构进行推理。 剪枝(pruning)则就是将搭好的决策树去掉一些「非叶节…

[RTOS 学习记录] 预备知识:C语言结构体

这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 文章目录 结构体结构体基础声明和定义结构体类型声明和定义结构体变量初始化结构体变量初始化各个成员使用列表符号初始化 使用结构体变量综上 结构体…

C语言程序设计-[5] 输入输出语句

C语言提供了一些输入输出的库函数&#xff0c;使用库函数&#xff0c;必须将相应的头文件“stdio.h”包含进来。 输入输出库函数可分为三类&#xff1a;字符输入输出函数、字符串输入输出函数和格式化输入输出函数。前两类功能单一&#xff0c;使用起来相对简单&#xff0c;以…

消息队列:Kafka吞吐量为什么比RocketMQ大

根据资料显示RocketMQ每秒能处理10W量级数据&#xff0c;而Kafka能处理17W量级数据。 这两者差别主要再使用的零拷贝技术不一样。 再什么情况下零拷贝技术诞生了 为了防止消息队列中的消息因为各种意外情况丢失&#xff0c;要对消息进行持久化处理&#xff0c;将其存储在磁盘…

Dubbo未授权访问漏洞

Dubbo是阿里巴巴公司开源的一个高性能优秀的 服务框架&#xff0c;使得应用可通过高性能的 RPC 实现服务的输 出和输入功能&#xff0c;可以和 Spring框架无缝集成。dubbo 因配置不当导致未授权访问漏洞。 》》》漏洞复现《《《 步骤一&#xff1a;使用以下语句在Fofa上进行资…

STM32智能小车(循迹、跟随、避障、测速、蓝牙、wifi、4g、语音识别)总结

前言 有需要帮忙代做51和32小车或者其他单片机项目&#xff0c;课程设计&#xff0c;报告&#xff0c;PCB原理图的小伙伴&#xff0c;可以在文章最下方加我V交流咨询&#xff0c;本篇文章的小车所有功能实现的代码还有硬件清单放在资源包里&#xff0c;有需要的自行下载即可&a…

Elasticsearch(高性能分布式搜索引擎)-上篇

Elasticsearch&#xff08;高性能分布式搜索引擎&#xff09; 文章目录 Elasticsearch&#xff08;高性能分布式搜索引擎&#xff09;1 初识elasticsearch1.1 认识和安装1.2 倒排索引1.3 IK分词器1.4 基础概念1.4.1 elasticsearch与数据库对比 2 索引库的操作2.1 Mapping映射属…

FutureTask详解

FutureTask详解 1、FutureTask简介 FutureTask主要用于异步任务的执行和结果获取。其最重要的特性就是可以被提交到线程池中执行&#xff0c;同时也可以用来获取执行结果或检查任务的状态。 2、FutureTask内部结构 继承结构 public class FutureTask<V> implements …

Materialise Magics对齐实现分件对齐

零件‘对齐’三步曲之一 当我们需要对两个零件进行重叠&#xff0c;平行等对齐操作时&#xff0c;可以使用Magics->位置-> ‘对齐’ 功能。通过添加有效的约束条件&#xff0c;就可以实现自动对齐零件啦。 让我们看一下当两个单一方向的零件如何利用边线约束来对齐吧&a…

pxe自动安装linux

实验环境 1.rhel7主机 2开启主机图形&#xff08;本人最小化安装&#xff0c;先下载&#xff09; 3配置网络 4关闭VMware dhcp功能 5能够自动安装系统 完成rhedhat7图形,kickstart,启动图形化制作工具 安装kickstart 启动图形化制作工具 在ks.cfg可以添加安装时下载的包 …

C# 高级数据处理:深入解析数据分区 Join 与 GroupJoin 操作的应用与实例演示

文章目录 一、概述二. 数据分区 (Partitioning)三、Join 操作符1. Join 操作符的基本用法2. Join 操作符示例 四、GroupJoin 操作符1. GroupJoin 操作符的基本用法2. GroupJoin 操作符示例 总结 在数据处理中&#xff0c;联接&#xff08;Join&#xff09;操作是一种非常常见的…

Unity:Camera 对象操作的技术指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 在Unity中&#xff0c;Camera 是一个至关重要的组件&#xff0c;用于渲染场景中的图像。无论是3D游戏还是2D游戏&#xff0c;Camera 都是必不可少的元素。通过合理配置和操作 Camer…

2024华数杯全国大学生数学建模竞赛B题思路-VLSI电路单元的自动布局-关键路径优化的多层划分算法

在粗化过程中&#xff0c;只考虑了如何匹配以使得后续划分 中有尽可能少的割边数&#xff0c;但没有将关键路径和割边的时延视为划分信息的一部分&#xff0c; 这可能导致关键路径较多地被切割&#xff0c;增加了关键路径时延&#xff0c;影响了并行度。另外&#xff0c; 初始划…