【问题标题】:Sentry keeps returning nonexistent incident id'sSentry 不断返回不存在的事件 ID
【发布时间】:2015-03-16 14:22:19
【问题描述】:

我们有一个 django 项目。我们使用 Sentry 来收集有关 HTTP 500 错误的信息。

Sentry 可以选择将事件信息添加到请求标头中,以便您可以在应用程序中处理它。

所以,我们有一个用于美味派的 mixin,看起来像这样:

class Sentry500Mixin(object):
def _handle_500(self, request, exception):

    if not isinstance(exception, TastypieError) and not settings.DEBUG:
        sentry_exception_handler(request=request)
        data = {
            'error_message': 'Sorry, this request could not be processed.',
            'incident': getattr(request, 'sentry', None)
        }
        return self.error_response(request, data, response_class=HttpApplicationError)

    else:
        return super(Sentry500Mixin, self)._handle_500(request, exception)

当发生 500 错误时,我们会得到如下响应:

 {"error_message": "Sorry, this request could not be processed.", 
"incident": {"id": "3459b30f87ea4116a0a2855be576bbb3", "project_id": "5"}}

问题是,如果你拿着这个事件 id 去 Sentry,这个 id 很有可能不会发生任何事件。并且没有看起来像这样的事件。我确信我正在检查正确的项目,如果未创建事件,从逻辑上讲,Sentry 无法返回您的 ID,但它确实返回了。

非常感谢任何帮助和想法。谢谢。

【问题讨论】:

标签: python django error-handling tastypie sentry


【解决方案1】:

正如@erik-e 在评论中解释的那样,event_id 是在客户端生成的。

UDP 协议没有任何保证。

您使用的是UDP 协议吗?如果是,event_id 不一定映射到 Sentry 中的实际事件。路由器/交换机/网络设备可能丢失了您的数据包。使用 UDP 时,无法保证传送、排序或重复数据包。

我假设用于哨兵的HTTP/HTTPS 协议已超过TCP。

解决方案:

  • 仔细检查防火墙规则,
  • 尝试其他协议并确保哨兵服务器没有问题。

那为什么要使用 UDP?

一些普遍提出的理由:

  • 无需握手 = 更快,
  • 无连接 = 如果连接中断(例如重新启动哨兵服务器),则没有问题。

【讨论】:

  • 所以它是在客户端生成的,谢谢!我已经考虑过了,因为它看起来像一个哈希,但我没有在文档中找到任何关于它的提及。我们将检查我们是否使用 UDP,然后尝试切换到 HTTP,如果有帮助,我会发表评论
猜你喜欢
  • 2020-09-09
  • 2014-06-18
  • 2015-05-13
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2014-09-24
相关资源
最近更新 更多