はじめに
Synthetic Monitoring において Scripted Browser や Simple Browser を用いて監視を行っている際、構築していただいたアプリケーションサーバへの監視が "Could not connect to server" というエラーメッセージで失敗する場合があります。本ブログ記事では、この "Could not connect to server" エラーの一つの発生要因について解説します。
症状
多くの状況で、Scripted Browser や Simple Browser での監視で問題が発生する場合、監視エラーは監視対象となるアプリケーションサーバに起因して発生します。しかし、以下のような状況が発生する可能性があります。
- 特定の TCP ポートに関する監視でのみエラーが発生する。ポート番号を変更してアプリケーションサーバを起動した上で、新しいポート番号に対して監視を実行するとエラーが発生しなくなる
- SyntheticCheck イベントの error 属性を確認しても "Could not connect to server" というメッセージが記録され、エラー詳細を判断できない
- プライベートロケーションを用いた監視では、失敗が必ずしも 100% にならないことがある。あたかも、アプリケーションサーバや監視用コンテナのリソース不足であるかのような挙動になるが、どの箇所を調査してもリソース不足を確認できない
このような状況を確認された場合には、本ブログ記事の続きをご確認ください。
原因
「症状」の項目に記載された事象を観測された場合には、監視実行時に ERR_UNSAFE_PORT エラーが Scripted Browser/Simple Browser のインフラストラクチャ内で発生している可能性があります。Scripted Browser/Simple Browser は Selenium WebDriver を用いて実現され、Chrome/Firefox のヘッドレスブラウザを選択することが可能です。その様なモダンな Web ブラウザでは、21 (FTP), 25 (SMTP), 6000 (X11), 10080(Amanda) など、特殊な用途のポートへのリクエストを検知すると、デフォルトの挙動として通信を遮断し、ERR_UNSAFE_PORT エラーが発生します。これらのポートへのブラウザからの通信を許可している場合、クロスプロトコル攻撃が成立する可能性がある、などセキュリティリスクが生じるためそのような動作になっています。
Scripted Browser/Simple Browser が利用する Selenium 環境でも同様の制限が加わっています。また、2026 年 5 月時点での Synthetic Monitoring の仕様としては、この制限を解除することができません。現時点での Synthetic Monitoring の挙動として、ERR_UNSAFE_PORT が発生した場合には汎用エラーである "Could not connect to server" エラーにラップされる動作となっています。さらに、プライベートロケーションの様な監視のたびにコンテナをコールドスタートするような環境では、100 % の確率で対象ポートへの接続がブロックされるような状況にはならない場合があることを確認しています。この事象の原因として、あくまで推測ではありますが、ブラウザのセキュリティポリシー(ポート制限)の初期化が完了する前に監視が実行され、通信がブロックされることなく監視が成功する場合がある、といった状況があるのではないかと考えられます。
切り分け
切り分け手順としては、以下のような手順が考えられます。
- アプリケーションサーバのポート番号を変更してテストする
- アプリケーションサーバのポート番号の即座の変更が難しい場合には、Node.js 環境で稼働する Scripted API や最もシンプルな Ping モニターなど、一時的にブラウザエンジンの影響を受けない種類のモニタを用いてテストする
Scripted API のテスト記述方法については、以下の公式ドキュメントをご参照ください。
Write synthetic API tests | New Relic Documentation
上記の様なテストにより "Could not connect to server" エラーが発生しなくなるのであれば、ERR_UNSAFE_PORT エラーの影響を受けている可能性が高いと判断可能です。
解決
ERR_UNSAFE_PORT の対象ポートをご利用になる場合には、Synthetic Monitoring 以外の接続にも影響があることが想定されるため、基本的には ERR_UNSAFE_PORT の対象となるポート番号の利用は避けていただけますと幸いです。該当する場合には、アプリケーションサーバのポート番号を変更していただくことをお勧めします。
まとめ
本ブログ記事では、Synthetic Monitoring において Scripted Browser や Simple Browser で監視を行っている場合に ERR_UNSAFE_PORT エラーが発生することにより、監視結果として "Could not connect to server" エラーが SyntheticCheck に記録される状況を確認しました。この様な状況では、基本的にはアプリケーションサーバで利用するポート番号を変更していただくことを推奨します。ご利用のポート番号が ERR_UNSAFE_PORT の対象であるか調査していただき、対象である場合には対象外のポートにご変更ください。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。