Sentry不断返回不存在的事件ID

时间:2015-03-16 14:22:20

标签: python django error-handling tastypie sentry

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

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

所以,我们有一个看起来像这样的tastypie的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,但确实如此。

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

1 个答案:

答案 0 :(得分:3)

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

UDP协议无法保证。

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

我假设哨兵的HTTP / HTTPS协议超过TCP

解决方案:

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

为什么要使用UDP?

通常提出的一些原因:

  • 没有握手=它更快,
  • 没有连接=连接断开没问题(例如重启服务器)。