一.WebSocket接続失敗について
現象:
1.スーパー管理者のアカウントでポータルにログインします。管理システム-スマート運用保守-メモリ管理に入ると、メモリアラートにおけるメモリ使用率とCPU使用率が空白となっています。
エラーメッセージ:ソケットが接続されていません、リアルタイムメモリ表示異常、関連するポートが開いていない可能性があります。
2.スーパー管理者のアカウントでポータルにログインします。管理システム-スマート運用保守-プラットフォームログに入ると、アクセス統計パネルにおけるオンライン人数、メモリ使用などが正しく統計できません。
エラーメッセージ:ソケットが接続されていません、システムアクセスユーザ統計異常、関連するポートが開いていない可能性があります。
3.一般ユーザのアカウントでポータルにログインします。管理システム-データ接続のパネルに入ると、複数のユーザが同一のデータ接続を編集して、競合が起こる可能性があります。
エラーメッセージ:ソケットが接続されていません。複数の人が同時に編集して競合を引き起こしている可能性があります。
4.後者優先ログインが正しく動作しない:帳票画面にログイン画面が表示しています。
一般では、自動でログイン画面に戻るようにデザインされています。
問題が起こるシーン:後者優先ログイン、ユーザを禁止、ユーザパスワード変更、認証方式変更、同期インポート切り替え、ユーザ使用制限、Lic切り替えなど。
5.ユーザがメッセージを受けることができません。しかし、ボタンをクリックすると、メッセージを確認できます。
6.トークンの有効期限の確認ができないため、ログインタイムアウト機能に異常が起こります。
ユーザがログイン保持を無効にすると、既定ではログインタイムアウトが1時間に設定されます。ユーザが3時にログインして、3時20分にプラットフォームで操作する場合:
WebSocket 接続が成功している場合、このまま操作がなければ、4時20分に自動でログアウトになります。
WebSocket 未接続の場合、トークンの取得が失敗するため、4時に強制ログアウトされます。
ユーザがログイン保持を有効にすると、既定ではログインタイムアウトが14日間に設定されます。操作があるとしても、トークンの取得が失敗すれば、14日後にログアウトとなります。
スーパー管理者のアカウントでポータルにログインすると、エラーメッセージが表示されます:ソケットが接続されていません、使用中にログインしたままにすることはできません、関連するポートが開いていない可能性があります。
F5ボタンでウェブページを再読み込みすれば、再びエラーメッセージが表示されます。
注:2020-08-31 及び以降の JAR ファイルでは、WebSocket 未接続の場合、ヒントが表示されません。
7.プラグインストアでプラグインインストールの成功・失敗ヒントが表示されません。
二.WebSocket接続の状況を確認する
以下の3種類の方法でWebSocket接続失敗の状況を確認できます。
1.スーパー管理者のアカウントでポータルにログインします。管理システム-スマート運用保守-メモリ管理-メモリアラートでメモリとCPUの使用率を確認します。表示されなければ、接続が失敗しています。
2.F12でコンソールを開き、「Dec.socket.connected」を確認します。「false」の場合、接続が失敗しています。
3.F12でコンソールを開きます。ポート 38889(既定ポート)などSocketポートに関するエラーメッセージが表示されていれば、接続が失敗しています。
三.プロジェクトへの直接アクセスが失敗している時の対処法
シーン:ロードバランシングなしでプロジェクトに接続する場合、WebSocketに接続できません。
下の手順でご確認ください。
1.ポートの使用状況を確認する
ポート | JARファイル | パラメータ名 | 既定値 |
---|---|---|---|
Websocket ポート | - | WebSocketConfig.port | ["38888", "39888"] |
Websocket 転送ポート | 2019-11-08 以前 | WebSocketConfig.requestPort | 38889 |
2019-11-08 及び以降 | WebSocketConfig.requestPorts | 38889 |
ポート、転送ポートが使用されているか確認します。ほかの重要なプログラムに使用されている場合、他のポートを使用してください。設定を反映するには、サーバを再起動してください。
注: FineDB データベースについては、 FineDB テーブル構造 をご確認ください。
2.ポート設定が発効しているか確認する
WebSocket ポート、転送ポートの設定には、いくつかの注意事項があります。ポートが正しく設定されているか確認してください。
ポートの設定可能な範囲:1024~65535。複数値を設定するには、[ポート1、ポート2、ポート3]の形で設定してください。
複数のWebSocektポートを設定すると、ポートがすでに使用されていることで起動が失敗する問題を防ぐことができます。
ポート番号をリモートコントロールポート3389に設定しないでください。
ポートを同時にWebSoekctポートとWebSocket転送ポートに設定しないでください。
WebSocketConfig.port、WebSocketConfig.requestPort、WebSocketConfig.requestPorts の後ろにスペースがついている場合、設定が反映できません。
WebSocketConfig.port、WebSocketConfig.requestPort、WebSocketConfig.requestPorts の大文字・小文字設定が間違っている場合、設定が反映できません。
WebSocketConfig.requestPort 和 WebSocketConfig.requestPorts が同時に fine_conf_etity に存在している場合、 設定が失敗になります。
3.ポートの開放状態を確認する
手順:
WebSocket ポート、転送ポートが他のプロセスに使用されていない場合、ポートがオープン状態か確認する必要があります。
linux:nc -vz -w 2 [ip] [port]
windows:telnet サーバip websocketポート
解決方法:
サーバファイアウォールのポート制限を開放します。
AWSセキュリティグループのポート制限を開放します。
4.HTTPS環境が有効にされているか確認する
1.暗号鍵パス:
Tomcat 設定における server.xml では、絶対パス、相対パスのどちらでも構いません。
ポータルのシステム管理-標準パネルのHttps設定-SSLキーパスは絶対パスのみサポートしています。
2.デザイナ、またはEXEでインストールされているFineBIではHTTPSをサポートしていません。
3.httpsがNginxで設定されている場合、システム管理-標準-Https設定で設定する必要はありません。
4.プロジェクトでhttpsが設定されている場合、httpとhttpsの両方でプロジェクトにアクセスできますが、websocketはhttpsのみにアクセスできます。
5.JARファイル衝突
問題:
プロジェクトにおけるJARファイルに衝突が起こる場合、サーバーデプロイウィザードが表示されます。
エラーメッセージ:websocketポート衝突
解決方法:
問題あるJARファイルを削除して、プロジェクトのプロセスを終了させます。2分間経つとポートが解放されるので、その後にプロジェクトを再起動できます。
WebSocketポート衝突が起こるので、Apache Impala は公式サイトからダウンロードされている場合、slf4j-log4j12-1.5.11.jarとslf4j-api-1.5.11.jar を%FineReport%\webapps\webroot\WEB-INF\libに置かないでください。
6.サーバーリクエストが遅すぎるか確認する
websocket接続タイムアウトは、20秒と設定されているため、接続時間を超えていると、即時に接続失敗と判定されます。
7.システムエラーメッセージを確認する
F12 でコンソールを開き、エラーメッセージを確認します。websocket関係のエラーメッセージ、および解決方法は以下の通りです:
net::ERR_SSL_PROTOCOL_ERROR:プロジェクトでhttpsが設定されているが、websocketでは設定されていません。
net::ERR_EMPTY_RESPONCE:サーバーでhttpsが設定されているが、httpでアクセスされています。
net::ERR_CONNECTION_REFUSED:ポートがオープンにされていないか、使用できていません。
net::ERR_CONECTION_TIMEOUT:URL解析が遅すぎます。
8.ブラウザキャッシュ
問題:同じパソコンの複数のブラウザでプロジェクトにアクセスする場合、一部のwebsocket接続が成功している一方、一部が失敗しています。
解決方法:ブラウザキャッシュをクリアします。
四.ロードバランシングを通じるアクセスが失敗している時の対処法
シーン:ロードバランシングが設定されている場合、websocket接続が失敗しています。
下の手順でご確認ください。
1.サーバーからwebsocketに接続できるか確認する
サーバーから localhost を通じてプロジェクトへアクセスし、websocket接続が成功しているか確認します。
1.websocket接続が成功している場合、四.2.ロードバランシングサーバーなしで接続できるか確認するをご確認ください。
2.websocket接続が失敗している場合、websocketポートが他のプロセスに使用されているかご確認ください。
JARファイル | パラメータ名 | パラメータ既定値 | |
---|---|---|---|
Websocket ポート | - | WebSocketConfig.port | ["38888", "39888"] |
Websocket 転送ポート | 2019-11-08 以前 | WebSocketConfig.requestPort | 38889 |
2019-11-08 及び以降 | WebSocketConfig.requestPorts | 38889 |
ポート、転送ポートが使用されているか確認します。ほかの重要なプロセスに使用されている場合、他のポートを使用してください。設定を反映するには、サーバを再起動してください。
注: FineDB データベースについては、 FineDB テーブル構造 をご確認ください。
2.ロードバランシングサーバーなしで接続できるか確認する
もう一台のコンピューターから、ロードバランシングサーバーではなく、直接でwebsocketサーバに接続します。
1.直接アクセスが失敗した場合、三.プロジェクトへの直接アクセスが失敗しているの章を確認します。
2.直接アクセスが成功しているが、ロードバランシングサーバーへのアクセスが失敗している場合、ロードバランシングの設定を確認します。
3.ロードバランシングサーバーポートの動作を確認する
1.ロードバランシングサーバーのコンテナ、websocket両方ポートが正しく動作されているか、他のプログラムに使用されているか確認します。
2.クライアント-ロードバランシングサーバー-プロジェクトwebsocketまでの接続を確認します。
4.ロードバランシングサーバーの設定を確認する
nginxでFineReportプロジェクトを転送しているとします。
tomcatの既定ポートは8080、websocketの既定ポートは38888、39888、websocket既定転送ポートは38889となっています。
nginxで転送する場合、任意の未使用のポートでtomcatが使用している8080ポートを転送し、nginxサーバが使用している38889ポートでプロジェクトの38888ポートを転送します。
注1:nginxで38889ポートで38888ポートを転送しているとします。この場合、クライアントからnginxの38889ポートへの接続、nginxサーバからプロジェクトサーバの38888ポートへの接続が成功していることをご確認ください。F5などのハードウェアロードバランシング手段は、nginxと原理が同じで、コンテナポートとwebsocketポート両方の転送が必要となっています。
注2:nginxでwebsocketポートを転送する場合、ip_hashの設定が必要となっています。下の画像の通りです。
5.ロードバランシング設定
ロードバランシングのパーシステンスを有効にし、セキュリティグループストラテジーをご確認ください。
1.サーバーファイアウォールのポート制限を解除します。
2.AWSのロードバランシングポート制限を解除します。
3.F5のパーシステンスを有効にします。
五.注意事項
1.プロジェクトを再起動するには、プロジェクトが対応しているプロセスを終了させる必要があります。2分間待ってから、ポートが解放されるので、プロジェクトを再起動できます。
2.websocketの接続問題が解決されても、websocket接続が失敗している期間のメモリ、CPU使用、プラットフォームログなどは記録されません。