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

MeterSphere使用相关问题 最近在使用MeterSphere测试平台,有遇到了一些问题,并且一一解决。现在全部记录一下,方便以后查找使用。 1、安装 可以本地安装,也可以在线安装,不赘述(官方有文档)。 2、查看具体地址、配置文件所在之处 cd /opt/metersphere 3、重启服务器 因为公司在假期把整个测试服务器都关闭了,再次开启测试服务器之后,就需要重启服务。 如果中途有容器显示unhealthy,可以清理一下本地镜像后执行: msctl reload 重启:msctl start 停止:msctl stop 查看状态: 阅读详情

业务反馈部署的 Sentry 系统处理 Electron 的 MiniDump 信息出现异常,界面提示。

于是做了一次分析,记录如下。

Sentry 是什么

Sentry 是一个跨平台的应用错误跟踪系统,专注于错误报告,支持 web 前后端、移动应用以及游戏,此次反馈问题的是 Windows PC 端 Electron 客户端。 官网:sentry.io/

做过客户端的通信可能对 MiniDump 比较清楚,拿 Windows 为例,每次 Windows 操作系统意外遇到错误时(例如在“蓝屏死机”崩溃期间)都会生成一个小文件。 该文件包含有关错误性质的信息,例如崩溃之前和崩溃期间的系统状态。 其中包含诸如运行服务和流程之类的信息,以及每个服务所使用的资源。除了系统,应用 crash 也是可以生成 MiniDump 文件的,本例中就是一个 Electron 的客户端程序生成的 MiniDump。

初步分析

遇事不决先抓包,因为是 HTTPS 的请求包,所以这里需要特殊处理。


SSLKEYLOGFILE=/Users/arthur/keylog.txt
curl -X POST \
  'https://o0.ingest.sentry.io/api/0/minidump/?sentry_key=examplePublicKey' \
  -F upload_file_minidump=@mini.dmp

发现请求是没有什么问题的,HTTP 放回了正确的结果和对应的 EventId

出问题的同学反馈,当上传的 MiniDump 文件是小文件时,比如 300k 没有任何问题。当上传一个 1M 多的文件时,就会出现 Invalid Minidump 异常,怀疑是 sentry 后端处理文件上传的时候有一些问题。

但是这个系统完全不熟,只能硬分析,找到它对应的 Nginx 看下请求跑到了哪里。通过 nginx -T 查看当前的 Nginx 配置文件

server {
  listen 8080;

  proxy_redirect off;
  proxy_set_header Host $host;

  location /api/store/ {
    proxy_pass http://relay;
  }

  location ~ ^/api/[1-9]\d*/ {
    proxy_pass http://relay;
  }

  location / {
    proxy_pass http://sentry;
  }
}

可以看到请求去到了 relay 这个 upstream 上游服务中,这个服务是一个用 rust 写的服务,先搜索了一下处理文件上传部分的逻辑。

发现大小受限于 max_attachment_size 参数。

max_attachment_size 这个参数的默认值是 50MB

讲道理,我们没有修改默认值应该不会触发文件上传这里的校验错误,出问题的应该是在后续的逻辑里,也就是文件上传完以后,继续处理的部分发送数据到 kafka 交给后面的服务继续处理。

艰难的找到了 relay 打印的日志

可以看到 rust 打印提示发送到 kafka 的消息过大,对应的代码如下。

在 relay 服务 tcpdump 抓包同步确认,因为不止我一个人在使用,但是如何找到对应的包呢?

这里有一个小技巧,wireshark 里可以过滤包体里的内容,因为我发现 Minidump 文件的文件头有一个魔数 "MDMP"

于是就可以过滤了,在 wireshark 中输入 frame contains "MDMP",就可以找到对应的kafka 发送那一条的记录。

然后使用 follow tcp stream 就可以看到这个包发送的全过程。

这里有非常多的包,如何快速定位到 kafka 可能发生错误的包呢,wireshark 足够智能可以分析 Kakfa 的包,这里有一个骚操作,kafka 的头部里都有两字节表示的 error 字段,如果无异常,这个值就等于 0

这里我们想看非 0 的,就可以这样来过滤了。

tcp.stream eq 2 and kafka.error != 0

这下就可以真的确认,我们的那个 MiniDump 的包,确实在发送到 kafka 的时候发生了错误。

后面的 MiniDump 解析的服务(一个 python 的服务)解析文件发现文件不完整,就解析失败了。

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/sentry/tasks/store.py", 
  line 255, in _do_symbolicate_event
    symbolicated_data = symbolication_function(data)
  File "/usr/local/lib/python3.6/site-packages/sentry/lang/native/processing.py", 
  line 259, in process_minidump
    response = symbolicator.process_minidump(minidump.data)
  File "/usr/local/lib/python3.6/site-packages/sentry/attachments/base.py", 
  line 61, in data
    self._data = self._cache.get_data(self)
  File "/usr/local/lib/python3.6/site-packages/sentry/attachments/base.py", 
  line 160, in get_data
    raise MissingAttachmentChunks()
sentry.attachments.base.MissingAttachmentChunks

通过跟运维的同学确认,kafka 集群是自己新建的,消息体的大小使用的是 kakfa 的默认值 1M(message.max.bytes),于是动态调整这个值到 50M,然后再次测试,已经成功。

至此问题解决。

【MeterSphere安装问题记录】dependency failed to start: container system-setting is unhealthy 最近发现了一个开源的自动化测试平台metersphere,刚好现在的公司没有自动化平台,也不想再搞纯代码项目了,遂开始跟着。 阅读详情

相关推荐

Sentry For Vue 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!

内容源于:https://docs.sentry.io/platforms/javascript/guides/vue/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For React 完整接入详解 脑图 公众号:黑客下午茶 快速开始 S...

o__cc的博客 5396

jumpserver DOCKER脚本报错解决方案

ERROR: for koko Container "10761048e0bf" is unhealthy. ERROR: for celery Container "10761048e0bf" is unhealthy. ERROR: for luna Container "10761048e0bf" is unhealthy. ERROR: for lina Container "10761048e0bf" is unhealthy. ERROR: for guacamole Con.

kangseung的博客 7191

Containerd 错误报错解决Failed to start containerd container runtime.

systemctlstatuscontainerd.service发现是无法启动容器运行时。解决方案,删除以前的Containerd配置文件,重新执行一下Containerd的安装过程。镜像加速的配置就在cri插件配置块下面的registry配置块。当安装Containerd,在重启Containerd时出现。排查发现是Containerd启动时配置文件的问题。journalctl-xe查看具体原因如下。启动Containerd,并查询状态。重新执行文章中的安装部分。修改为如下配置文件格式。...

一叶的博客 2万+

Kafka集成sentry的授权命令

前提知识: 1. 一旦对Kafka启用Sentry授权以后,kafka用户就是管理员,一切管理员操作都需要使用kafka用户来操作,这个与我们在Hive/Impala中使用Sentry时,hive用户是管理员原理是一样的 2. 如果只是测试系统,建议将Sentry权限的cache刷新间隔调低,这次测试由默认的30s改为了1ms,如果使用默认,将需要等待30s才能让新的权限生效。 3. 在给Top...

虾哔哔的博客 2950

JumpServer2.13.2安装部署及踩坑记

JumpServer在官网上有多种安装部署方式,本文采用“离线部署(amd64)” 1、下载最新的安装包,下载链接:https://community.fit2cloud.com/#/products/jumpserver/downloads 2、解压 3、安装 ./jmsctl.sh install 4、启动 ./jmsctl.sh start 5、遇到的坑 (1)进入到第7步,一直卡住不动 解决方法: 修改系统设置,设置最大打开文件数 $ vi /etc/security/limits.d/20

邓邓子的博客 4735

Android逆向分析

Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。Android应用 Java编写的,利用Android SDK编译代码,并并且把所有的数据和资源文件打包成一个APK(Android Package)文件这是一个后缀名为.apk的压缩文件,apk文件中包含了一个Anddroid应用程序的所有内容,是Android平台用于安装应用程序的文件。

qq_51598534的博客 6294

JumpServer安装后container is unhealthy且网上方案均无效的最终解决办法

终极解决方法:换Ubuntu 18.04 server系统。 之前Ubuntu20.04上进行任何操作均不能解决,换低版本系统就好了。直接运行无任何报错。

cyandragons的博客 3534

DDoS攻击--Syn_Ack/Ack_Flood等攻击防护详解(TCP)

前言 Syn_Ack/Ack_Flood攻击属于TCP攻击,在了解Syn_Ack/Ack_Flood攻击之前,可以先看看TCP攻击详解。 Syn_Ack Flood 攻击: syn_ack报文出现在连接建立的第2个报文,用来确认第一次握手的syn包。 当服务器收到syn_ack报文后会在系统里查询是否属于3次握手的范畴。如果属于则回复ack,并将连接设为连接状态。若没有查到相关信息,则回复...

一只IT小小鸟 1万+

异常处理与MiniDump详解(4) MiniDump

在此我非常感谢博客版主 九天雁翎(JTianLing) 先生/女士 做出的辛苦劳动,写了这么好的文章,本人受益匪浅,特此感谢!原文地址:http://blog.youkuaiyun.com/vagrxie/archive/2009/07/31/4398721.aspx 异常处理与MiniDump详解(4) MiniDumpwrite by 九天雁翎(JTianLing) -- blog.csd

1827

手把手教你用IN-Sight智能相机实现双向TCP/IP通讯(附网络调试助手推荐)

本文详细解析了IN-Sight智能相机实现双向TCP/IP通讯的完整流程。通过将相机同时配置为TCP服务器和客户端,构建了与上位机(如PLC、MES)稳定可靠的数据交换通道。文章深入剖析了发送(TCPDevice)与接收(ReadDevice)通道的独立配置、关键参数设置(如结束符CR+LF)、高效调试工具选择以及实战避坑指南,帮助工程师快速掌握这一构建柔性产线数据节点的核心技术。

qsc9012345的博客 671

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 194

MiniDump不生成或者生成0字节

通过分析发现是另一个线程在退出时出现了宕机,但是主线程退出时还没来得及调用或者未完全调用完生成MiniDump文件,整个进程就结束了。简单粗暴的方法就是主函数退出前休眠一段时间,让异常处理程序有充分的时间生成MiniDump。今天的MiniDump却不能正常工作,在ExceptionFilter函数中打日志,时而有输出,时而没输出,有输出都是在函数开头的日志有输出,后面的就没输出了。今天在使用C写一个Windows多线程程序时,发现退出过程中有段错误,为了方便快速的定位问题,我使用了MiniDump。

witton的专栏 2096

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中设置 RGP 表的技巧,以优化仿真精度和效率。

jkh920184196的博客 1671

sentry部署

sentry安装部署

zhongxj183的博客 2087

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

解决AutoDock与Python版本冲突导致的内存泄漏问题:从BHtree *错误到环境配置优化

本文深入解析了AutoDock分子对接中常见的‘BHtree *’内存泄漏错误,其根源在于SWIG接口模块与Python运行环境的版本不匹配。文章提供了根治方案:通过构建Python 2.5.4与MGLTools 1.5.6的黄金兼容组合,并详细指导环境清理、安装配置及实战测试,从而彻底解决该内存泄漏问题,确保AutoDock工作流的稳定运行。

g5h6i的博客 1116

Mysql容器启动失败-解决方案

Mysql容器启动失败-解决方案

p15097962069的博客 960

多天线技术:5G波束成形&空间复用&空时编码

以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重

weixin_43199439的博客 1389

记一次docker的mysql容器exited(1)无法正常启动

起因是因为我在使用docker创建自定义的镜像时遇到了爆内存的情况,迫不得已我需要重启docker服务并且强制停止所有容器,然后重启docker服务并且需要手动重启里面的容器。 在我start mysql容器的时候遇到了bug:启动mysql容器后秒退关闭了 输入docker ps -a查看情况 发现异常关闭了 输入docker logs f39859b3373a查看日志 发现是mysqld报错了,无法识别default-character-set=utf8,突然想起是几天前改过配置文件,应该是因为这个导

withwindluo的博客 6800

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

windows环境下安装sentry集成vue3

windows环境下安装sentry 执行 docker compose up -d 后项目无法正常启动,报错 container sentry-self-hosted-postgres-1 is unhealthy。

weixin_42643653的博客 975

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[mysql]错误解决之"Failed to start MySQL Server"

注意!注意!注意!下面的操作,请您看完再自行决定要不要采纳这个建议!否则造成的后果,与我无关~ 好了,接下来正文开始

自由而不独立,仍是奴隶。 5万+

sentry安装过程故障排查

将安装prefix目录设置为该目录。当不设置,将默认安装至node安装的目录,最后更新path。报错EACCES: permission denied。具体原理是切到用户目录创建用户有权限的全局文件,查看所有创建的全局链接。

riddle1981的博客 831

Windows——sentry接入C/C++程序

基于C/C++版本的sentry,从安装到植入工程

qq_44745063的博客 3714

Docker容器状态为unhealthy的解决思路

一个PMM Server部署问题解决办法

qq_34595089的博客 1万+

docker mysql容器启动不_Mysql容器启动失败-解决方案

在看问题之前首先熟悉几个命令相关命令1.docker attach连接到正在运行中的容器;命令:docker attach --sig-proxy=falsemynginx2.docker exec 这个命令比较方便,可以在容器运行别的服务时连接上该容器;命令:docker exec -it mysql_database1 /bin/bash3.docker inspect mysql 查看容器...

weixin_33488806的博客 5090
上一篇: ZooKeeper灵魂27连问,这谁顶得住?
下一篇: 20道JVM面试重点问题及十大模块知识点笔记
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值