1. WebSocket 連結失敗現象
1)管理者登入數據決策系統,點選「管理系統>智慧維運>記憶體管理」,「記憶體預警」Tab 下「記憶體利用率和「CPU 利用率」兩張圖顯示空白。
顶部弹出提示信息:Socket 未连接,实时内存显示等异常,相关端口可能未开放
2)管理者登入數據決策系統,點選「管理系統>智慧維運>平台日誌」,「存取統計」Tab 下「當前系統線上人數」無法正確顯示。範本執行過程統計如記憶體、耗時等無法記錄。
頂部彈出提示資訊:Socket 未連結,系統存取使用者統計等異常,請開啓相關埠,相關埠可能未開放
3)使用者點選「管理系統>資料連結」,進入資料連結編輯介面,可能存在多人同時編輯同一個資料連結的情況。
頂部彈出提示資訊:Socket 未連結,可能存在多人同時編輯造成衝突,相關埠可能未開放
4)踢出登入失效,不能實時踢出,在框架內顯示登入頁面,即沒有跳出框架直接跳轉到登入介面。如下圖所示:
注:該問題出現的場景:單一登入踢出、禁用使用者、修改使用者密碼、修改認證方式、切換同步匯入、平台使用使用者禁用使用者/開啟限制開關,更換 Lic 等。
5)使用者收不到右下角訊息彈窗且小鈴鐺處無訊息提示,但是可以點選小鈴鐺進入訊息面板查看。
6)登入逾時,無法獲取正確的 token 有效期
使用者登入數據決策系統時,不勾選「保持登入狀態」。登入逾時設定為 1 小時,若使用者在3點登入,3點20分在平台進行了操作。
WebSocket 連結成功,應為 4 點 20 被踢出(平台無操作情況下)。
WebSocket 未連結,則不能重新獲取 token ,4 點即被踢出。
使用者登入數據決策系統時,勾選「保持登入狀態」,預設無操作 14 天后被踢出,若 14 天內在平台上操作,不能重新獲取 token ,依舊 14 天后被踢出。
注1:2020-08-31 及之後的 JAR ,Websocket 未連結時,不會出現這個現象。
注2:2020-08-31 之前的 JAR ,若無法開放額外埠或不允許使用 socket,可以安裝「重新整理登入狀態插件」解決這個問題。
管理者登入平台後,頂部彈出提示資訊:Socket 未連結,使用過程中將無法保持登入狀態,相關埠可能未開放
每次重新整理平台頁面也會彈出提示,重新整理指瀏覽器重新整理如 F5。
注:2020-08-31 及之後的 JAR ,Websocket 未連結時,沒有該提示。
7)在插件商城安裝或者刪除插件時沒有成功或者失敗的提示。
2. 應答 Websocket 連結失敗
使用者可透過三種方法應答 Websocket 連結失敗。
1)管理者登入數據決策系統,查看「管理系統>智慧維運>記憶體管理>實時記憶體」的兩張圖片,不顯示則未連結。
2)F12 開啟控制檯,輸入「Dec.socket.connected」,如果是「false」表示未連結。
3)F12 開啟控制檯,如果有關於 48889(代理伺服器預設埠號) 之類 Socket 埠的報錯,那就是沒有連結成功。
3. 直接存取工程連結失敗
適用場景:未透過負載均衡存取工程,直接存取工程,websocket連結失敗
請使用者根據下文依次排查並優化。
3.1 應答埠是否被佔用
超級管理者可透過「fine_conf_entity可视化配置插件」查看 WebSocket 埠/轉發埠。
端口 | JAR包 | 参数名 | 参数默认值 |
---|---|---|---|
Websocket 端口 | - | WebSocketConfig.port | ["48888", "49888"] |
Websocket 转发端口 | 2019-11-08 之前 | WebSocketConfig.requestPort | 48889 |
2019-11-08 及之后 | WebSocketConfig.requestPorts | 48889 |
應答埠/轉發埠是否被其他進程佔用,若被佔用且進程很重要,請更換其他可用埠。
超級管理者可透過「fine_conf_entity視覺化配置插件」修改 WebSocket 埠。重啓伺服器後設定生效。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
3.2 應答埠配置是否未生效
WebSocket埠/轉發埠的設定有一些注意事項,請應答是否正確的設定了埠號:
1)埠號可設定範圍:1024~65535,若為多個值,設定格式為:[埠號1,埠號2,埠號3]。
2)建議「WebSocket轉發埠」的值要多於叢集節點數,保證每個節點都會選擇當前可用的埠,不會因為埠占用而導致伺服器無法啟動。
3)建議「WebSocket埠」設定多個值,作為備用,防止一臺伺服器部署了多個工程,埠被佔用。
4)不要設定埠號為伺服器遠端連結埠 3389。
5)如果工程和 nginx 負載均衡在一個環境下,不要重複設定某個埠號既是 WebSocket 埠,又是 WebSocket 轉發埠。
6)若 WebSocketConfig.port、WebSocketConfig.requestPort、WebSocketConfig.requestPorts 欄位後面有空格,配置不生效。
7)若 WebSocketConfig.port、WebSocketConfig.requestPort、WebSocketConfig.requestPorts 大小寫錯誤,配置不生效。
8)WebSocketConfig.requestPort 和 WebSocketConfig.requestPorts 不能同時存在於 fine_conf_entity 表中,否則會出錯。
3.3 應答埠是否對外開放
排查步驟:
若確定 WebSocket 埠/轉發埠未被其他進程佔用,請確定設定的埠是否對外開放。
linux:nc -vz -w 2 [ip] [port]
windows:telnet 伺服器ip websocket埠
解決方法:
1)開放伺服器的防火牆埠限制。
2)開啓阿里雲/華為雲/微軟雲伺服器的安全組埠限制。
3)關閉阿里雲的健康檢查。
3.4 應答是否為HTTPS環境
憑證配置的https環境需要配置websocket,參考文檔:HTTPS環境配置WebSocket
1)鍵路徑:
Tomcat 配置中 server.xml 裏面絕對路徑/相對路徑都可以。
數據決策系統中「系統管理>標準>https 設定」中「SSL 鍵路徑」只支援絕對路徑。
2)設計器不支援配置 HTTPS,EXE 安裝的 BI 不支援配置 HTTPS。
3)若 Nginx 配置了 https,那麼就不要在「系統管理>標準>https」設定中進行配置。
4)工程配置了 https,http 和 https 都可以存取工程。但是 websocket 不能同時支援,https 連結正常,http 就會連結失敗。
3.5 JAR 包冲突
問題描述:
工程下的 JAR 包出現衝突時,會出現伺服器部署精靈,提示「WebSocket 埠異常」,如下圖所示:
解决方法:
刪除造成衝突的 JAR 包,殺死工程的進程,等待 2 分鐘埠釋放後,重啓工程。
如果 Apache Impala 是從官網下載的,不要將 slf4j-log4j12-1.5.11.jar和slf4j-api-1.5.11.jar 放到%FineReport%\webapps\webroot\WEB-INF\lib下,否則會造 Websoket 埠異常。
3.6 應答伺服器請求是否太慢
WebSocket 連結時間代碼裏設定的為 20 秒,請求時間超過的話,直接判定 WebSocket 連結失敗。
3.7 查看控制檯報錯
F12 開啟控制檯,WebSocket 常見報錯及可能原因如下:
net::ERR_SSL_PROTOCOL_ERROR:工程配置了https,websocket沒有配置。
net::ERR_EMPTY_RESPONCE:伺服器配置了https,但是用的http存取。
net::ERR_CONNECTION_REFUSED:埠未開放或者該埠沒有被監聽。
net::ERR_CONECTION_TIMEOUT:網路問題,域名決議速度慢。
3.8 瀏覽器快取
問題描述:同一臺電腦上不同瀏覽器存取工程,有的websocket連結成功,有的連結失敗。
解決方法:清理瀏覽器快取即可。
4. 透過負載均衡存取工程連結失敗
適用場景:透過負載均衡存取工程,websocket連結失敗
請使用者根據下文依次排查並優化。
4.1 應答伺服器上存取websocket是否連結正常
在伺服器上用 localhost 存取工程,應答websocket是否正常連結。
1)若websocket連結,進入 4.2 節排查步驟。
2)若websocket連結失敗,請應答websocket埠是否被其他進程佔用。
超級管理者可透過「fine_conf_entity視覺化配置插件」查看 WebSocket 埠/轉發埠。
端口 | JAR包 | 參數名 | 參數預設值 |
---|---|---|---|
Websocket 端口 | - | WebSocketConfig.port | ["48888", "49888"] |
Websocket 转发端口 | 2019-11-08 之前 | WebSocketConfig.requestPort | 48889 |
2019-11-08 及之后 | WebSocketConfig.requestPorts | 48889 |
應答埠/轉發埠是否被其他進程佔用,若被佔用且進程很重要,請更換其他可用埠。
超級管理者可透過「fine_conf_entity視覺化配置插件」修改 WebSocket 埠。重啓伺服器後設定生效。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
4.2 應答不透過負載伺服器,直接存取工程是否連結正常
不透過負載均衡伺服器,第三方電腦直接存取工程應答websocket是否連結正常。
1)若直接存取工程websocket連結失敗,則用本文第 3 章內容進行排查。
2)若直接存取工程websocket連結正常,透過負載伺服器存取工程,websocket連結失敗,則可應答是負載伺服器配置問題,需要排查負載配置。
4.3 應答負載均衡伺服器上監聽埠是否正常
1)應答負載均衡伺服器上用來監聽容器埠、websocket埠的兩個埠是否正常,有沒有被其他進程佔用。
2)應答存取電腦>負載均衡伺服器>工程websocket,這條路上的相關埠都是暢通的。
4.4 應答負載伺服器轉發配置是否正確
舉例一個BI工程,用nginx進行轉發映射。
tomcat埠預設8080,websocket埠預設48888,49888,websocket轉發埠預設48889
用nginx進行轉發時,可用nginx伺服器上的任意閒置埠轉發tomcat的8080埠,用nginx伺服器上的48889埠轉發工程的48888埠
參考文檔:Nginx.conf 配置手冊
注1:nginx用48889转发工程的48888,需保证访问电脑到nginx的48889是通的,nginx服务器到工程服务器的48888是通的。
F5等硬件负载和nginx使用原理相同,容器端口和websocket端口都要转发。
注2:nginx转发websocket端口时,需要配置ip_hash,如下图所示:
4.5 負載均衡相關配置限制
所有的負載均衡配置需注意:不要開啓健康檢查、是不是有安全組策略導致埠未開放、需要開啓對話保持。
1)開放伺服器的防火牆埠限制。
2)開啓阿里雲/華為雲/微軟雲伺服器的安全組埠限制。
3)關閉阿里雲的健康檢查。
4)F5硬體負載需要開啓對話保持。
5. 注意事項
1)重啓工程時,需要殺死工程下運作的進程,等待 2 分鐘埠釋放後,再重啓工程,否則有可能重啓失敗。
2)透過上文排查修改,websocket 可正常連結後,僅能獲取之後的記憶體和 CPU 顯示、平台日誌等資料。歷史資料無法恢復。