家人们,谁懂啊!这仪表盘的导出功能简直是个 “戏精”。点击导出,它先是假装很认真地工作,进度条慢悠悠地前进,给你一种一切顺利的假象。就在你满心期待时,它突然来个 “急转弯”,屏幕上突然弹个框,出现一堆代码,诶,导出失败了!这反转,谁受得了啊 !
今天咱就来好好唠唠,碰上这 “戏精” 搞破坏,都有哪些排查思路。虽说不一定能立马解决问题,但起码能帮咱一步步揪出原因,让这导出功能离乖乖听话更近一步。
仪表盘导出原理
开始大战之前,先让我们先了解了解,这个导出到底是个什么过程。导出引擎其实就是模拟浏览器打开资源的效果,然后截图后返回到前端,其中导出excel时,明细数据还是在bi这边服务器导出的。Excel中的截图还是一样的逻辑,具体可以看下面这个图。

相关的信息检查
别着急别着急,吾日三省吾身,导出引擎也有一些前置条件需要检查一下,包括以下这些内容,主要咱也遇到不少还没配置的情况不是,说不定配好了也就没下面的事了:
1、安装部署导出引擎。
2、系统选项-公共设置-服务器地址(没配置则仪表盘不会显示导出按钮),并且要确保测试连接通过。
3、bi服务器和导出引擎所在服务器需要确保可以相互通信。
排查思路
接下来就是我们的“武器库”了!让我们来看看有哪些。
1、访问导出引擎地址:若导出引擎是正常启动的话,访问应该如下图显示,实际环境记得改成对应的ip和端口:

如因为网络问题无法通过浏览器访问,可在bi服务器命令行curl进行访问,如下图,不通,那找网管大哥开个端口啥的,通了咱就下一步:

2、验证 http://ip:port/?url=http://ip:port 是否正常:正常会显示对应url显示内容的截图图片(温馨提示:记得改成现场实际导出引擎所在服务的ip和端口)

3、进一步验证简单的仪表盘资源测试导出功能:
如:新建一个仪表盘,只加文本组件,写静态文字,预览导出excel或png,是否正常。
若简单资源可以导出,复杂资源不能导出,可能是因为报表请求过大,需要在bi应用服务器tomcat的server.xml配置 maxPostSize = '-1' 不限制请求大小:

4、跳转情况:访问如下地址,验证对应资源强制在5秒(skipWaitforTime参数配置时间)截图看资源效果(再再再温馨提示:记得改成现场实际导出引擎所在服务的ip和端口)
http://ip:port/smartbi/vision/ExportHttpServlet?action=EXPORT_DASHBOARD_DIRECT&pageId=资源id&skipWaitforTime=5000&exportType=PNG&detectFailedSelector=.db-page__page-failed&detectLoadedSelector=.db-page__page-loaded&width=1024&height=768
在上述链接中主要修改对应的smartbi服务器地址,对应的仪表盘资源id,以及skipWaitforTime的值,就可以返回导出引擎在打开仪表盘资源后的第N毫秒的截图,便于观察导出引擎打开仪表盘资源后,是否跳到其他异常页面(比如单点登录页面等),页面状态是否和预期一致。
5、组件刷新情况:访问报表资源,待刷新完成后,通过F12调试工具集Elements搜索db-page__page-loaded样式,若不能搜到,说明可能存在某个组件刷新异常,可以看Console控制台有无脚本异常报错信息。 如有,可将报错信息发回官方支持。
5、组件刷新情况:6、导出smartbi的系统日志:包含导出引擎ScreenshotLog日志,若旧版本没有也可直接在导出引擎服务器拿对应的日志文件,报错看得一头雾水的话那可以拿着日志找找外援,也就是官方支持了。
其中,日志获取方式参考:
- Windows:.../SmartiExport/logs 日志名称为:NodejsHttpServer.log
- Linux:执行命令行导出即可,命令参考:docker logs --tail 1000 smartbi-export >export-log.txt ####导出最后1000行日志到export-log.txt
- 执行命令后会生成一个export-log.txt,此时可以从里面看到报错信息。
这里提到官方支持,那,找官方的时候要提供什么什么信息可以尽快抓到这只“妖精”呢?
当然是建议把上面1~6的排查情况都反馈一下,附上个截图,那要是验证到某一步已经不对劲了,那就反馈下验证到哪儿了,哪儿不对了,发个导出引擎的日志,最好再一起发一下资源啦。
这仗打赢不容易啊!那有没有实际战役来一次啊?别急别急,这不就有了。看!
来个案例
前方接到急报,领导要的那个仪表盘导出报错了!怎么办!莫慌,慌了就乱了阵脚了,咱可以先点查看栈信息提示看看有没有明显说是个啥子原因:

点开一开,诶,看不懂啥意思,搜搜我们在线的wiki也没有搜到报错:

那咋整?领导催了啊!这个时候可以先按照上面的步骤来一套。
基础测试
新建简单仪表盘(仅文本组件),测试导出PNG。
✔️ 成功 → 排除引擎问题,进入下一步。
请求体过大嫌疑
关键排查步骤
解决方案

这就是个小案例了,还是可以按着步骤来一遍,也还是能检查出来为啥子。那要是来一遍还是不明确为啥,那就可以把报错日志啊,步骤查到哪儿啦,仪表盘的资源等导出发回找找官方支持啦。
可能有好奇的同学问,怎么导出资源,导出资源会不会有我的数据噢?有这些问题的同学们可以期待下一篇文章哦~ |