最新バージョンのNode.js(現在はNode.js 22)を搭載した、最新のScripted APIモニターランタイムをご紹介します。最新のランタイムはNew RelicがサポートするNode.jsの最新リリース版を自動的に使用します。これにより、APIモニターが最新のNode.js標準に適合する環境で実行されることが保証され、セキュリティ、安定性、パフォーマンスが向上します。
要対応:Node.js 22へのアップグレードの影響
Node.js 16からNode.js 22へのアップグレードの一環として、ランタイムはプロセスのライフサイクルに関してより厳格になりました。モニタースクリプトに未処理のオープンハンドル(未解決のPromise、残存するタイマー、閉じられていないネットワーク接続など)が含まれている場合、モニターは失敗します。
この問題の解決方法:モニタースクリプトを最新のランタイムで検証し、スクリプトの実行が終了する前にすべてのハンドルが適切に閉じられていることを確認してください。失敗した検証はRuntime Upgrades UIに表示されます。ランタイムアップグレードエラーのトラブルシューティングを参照してください。
影響を受ける対象
New Relicは以下のアップグレードプロセスを自動的に処理します。
- パブリックロケーションのScripted APIモニター
- パブリックロケーションとプライベートロケーションの両Scripted APIモニター(ハイブリッド)
New Relicは、すべてのロケーション設定に自動検証とアップグレードを適用します。
重要
プライベートロケーションのみで実行されるモニターは、手動でのアップグレードが必要です。
最新版とは
モニター作成/アップグレードのドロップダウンにある最新版ランタイムオプションは、New Relicがサポートする最新バージョンのNode.jsを自動的に使用します。特定のNode.jsバージョン(Node.js 16やNode.js 20など)に固定するのではなく、最新版を使用すると、モニターは常に最新の機能、パフォーマンスの向上、およびセキュリティアップデートを備えた、利用可能な最新のNode.jsリリースで実行されるようになります。
NerdGraph経由でモニターをアップグレードする
モニターのランタイムをプログラムでアップグレードするには、以下のNerdGraphミューテーションを使用してください。モニターのエンティティGUIDが必要です(モニターの設定で確認できます)。
Scripted APIモニター
mutation { syntheticsUpdateScriptApiMonitor( guid: "YOUR_MONITOR_GUID" monitor: { runtime: { runtimeType: "NODE_API", runtimeTypeVersion: "LATEST" } } ) { errors { description type } }}ヒント
スクリプト化ブラウザモニターの場合は、代わりにruntimeType: "CHROME_BROWSER"とruntimeTypeVersion: "LATEST"を使用してください。
自動化されたアップグレードプロセス
最新のNode.jsランタイムへのスムーズな移行を確実にするため、New Relicは既存のモニターをプロアクティブにテストします。このプロセスには以下の処理が含まれます。
バックエンド検証
New Relicは、既存のScripted APIモニターに対し、バックエンドで最新のNode.jsランタイム(現在はNode.js 22)を自動的にテストします。
ヒント
この検証によって、syntheticチェックを消費したり、本番環境の結果に影響を与えたりすることはありません。
自動アップグレード
検証に成功した場合:New Relicはユーザーに代わってモニターを最新のランタイムに更新します。
障害の手動確認
検証に失敗した場合:New Relicはアップグレードを強制実行しません。検証の失敗は、多くの場合、Node.js 22によるオープンハンドルの厳格な処理が原因で発生します。アップグレードを実行する代わりに、New Relicは検証に失敗したモニターにフラグを付け、Synthetics Nerdlet UIのランタイムアップグレード機能に表示します。
そこで失敗の詳細を確認し、スクリプト構文のトラブルシューティングを行い、スクリプトを修正して手動でモニターを検証・アップグレードすることができます。
アップグレードに関する問題のトラブルシューティング
Node.js 22にアップグレードする際の最も一般的な問題は、未解決のPromise、残存するタイマー、閉じられていない接続、HTTP/HTTPS接続など、未処理のオープンハンドルです。各種の問題の詳しい解決策とコード例については、ランタイムアップグレードに関するエラーのトラブルシューティングを参照してください。
Node.js 22の互換性に影響する変更
より厳格なオープンハンドル管理に加えて、Node.js 22には注意すべきその他の変更が含まれています。
更新されたモジュールサポート
- ESモジュール:ESモジュールのサポートが向上しましたが、インポートが適切に構成されていることを確認してください。
- CommonJS:CommonJSモジュールは引き続き動作しますが、より厳密な検証が行われる場合があります。
非推奨のAPI
以前のNode.jsバージョンで非推奨となった一部のAPIは、Node.js 22で削除されました。削除された機能の詳細については、Node.js 22のchangelogを確認してください。
パフォーマンスの向上
Node.js 22には、タイミングに敏感なテストに影響を与える可能性のあるパフォーマンスの改善が含まれています。モニターが特定のタイミング動作に依存している場合は、タイムアウトの見直しを検討してください。
Node.js 22のベストプラクティス
Scripted APIモニターがNode.js 22でスムーズに動作するようにするには:
- async/awaitを使用:エラー処理を改善するために、コールバックベースのコードをasync/awaitに変換します。
- リソースのクリーンアップ:常に接続を閉じ、タイマーをクリアし、イベントリスナーを削除してください。
- すべてのPromiseを処理:Promiseを作成する際は、必ずawaitを使用するか、結果を処理してください。
- 適切なタイムアウトを設定:ハングを防ぐため、APIコールには妥当なタイムアウトを使用してください。
- ローカル環境でのテスト:本番モニターのアップグレードの実行前に、Node.js 22を使用してローカル環境でスクリプトをテストします。
例:完全なAPIモニター
const assert = require('assert');const $http = require('request');const { promisify } = require('util');
// Promisify request methodsconst httpGet = promisify($http.get);const httpPost = promisify($http.post);
async function runAPITest() { try { // 1. Test GET endpoint console.log('Testing GET endpoint...'); const getResponse = await httpGet('https://api.example.com/users'); assert.equal(getResponse.statusCode, 200, 'GET request failed');
// 2. Parse and validate response const users = JSON.parse(getResponse.body); assert(Array.isArray(users), 'Response is not an array'); assert(users.length > 0, 'No users returned');
// 3. Test POST endpoint console.log('Testing POST endpoint...'); const postResponse = await httpPost({ url: 'https://api.example.com/users', json: true, body: { name: 'Test User', email: 'test@example.com' } }); assert.equal(postResponse.statusCode, 201, 'POST request failed');
console.log('All tests passed!'); } catch (error) { console.error('Test failed:', error.message); throw error; // Fail the monitor }}
// Run the testawait runAPITest();よくあるご質問(FAQ)
影響を受けるモニタータイプは何ですか?Scripted APIモニター。スクリプト化ブラウザモニターは個別に影響を受けます — Syntheticモニターを最新のChromeおよびNode.js 22にアップグレードするを参照してください。Simple browserモニターやpingモニターは影響を受けません。
アップグレードの実行前にスクリプトをローカル環境でテストできますか?はい。Node.js 22をローカル環境にインストールし、モニタースクリプトをテストして、アップグレードの実行前に問題を検出することができます。
アップグレードの実行後にモニターが失敗した場合、ロールバックできますか?はい。モニター設定から、またはNerdGraphを介して、ランタイムバージョンを元に戻すことができます。
モニターが自動アップグレードされるタイミングはいつですか?New Relicはまず検証を実行します。検証に成功すると、New Relicは自動的にモニターをアップグレードします。検証に失敗した場合、Runtime Upgrades UIに失敗が表示され、手動で修正してアップグレードする必要があります。
サポートが必要な場合、
アップグレードプロセス中に問題が発生した場合:
- Synthetics NerdletのRuntime Upgrades UIでエラーメッセージを確認します。
- 未処理のPromiseや開いたままの接続がないか、モニタースクリプトを確認します。
- アップグレードの実行前に、Node.js 22を使用してローカル環境でスクリプトをテストします
- 検証失敗時のトラブルシューティングのサポートについては、New Relicサポートにお問い合わせください。
関連ドキュメント: