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

Sentry Issues 批量处理:将所有错误快速标记为已解决

文章目录

Sentry 是什么?

Sentry 是一个专为开发者设计的错误追踪和性能监控平台,它帮助开发者快速识别和解决问题,深入了解应用程序的运行情况。更多信息可以访问 Sentry 官网 或查看其 GitHub 仓库

Sentry Issues 概述

在 Sentry 中,“Issues”指的是程序运行时发生的错误。当 Sentry SDK 集成到代码中时,错误信息会被自动捕获并显示在 Issues 页面上。相同类型的错误会被 Sentry 自动归类,显示为一条错误记录和对应的事件次数。解决错误后,开发者可以将其状态更改为“已解决”。

操作限制

需要注意的是,Sentry 9.1.2 版本并不支持一次性标记所有 Issues,默认情况下,每页只能选择最多 25 条未解决的问题进行操作。如果存在超过 25 条的错误,点击“Resolve”按钮旁的小框全选后,系统会提示 “25 issues on this page selected. Select all XXX issues that match this search query.”,此时可以点击提示将最多 1000 条问题进行批量操作。

大量 Issues 的产生原因

当程序上报的错误信息中包含变量值时,相同类型的错误可能因变量不同而无法归类,导致 Issues 页面出现大量不同的错误信息。如果这些错误数量庞大,可能达到数十万甚至上百万,手动操作每次仅能处理 1000 条,将会消耗大量时间。

批量将 Sentry Issues 标记为已解决

针对上述问题,开发者有两种方式将 Sentry 上的所有 Issues 设置为已解决状态:一种是直接更改数据库,另一种是通过 API 接口调用。直接更改数据库需要相应权限,并且对数据库表的理解和操作复杂,因此建议使用接口调用方式,既安全又高效。

使用 API 调用

在浏览器中观察将 1000 个 Issues 标记为已解决的请求,可以看到发起了一个 PUT 请求:

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

这个请求包含一个 query 参数,且请求体为:

{ "status": "resolved" }

可以将此请求复制为 cURL 或 Fetch,然后进行循环调用。

示例代码

以下是使用 JavaScript 在浏览器控制台中循环调用的示例代码:

function job() {
  console.log("开始处理 ...");
  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("请求已发送 ...");
  setTimeout(job, 60000); // 每分钟调用一次
}

job();

注意事项

上述代码通过 setTimeout 每分钟执行一次请求,以避免给 Sentry 的数据库造成过大压力。代码没有结束判断,所有问题处理完后需手动关闭控制台以停止请求。

结语

通过 API 调用方式批量标记 Sentry Issues 为已解决状态是一种高效的解决方案,适合于处理大量未解决的问题。利用 Sentry 的强大功能,可以有效提高开发团队的工作效率和应用程序的稳定性。


也可以看看