如何将 Sentry 上的 Issues 全部设置为已解决状态

文章目录

Sentry 是什么

Sentry 是开发人员优先的错误跟踪和性能监控平台,可帮助开发人员了解真正重要的事情、更快地解决问题并不断了解他们的应用程序。

官网:https://sentry.io

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

将 Sentry 的 Issues 标记为已解决

Sentry 的 Issues 的中文翻译是“问题”,当程序代码中集成 Sentry SDK 对代码中发生错误的地方进行上报,这些错误信息就会展示在这个“问题”页面。

相同的错误信息会被 Sentry 自动的归到一起,在页面上只会展示一条错误名和对应事件次数,当你解决了这个错误后,可以将它设置为已解决状态。

Sentry 9.1.2 版本没有提供全部数据的操作,默认只能全选 Issues 页面上的 25 条 Unresolved Issues 记录进行操作。

当你的错误超过 25 条,点击 Resolve 按钮旁边的小框全选后,页面会提示你 “25 issues on this page selected.Select all XXX issues that match this search query.”,点击该提示可以将这 XXX 个错误都进行某个批量的操作。

这个 XXX 最多只能是 1000 条,也就是说批量操作最多一次只能操作 1000 条记录。

过量的 Issues 的产生

有这样一种情况,程序上报的错误信息中包含了变量值,这就会导致虽然是同一个错误,但是由于有变量 Issues 页面无法归类到一起,就会展示大量的错误信息。

这个数量巨大到时百万、千万级别时,想要将全部的错误设置为已解决状态的话,如果靠页面上的鼠标操作每次1000条,那需要话很长的时间。

那么,如果你遇到这种情况时,你会怎么做呢?

将 Sentry 的所有 Issues 设置为已解决状态

有两种方法,一是直接去改数据库,而是通过调接口的方式修改。

由于改库需要一定的数据库权限和数据库表的梳理需要较多的精力与时间,因此考虑使用接口调用方式安全又高效。

首先需要看一下在浏览器中将 1000 个 issues 标记为已解决状态发了什么请求,在浏览器控制台的网络中可以看到发起了一个 PUT 请求

PUT https://yoursentry/api/0/organizations/sentry/issues/?query=is%3Aunresolved&project=xx

可以看到这种请求参数和选择单个或多个 issue 时的请求参数是不同的,单个或多个时是具体的id作为参数,而这里是有一个query参数。

请求体为:

{"status":"resolved"}

在浏览器控制台中直接右键将该请求复制为 cURL 或 Fetch,然后循环调用即可。

使用 cURL 需要你有终端写 shell,没有的话可以使用 Fetch 直接在浏览器里用 javascript 进行循环调用。

这里通过复制 Fetch 代码直接在浏览器终端通过 js 循环调用来将 sentry issues 标记为已解决:

function job() {
  console.log("start ...");
  fetch("https://yoursentry/api/0/organizations/sentry/issues/?query=is%3Aunresolved&project=xx", {
    "credentials": "include",
    "headers": {
      "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0",
      "Accept": "application/json; charset=utf-8",
      "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
      "Sec-Fetch-Dest": "empty",
      "Sec-Fetch-Mode": "no-cors",
      "Sec-Fetch-Site": "same-origin",
      "Content-Type": "application/json",
      "X-Transaction-ID": "-",
      "X-Span-ID": "-",
      "X-CSRFToken": "-",
      "X-Requested-With": "XMLHttpRequest",
      "Pragma": "no-cache",
      "Cache-Control": "no-cache"
    },
    "referrer": "https://xxx/projectname/",
    "body": "{\"status\":\"resolved\"}",
    "method": "PUT",
    "mode": "cors"
  });
  console.log("ok ...");
  setTimeout(f, 60000);
}

job();

以上 js 代码通过 setTimeout 每分钟执行一次来循环,不要太快,避免给 sentry 的数据库造成压力。

代码没有做结束判断,全部改完后手动关闭控制台停止。


也可以看看


全国大流量卡免费领

19元月租ㆍ超值优惠ㆍ长期套餐ㆍ免费包邮ㆍ官方正品