1. 概述
本文主要概述了使用设计器进行远程连接设计模板时的常见问题及解决方案。
2. 常见排查步骤
远程设计的常见问题及排查思路,如下图所示:
2.1 查看是否支持远程设计
问题描述:远程设计连接前,需要先确认远程的工程是否支持远程设计功能点。
解决方案:登录数据决策系统,查看http://IP:port/webroot/decision/remote/design/vt的返回值,若返回{"data":"success"},代表支持。
2.2 查看用户权限
问题描述:非超管账户远程设计连接失败。
解决方案:请联系超级管理员,为需要远程的用户分配「远程连接权限」和「远程设计模板权限」,详情请参见:给用户分配远程设计权限示例 。
2.3 查看JAR包版本
问题描述:本地设计器版本和远程JAR包版本不一致,会导致很多问题。详情请参见:服务器和设计器的JAR包不匹配 。
解决方案:远程连接时,若版本不匹配,会提示版本不一致,远程设计时部分功能将受影响。建议及时更新,保证服务器和设计器版本一致。
2.4 检查设置是否正确
首检查远程设计的配置界面的信息是否正确,参考:远程设计,可点击测试连接,根据报错提示和日志报错进行排查。
3. 31300101 远程设计无权限
4. 31300102 模板已锁定
4.1 远程设计模板占用(已被锁定)的判断机制
问题描述:
打开了模板,重启服务器后打开远程工作目录发现模板已锁定,但只有一个人在编辑。
原因分析:
模板锁的释放逻辑为每1分钟清理下,判断是否释放的前提是该模板在1分钟半中没有其他人操作。
解决方案:
重启服务器,或者等一段时间会被释放。
4.2 模板已锁定
问题描述:
远程设计打开一张模板时,提示「模板已锁定」。
原因分析:
模板锁定的原因有以下几种:
1)多人编辑:用户A和用户B同时远程连接了该工程,用户A打开了X模板。用户B打开X模板时,提示模板已锁定。
2)开发者调试:用户A和用户B同时远程连接了该工程,用户A在开发者调试状态下编辑X模板。用户B打开X模板时,提示模板已锁定。
解决方案:详情请参见:远程设计模板锁定
5. 11300104 远程设计连接失败
5.1 报错 Response HTTP/1.1 404 by
问题描述:
远程设计连接时报错:com.fr.workspace.engine.exception.WorkspaceConnectionException: Response HTTP/1.1 404 by http://IP:端口号/webroot/decision
解决方案:
卸载重装设计器。
5.2 报错 The SolidRecordExecutor should be register first
问题描述:
远程设计连接时报错:The SolidRecordExecutor should be register first
原因分析:
服务器没有安装云端运维插件,不影响功能的正常使用。
这个是服务器上埋点功能相关的报错 只不过是通过远程设计日志推送推到设计器上展示,实际上与远程设计功能本身无关。
5.3 报错 Caused by: java.net.UnknownHostException: ??: ??
问题描述:
远程设计连接时报错:Caused by: java.net.UnknownHostException: ??: ??
原因分析:
连接远程环境时需要获取本机 IP,如果主机名乱码会导致获取本机 IP 失败。
排查步骤:
1)打开 cmd 输入 hostname 并回车,查看主机名 hostname 是否为乱码。
2)若 hostname 为乱码,在「控制面板>系统与安全>系统」中查看计算机名称是否为中文或者特殊符号。
解决方案1:若 hostname 为乱码,在「控制面板>时钟和区域」面板中,点击「区域>管理>更改系统区域设置」,设置计算机适配语言为中文即可。如下图所示:
解决方案2:
若计算机名称为中文或者特殊符号。
在「控制面板>系统与安全>系统」面板中。点击「更改设置」,修改计算机名称为英文即可。如下图所示:
5.4 远程设计偶发连接失败
问题描述:
远程设计连接偶发出现连接失败的情况,设计器页面会出现远程主机强迫关闭了一个现有的连接,就无法连接到服务器了。
原因分析:
Tomcat中配置了一个连接超时时间connectionTimeout,如果在这个时间之后客户端还未得到服务器端的响应的话,就会主动断开连接,即出现上述异常了。
解决方案:
Tomcat中默认的连接超时时间是20秒,一般最好设置为60秒,从而避免后台程序处理时间长导致连接断开,修改如下:connectionTimeout="60000"。
5.5 远程设计频繁断开
问题描述:
远程设计,频繁断开。报错:网络连接异常:websocket已断开。
排查方案:
1)管理员登录数据决策系统,点击「管理系统>智能运维>内存管理」,查看「内存预警」Tab 下「内存利用率和「CPU 利用率」两张图是否显示空白。
若显示空白,则说明 WebSocket 连接失败,请参考文档配置 WebSocket 端口:Websocket 连接失败
2)检查网络是否连通:ping ip地址是否联通、检查vpn是否有问题、检查网络状况。
5.6 报错 Server workspace no response
问题描述:
远程设计失败,报错Server workspace no response,如下图所示:
排查方案:
使用 postman 工具测试 post 请求下 channel 接口返回值,http://ip:port/webroot/decision/remote/design/channel
如果返回 could not get response,则说明 channel 接口不通,需要排查下防火墙、安全软件是否有反序列化漏洞或者是 channel 请求的拦截记录。之后放行即可
注:不要使用浏览器测试channel请求,有时会出现channel实际不通但是会返回true的情况,建议优先使用postman工具测试
5.7 报错 Not in GZIP format
问题描述:
HTTPS远程设计报错:Not in GZIP format
原因分析:
远程设计请求被拦截
解决方案:
请自行联系网络维护相关人员,修改网络安全拦截策略,将/webroot/decision/remote/design/*相关请求加入白名单
6. 11300105 远程设计用户名密码错误
6.1 账号密码错误
原因分析:
远程设计连接时,使用的决策系统账号密码不正确。
解决方案:
使用和远程设计连接一致的地址、账号、密码,在浏览器进行访问登录,检查是否能正常登录。如无法正常登录,请联系管理员确认自己的账号密码是否正确。
6.2 无远程连接权限
原因分析:
远程设计连接时,填写的用户名和密码,没有远程设计的权限,需要联系管理员添加。
解决方案:
请联系超级管理员,为需要远程的用户分配「远程连接权限」,详情请参见:给用户分配远程设计权限示例 。
6.3 PC端使用用户限制
原因分析:
系统开启了「PC端使用用户」限制,但是远程设计使用的决策系统账号密码不在「PC端使用用户」。
解决方案:
请联系管理员,将远程设计使用的决策系统账号添加到「PC端使用用户」中。
7. 31300106 远程设计无权限修改配置
7.1 没有权限编辑/保存模板
问题描述:用户在远程设计时,试图编辑/保存没有权限的模板。
解决方案:请联系超级管理员,为需要远程的用户分配「远程设计模板权限」和「数据连接权限」,详情请参见:给用户分配远程设计权限示例 。
7.2 找不到模板
排查步骤:
1)linux环境,检查编码,中文字体
2)查看注册功能点,是否有这个功能点
3)检查远程设计用户权限
4)检查模板权限
5)检查模板所属的用户组
7.3 编辑模板保存失败
问题描述:远程服务器保存模板时,报错:"xxx.cpt" is locked by user admin with client xxx,client后的编号和设计器编号一致,但是远程设计和激活码是不限制的。
原因分析:
发送的请求中只要包含了特定字符串,那么服务器在读取的时候就会发生java.io.IOException: Connection reset by peer 导致拿不到。
这是服务器网络问题,是某种 SQL 防注入安全策略。
解决方案:请服务器网络运维相关负责人,修改网络安全拦截策略,将/webroot/decision/remote/design/*相关请求加入白名单。
7.4 保存模板没有权限
问题描述:使用超级管理员账号远程设计,保存模板时出现以下现象:
保存模板,提示没有权限
子目录有查看权限但不显示
模板已保存在服务器环境,但依然提示“请将模板保存在当前运行环境”
日志中出现报错:NoHttpResponseException
原因分析:服务端断开了http连接,但并没有通知客户端,下次请求该服务时httpclient继续使用该连接导致报错
解决方案:
调整tomcat配置:修改 Tomcat 的 server.xml 的 connectionTimeout ,调大后重启生效。
7.5 保存时发现模板锁定信息不一致,是否生成备份文件
问题描述:
在远程设计下打开了模板,修改了内容但是没保存。
然后切换到本地目录后,再切换回远程目录,再次预览或者保存时提示「保存时发现模板锁定信息不一致,是否生成备份文件」。
并且另存了备份后原来修改的内容也没生效。
解决方案:将工程升级到11.0.6及以上即可解决。
8. 11300107 远程设计功能未注册
问题描述:远程的工程未购买远程设计功能点。
排查步骤:登录数据决策系统,查看http://IP:port/webroot/decision/remote/design/vt的返回值,若返回{"data":"success"},代表支持。
解决方案:请联系帆软销售,增购远程设计功能点。
9. 11300108 证书域名信息错误
9.1 什么时候需要证书
证书来源 | 是否需要添加证书 |
---|---|
CA签发的证书 | 仅勾选https即可,无需添加证书 |
通过keytool等工具生成的自签名证书 | 勾选https后,需要添加证书作为信任 |
9.2 不支持免费ssl证书
问题描述:使用了阿里云的免费ssl证书,格式是pfx,配置好后直接访问地址可以进入决策平台,但是远程设计连接失败。
解决方案:不支持免费的ssl证书,可以先转成.keystore证书。
9.3 不支持crt证书
问题描述:远程设计不支持 crt 证书。
解决方案:可以将crt转换成jks的证书。
9.4 远程设计启用https无法连接bi服务器
问题描述:根据文档「配置 SSL 证书实现 HTTPS 访问」后,CAS 单点登录正常,但是远程设计连接服务器无法连接成功。
原因分析:客户本机的hosts文件没有配置域名导致无法本地通过域名访问到服务器。
解决方案:将本机的hosts文件配置好正确的域名之后,重启服务之后本地正常远程设计连接。
9.5 报错 result does not conform to JSON format
问题描述:远程设计连接时报错:Caused by: java.lang.RuntimeException: result does not conform to JSON format!
原因分析:
远程连接登录响应返回的不是json格式数据。
请查看是不是配置了单点登录,如果配置了单点,需要过滤远程设计的请求 /remote/design/*
解决方案:详情请参见:11.0集成CAS后的远程设计
9.6 报错 doesn't match any of the subject alternative names
远程设计连接时报错:doesn't match any of the subject alternative names
9.6.1 证书未绑定域名
原因分析:若报错信息后面跟随的列表为空,说明证书生成时没有绑定域名。
解决方案1:重新生成证书,绑定域名,连接成功。以keytool生成自签名证书为例,下图所示即是绑定的域名:
解决方案2:若更换证书代价较大或者其他原因导致不能绑定域名,在设计器%FR_HOME%\bin\designer.vmoptions文件中添加一行,重启设计器即可:
-Dfine.remote.design.skipHostnameVerifier=true
9.6.2 证书和远程设计的域名不一致
原因分析:远程设计配置时使用的域名不是证书生成时填写的域名。
解决方案:远程设计配置时,输入与证书一致的域名。
9.6.3 IP和域名未映射
原因分析:自签名证书使用时,设计器本地电脑没有在host文件中做ip与域名之间的映射
解决方案:以windows为例,在设计器所在电脑的host文件中添加 ip 域名的映射 如下:
9.7 报错 Unrecognized SSL message, plaintext connection?
问题描述:远程设计连接时报错:Unrecognized SSL message, plaintext connection?
解决方案:端口错误,提供的不是 https 服务的端口,详情请参见:请求遇到异常分析
9.8 报错 unable to find valid certification path to requested target
问题描述:存在以下关键报错信息
SSLHandshakeException sun.security.validator.ValidatorException: PKIX path building failed
SunCertPathBuilderException: unable to find valid certification path to requested target
排查步骤1:参考 9.1 节,确认是否需要添加证书,若无需添加,删除证书即可。
排查步骤2:确认添加的证书是否正确,比如服务器用nginx做了代理,此时远程设计添加的证书应该是nginx使用的https证书。
排查步骤3:尝试添加证书到设计器jre的证书库中。详情请参见:https://www.cnblogs.com/chenxushu/p/7340263.html
排查步骤4:单点也做了https,服务器过滤器前后位置放置错误。
9.9 报错 Tag mismatch
问题描述:远程设计连接时报错:SSLHandshakeException Tag mismatch
解决方案:这是由于jdk bug引起的,请将工程所使用的jdk版本升级。
10. 11300113 不匹配的远程设计版本
问题描述:本地设计器版本和远程JAR包版本不一致,会导致很多问题。详情请参见:服务器和设计器的JAR包不匹配 。
解决方案:建议及时更新,保证服务器和设计器版本一致。
11. 11300114 模板已被超管解除锁定,保存失败,建议另存模板
问题描述:远程设计时,若模板正在被编辑,支持超管解锁模板,正在编辑的用户可另行备份模板。
解决方案:另存模板即可。
12. 11300116 远程设计主机位置不支持重定向
远程连接时,若包含get请求、post请求,禁止重定向,需要修改主机位置。
12.1 配置了虚拟目录的工程无法连接
问题描述:用户工程做了虚拟目录配置,配置远程设计连接是无法连接。
解决方案:在虚拟目录后面(即:Servlet处)加了/desicion,连接成功。
12.2 内网环境无法远程设计连接服务器
问题描述:
没有做重定向和拦截设置,外网映射就正常连接,改成VPN内网之后客户端远程设计就出现连接失败。
日志:failed: Connection timed out: connect
警告:com.fr.workspace.engine.exception.WorkspaceConnectionException: remote design connect failure
解决方案:
1)VPN适配的问题,开启VPN里面客户端连接的所有的权限即可。
2)深信服VPN ,需要将服务器 IP 和 端口设置成 L3VPN资源,设计器才能远程连接访问。
13. 11300117 远程服务器网络配置存在问题
13.1 请求被服务器网络拦截
问题描述:切换远程目录失败 ,且设计器日志中有类似报错:java.util.zip.ZipException: Not in GZIP format
原因分析:远程设计请求被服务器网络拦截了。
解决方案:请服务器网络运维相关负责人,修改网络安全拦截策略,将/webroot/decision/remote/design/*相关请求加入白名单。
13.2 服务器已关闭
问题描述:远程连接测试是通的,切换到远程设计后一直会弹出提示框,提示服务器已关闭(实际是没有关闭的)。
解决方案:远程设计要加上端口,如果是做了直接访问 ip 的设置,那一般是默认的 80 端口。
13.3 Nginx 504 Gateway Time-out
问题描述:远程设计出现切换慢/操作卡,且设计器日志中有类似报错:
com.fr.workspace.engine.exception.WorkspaceConnectionException: Response HTTP/1.1 504 Gateway Time-out by 10.1.1.96:80
原因分析:
Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,
简单来说就是没有请求到可以执行的PHP-CGI。
Nginx 504 Gateway Time-out一般与Nginx.conf的设置有关。
解决方案:
调整nginx.conf参数 重启nginx生效。默认的fastcgi进程响应的缓冲区是8K,可以调大以下参数:
fastcgi_buffer_size 128k
fastcgi_buffers 8 128k
fastcgi_busy_buffers_size 由 128K 改为 256K
fastcgi_temp_file_write_size 由 128K 改为 256K
14. 远程设计数据连接出错
14.1 数据连接失败
问题描述:远程设计时,数据连接失败,或者数据连接测试连接成功,但是新建数据库查询时显示失败。
解决方案:检查服务器和设计器jar包是否一致,保持一致即可。
14.2 数据连接密码为无
问题描述:远程设计时,现有的数据连接密码丢失,无法连接。重新填写密码后连接,都会报错密码为无。设计器日志报错Decrypt failed:Decryption error
解决方案:工程有密钥种子文件,在config下面,如default_alpha、default beta、default gamma,删掉即可。
14.3 远程设计无法看到 Excel 文件
问题描述:远程设计无法看到 Excel 文件,这是需求,暂时无法支撑。
14.4 远程设计选不了json数据集
问题描述:本地可以正常选到json数据集的连接,但是远程设计下选不到。
解决方案:关闭 远程设计数据连接权限控制 。
14.5 远程设计连接成功后看不见数据连接
问题描述:普通用户FR11.0远程设计连接成功,但是看不见数据连接,全是空白的。
原因分析:平台插件-数据平台导致的异常,该插件会影响权限生效
解决方案:直接删除或者禁用插件,如不生效,删除禁用后重启下恢复正常。
15. 集群远程设计出错
15.1 模板打开是新建的空白模板
问题描述:远程设计所有模板都无法打开,所有模板打开是新建的空白模板
原因分析:redis 存在脏数据
解决方案:清空redis,如果是使用redis集群,每个节点都需要清空
15.2 模板无法保存
问题描述:远程设计时出现模板保存不上,且服务器日志中有以下类似报错:java.lang.NullPointerException
原因分析:redis 存在脏数据
解决方案:清空redis,如果是使用redis集群,每个节点都需要清空
15.3 切换远程目录卡慢,打开报表卡死
问题描述:远程设计目录切换速度很慢,打开服务器上模板直接卡死。
排查方向:
1)集群环境,检查 nginx 等配置是否正确,调整 nginx 的参数。
2)查看 redis 状态服务器是否异常,重启 redis 之后再次远程。
15.4 集群环境远程设计连接LogDB查询报错
问题描述:远程设计连接后,数据集查询 LogDB 中的表,输出 SQL 时报错。
原因分析:Swift 取数限制导致。
解决方案:
1)删除集群节点中旧的 LogDB。
2)清空 FineDB 中的 fine_swift_seg_location 和 fine_swift_segments 两张表。
3)重启集群节点。
15.5 Response HTTP/1.1 411 Length Required by
问题描述:
远程设计测试连接成功,但切换工作目录失败,日志报错:Response HTTP/1.1 411 Length Required by
原因分析:
Nginx 1.3.9以下版本,当用户POST一个带有文件的请求的时候,出现HTTP 411错误,需要升级nginx版本,或为nginx安装chunkin-nginx-module补丁
解决方案:
1)确认nginx版本,如果是低于Nginx 1.3.9版本,升级nginx版本,或为nginx安装chunkin-nginx-module补丁
2)升级设计器版本至10.0.8及以上版本,远程设计的post请求头中已经加入了Content-Length
16. 远程设计无法保存预览模板
16.1 一部分模板无法打开
问题描述:
1)远程连接使用设计器打不开一部分模板,一部分可以打开,设计器日志报错:ERROR: read error report content,ERROR: 模板缺失
2)远程连接使用设计器双击打开几个 cpt 打不开,并且自动新建了一个空 cpt,日志里有远程设计无权限的报错。
原因分析:
1)FTP 磁盘内存满了后,造成了使用设计器修改或者新建的模板,点击保存后为 0KB,且没有生成 .tmp 备份文件,无法还原。
2)用户账号权限无法打开模板或服务器中用户权限缺失。
解决方案:
1)清理 FTP 磁盘内存即可。
2)使用超管账号登录,或修改服务器中的用户权限。
16.2 远程设计不能保存模板
问题描述:目录切换为远程设计,所有已经做好的模板不能进行改动保存,保存报错:保存失败!新建模板可以进行保存,远程的模板切换到本地默认环境也是可以保存的。本地新建模板以及重新保存之前的模板都是正常的。不能保存的时候报错:Workspace rpc target not found by class interface com.fr.esd.core.remote.ESDConfigEventOperator , reasons may be : 1. servers' jar version is not consistence with client 2. some plugins are not consistence , please check its version。
原因分析:这个路径 classes/com/fr/config/server/server.xml 下的 server.xml 文件本来应该存在 fine-activator.jar 里。classes 优先级更高,优先读取这个路径下的文件造成的异常。
解决方案:删除服务器中 classes/com/fr/config/server/server.xml 下的 server.xml 文件,重启服务器。
17. 其他问题
17.1 远程设计插件安装逻辑
对于设计器和服务器都会用到的插件,要求服务器端和设计器端都要安装:
1)若设计器端已经有插件,服务器端的插件下载、删除、禁用 不会立即生效,需要等几分钟才会生效
2)若服务器端有插件,设计器端没有插件,则插件不会生效,需要切换到本地进行插件安装。
不过设计器切换到本地时对插件设置的“禁用”状态不会影响到远程设计时的插件使用,远程设计时,插件的状态受服务器控制。
简单理解就是只需要保证设计器本地有这个插件即可。