一次 Kafka 导致的 Sentry 无法处理 MiniDump 问题分析

一次 Kafka 导致的 Sentry 无法处理 MiniDump 问题分析

业务反馈部署的Sentry系统处理Electron的MiniDump信息出现异常,界面提示。
于是做了一次分析,记录如下。
Sentry是一个跨平台的应用错误跟踪系统,专注于错误报告,支持web前后端、移动应用以及游戏,此次反馈问题的是WindowsPC端Electron客户端。
做过客户端的通信可能对MiniDump比较清楚,拿Windows为例,每次Windows操作系统意外遇到错误时(例如在“蓝屏死机”崩溃期间)都会生成一个小文件。该文件包含有关错误性质的信息,例如崩溃之前和崩溃期间的系统状态。其中包含诸如运行服务和流程之类的信息,以及每个服务所使用的资源。除了系统,应用crash也是可以生成MiniDump文件的,本例中就是一个Electron的客户端程序生成的MiniDump。
遇事不决先抓包,因为是HTTPS的请求包,所以这里需要特殊处理。
发现请求是没有什么问题的,HTTP放回了正确的结果和对应的EventId
出问题的同学反馈,当上传的MiniDump文件是小文件时,比如300k没有任何问题。当上传一个1M多的文件时,就会出现InvalidMinidump异常,怀疑是sentry后端处理文件上传的时候有一些问题。
但是这个系统完全不熟,只能硬分析,找到它对应的Nginx看下请求跑到了哪里。通过nginx-T查看当前的Nginx配置文件
可以看到请求去到了relay这个upstream上游服务中,这个服务是一个用rust写的服务,先搜索了一下处理文件上传部分的逻辑。
发现大小受限于max_attachment_size参数。
max_attachment_size这个参数的默认值是50MB
讲道理,我们没有修改默认值应该不会触发文件上传这里的校验错误,出问题的应该是在后续的逻辑里,也就是文件上传完以后,继续处理的部分发送数据到kafka交给后面的服务继续处理。
艰难的找到了relay打印的日志
可以看到rust打印提示发送到kafka的消息过大,对应的代码如下。
在relay服务tcpdump抓包同步确认,因为不止我一个人在使用,但是如何找到对应的包呢?
这里有一个小技巧,wireshark里可以过滤包体里的内容,因为我发现Minidump文件的文件头有一个魔数”MDMP”
于是就可以过滤了,在wireshark中输入framecontains”MDMP”,就可以找到对应的kafka发送那一条的记录。
然后使用followtcpstream就可以看到这个包发送的全过程。
这里有非常多的包,如何快速定位到kafka可能发生错误的包呢,wireshark足够智能可以分析Kakfa的包,这里有一个骚操作,kafka的头部里都有两字节表示的error字段,如果无异常,这个值就等于0
这里我们想看非0的,就可以这样来过滤了。
这下就可以真的确认,我们的那个MiniDump的包,确实在发送到kafka的时候发生了错误。
后面的MiniDump解析的服务(一个python的服务)解析文件发现文件不完整,就解析失败了。
通过跟运维的同学确认,kafka集群是自己新建的,消息体的大小使用的是kakfa的默认值1M(message.max.bytes),于是动态调整这个值到50M,然后再次测试,已经成功。
至此问题解决。
这个项目啥语言都有,rust、python等等,开源大杂烩。好了我滚回去学rust了。
原文链接:https://juejin.cn/post/7094138226507513869

主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/16160.html

(0)
上一篇 2023年3月9日 上午6:50
下一篇 2023年3月9日 上午6:53

相关推荐

  • 中金网0215数字货币日评:比特币短线上涨阻力大

    中金网0215数字货币日评:比特币短线上涨阻力大 外汇天眼APP讯:【数字货币概述】比特币日内再度遇阻回落,短线想要进一步上涨的压力大,短线面临回调需求。截至发稿,比特币围绕10250震荡交投,现报10250.07美元,跌0.94%。其他主流数字货币方面,以太币报276.27美元,跌1.85%,瑞波币报0.3180美元,跌0.2%。比特币:从短期4小时图上来…

    RUST资讯 2023年3月11日
    20
  • GitHub日收12000星,六个命令行工具引爆程序员圈

    GitHub日收12000星,六个命令行工具引爆程序员圈 程序员少不了和命令行打交道而一个好的工具可以让工作变得更容易、更效率也可以帮助开发者解锁新的能力:将不可能化为可能,或者简单化一件事情。我在浏览国外的技术网站时就发现了一篇分享命令行工具的文章在这里分享给大家以下是译文:我不知道我是怎么认识Broot的,但它很实用。当你打开一个小目录,并想要查看lan…

    RUST资讯 2023年2月18日
    80
  • 石沉大海的节奏?生存类独立游戏《荒野》官网关闭

    石沉大海的节奏?生存类独立游戏《荒野》官网关闭 一款以标榜为iOS版Rust/DayZ而闻名的手游。这款游戏由两位开发者组成的ToonuvaGames制作,并在一年前首次公开宣布将在不久之后登陆iOS。在《荒野》中,玩家将扮演一个沉船事故的唯一幸存者,醒来时发现自己来到了一个未知的岛上,在这个面积为100平方公里的岛上玩家可以自由探索,寻找任何可以活下来的办…

  • 再出意外!《Rust》灯光师被毒蜘蛛咬伤 或恐截肢

    再出意外!《Rust》灯光师被毒蜘蛛咬伤 或恐截肢 1905电影网讯据台媒报道,好莱坞男星亚历克鲍德温正在拍摄的新片《Rust》上个月曝出,不慎使用道具枪误杀了女摄影师哈里娜哈钦斯,酿成一死一伤的惨剧。这起事件也在好莱坞掀起了不少波澜,上周200名好莱坞影视的摄影师签署了一份声明,呼吁禁止电影片场使用真枪实弹进行拍摄,多位影星“巨石”道恩强森等也纷纷响应。误…

    RUST资讯 2023年3月10日
    20
  • Rust语言里的字符串string

    Rust语言里的字符串string 每一种编程语言都需要处理字符串,Rust编程语言里牵涉到字符串处理的有原始类型str以及string结构体。str一般有两种叫法,一是字符串切片,另一个是字符串字面量。常出现的形式有&str,&’staticstr例子如下str类型有很多你可以想到的方法处理字符串比如split,trim,rep…

    RUST资讯 2023年2月21日
    50
  • 如何构建一个邪恶的编译器

    如何构建一个邪恶的编译器 作者|AkilaWelihinda译者|弯月出品|CSDN(ID:CSDNnews)你知道有一种编译器后门攻击是防不胜防的吗?在本文中,我将向你展示如何通过不到100行代码实现这样的攻击。早在1984年,Unix操作系统的创始人KenThompson就曾在图灵奖获奖演讲中讨论了这种攻击。时至今日,这种攻击仍然是一个很大的威胁,而且目…

  • Deno 1.0 发布,在 Web 浏览器之外执行 JavaScript和TypeScrip

    Deno 1.0 发布,在 Web 浏览器之外执行 JavaScript和TypeScript Deno1.0发布了。Deno是作者RyanDahl在Node之后的又一大作,它是一个新的运行时,用于在Web浏览器之外执行JavaScript和TypeScript,其采用Rust编写而成(最初用的是Golang)。Deno试图提供一个独立的工具来快速编写复杂功…

    RUST资讯 2023年2月17日
    80
  • 天台上看安迪是如何硬刚海利-《肖申克的救赎》

    天台上看安迪是如何硬刚海利-《肖申克的救赎》 那是一种内在的东西,他们到达不了,也无法触及的,那是你的。天台上看安迪是如何硬刚海利剧本-Andy:Mr.Hadley…doyoutrustyourwife?Hadley先生,你信任你太太吗?-Hadley:Oh,that’sfunny.You’lllookfunniersuc…

  • Rust中巧用..语法糖

    Rust中巧用..语法糖 #每天学点Rust# 打赏赞微海报分享

    RUST资讯 2023年2月21日
    80
  • UWP被分拆——微软发布C#WinRT代码仓库

    UWP被分拆——微软发布C#/WinRT代码仓库 废话少说先上图。看了图片上的仓库,关注微软技术的开发人员应该都有印象,微软之前有发布c++版的winrt映射,那个仓库的名字叫cppwinrt,还有什么rust语言的winrt-rs。这些其实都不重要,重要的是微软为什么把C#语言的给单独拉出来,之前UWP项目模板是可以直接用的,当然wpf和winform项目…

    RUST资讯 2023年2月22日
    70
关注微信