プロキシに追加する Node.js コードがすべて正しく機能することを確かめた後で、それを Edge にデプロイすることをおすすめします。このトピックでは、Node.js アプリケーションを含むプロキシをデプロイした後にデバッグおよびトラブルシューティングする方法について説明します。
接続プールサイズの増加によるパフォーマンスの向上
パフォーマンスの低下に気づいたら、maxSockets を使用してデフォルトの Node.js 接続プールサイズを増やすか、完全にソケットのプールを無効にできます。詳細とサンプルコードについては、Apigee コミュニティで Node.js Performance Tips: Socket Pooling をご覧ください。
Node.js ログの表示
Node.js アプリケーションのログ情報を表示するには、次の手順に従います。
- API プロキシのメインページで、表示するプロキシをクリックします。
- 選択したプロキシのサマリーページで、ツールバー右側の [Node.js Logs] をクリックします。
[Logs] ページで、表示するログの期間を選択できます。以下に例を示します。ログには、HTTP メソッド呼び出し、呼び出しの成否、console.log メッセージなどが記録されます。検索フィールドに検索語句を入力すると、その語句を含むログエントリがすべて表示されます。
トレースツールの使用
トレースツールは一般的なプロキシ デバッグに便利です。トレースツールの使用に関する詳細については、Trace ツールの使用を参照してください。
コンソール出力の表示
console.log ステートメントを Node.js コードに埋め込んで、出力をトレースツールで表示することができます。たとえば、次のステートメントは変数 config.user の値を出力します。
console.log('Logging in as %s', config.username);
トレースツールで console.log メッセージの出力を表示するには、[Trace Tool] で API を呼び出し、[Output from all Transactions] をクリックして出力パネルを開きます。
次のコードを実行すると、
var http = require('http'); console.log('node.js application starting...'); var svr = http.createServer(function(req, resp) { resp.end('Hello, World!'); }); svr.listen(9000, function() { console.log('Node HTTP server is listening'); });
コンソール ステートメントが次のようにパネルに表示されます。
Nginx ターゲット タイムアウト設定の構成
Nginx をプロキシとして使用しているときに「Bad Gateway」エラーが発生する場合は、ここで説明する手順に従って Nginx プロキシのタイムアウト構成を増やしてみてください。
例:
proxy_connect_timeout 60; proxy_read_timeout 120;
理想的なタイムアウト構成は、サーバーからのレスポンスにかかる時間によって異なります。たとえば、適切なバッファを提供するには 45~60 秒の読み取りタイムアウトが理想的でしょう。
Apigee ターゲット タイムアウト設定の構成
また、Apigee のデフォルト タイムアウト値を TargetEndpoint の HttpTargetConnection 要素で構成することもできます。デフォルト値は次のとおりです。
connect.timeout.millis - 60 seconds io.timeout.millis - 120 seconds
<HTTPTargetConnection> <Properties> <Property name="connect.timeout.millis">5000</Property> <Property name="io.timeout.millis">5000</Property> </Properties> <URL>http://www.google.com</URL> </HTTPTargetConnection>
エンドポイント プロパティのリファレンスもご覧ください。
詳細情報
デバッグの詳細については、以下を参照してください。
次のステップ
Apigee Edge での Node.js モジュール サポートの詳細(HTTP/HTTPS や TLS のサポートに関する説明やその他の高度なトピックなど)については、Edge での Node.js モジュールのサポートについてをご覧ください。