X-Ray SDK for Node.js を使用したカスタムサブセグメントの生成 - AWS X-Ray

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

X-Ray SDK for Node.js を使用したカスタムサブセグメントの生成

サブセグメントはリクエストを処理するために行われた作業の詳細を含んだトレースのセグメントを拡張します。計測されたクライアントで呼び出しを行うたびに、X-Ray はサブセグメントで生成された情報SDKを記録します。追加のサブセグメントを作成して、他のサブセグメントをグループ化したり、コードセクションのパフォーマンスを測定したり、注釈とメタデータを記録したりできます。

カスタム Express サブセグメント

ダウンストリームサービス呼び出しを行う関数用のカスタムセグメントを作成するには、captureAsyncFunc 関数を使用します。

例 app.js - カスタムサブセグメント Express
var AWSXRay = require('aws-xray-sdk'); app.use(AWSXRay.express.openSegment('MyApp')); app.get('/', function (req, res) { var host = 'api.example.com'; AWSXRay.captureAsyncFunc('send', function(subsegment) { sendRequest(host, function() { console.log('rendering!'); res.render('index'); subsegment.close(); }); }); }); app.use(AWSXRay.express.closeSegment()); function sendRequest(host, cb) { var options = { host: host, path: '/', }; var callback = function(response) { var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function () { cb(); }); } http.request(options, callback).end(); };

この例では、アプリケーションにより、sendRequest 関数への呼び出すために send という名前のカスタムサブセグメントが作成されます。captureAsyncFunc は、非同期呼び出しが完了したときにコールバック関数内で閉じる必要があるサブセグメントを渡します。

同期関数の場合は、captureFunc 関数を使用できます。これにより、関数ブロックの実行が終了するとサブセグメントが自動的に閉じられます。

セグメントまたは別のサブセグメント内にサブセグメントを作成すると、X-Ray SDK for Node.js はその ID を生成し、開始時刻と終了時刻を記録します。

例 サブセグメントとメタデータ
"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },

カスタム Lambda サブセグメント

SDK は、Lambda で実行されていることを検出すると、プレースホルダーファサードセグメントを自動的に作成するように設定されています。X-Ray トレースマップ上に単一のAWS::Lambda::Functionノードを作成する基本的なサブセグメントを作成するには、 を呼び出し、ファサードセグメントを再利用します。新しい ID を使用して新しいセグメントを手動で作成すると (トレース ID、親 ID、サンプリングデシジョンを共有しているときに)、新しいセグメントを送信できるようになります。

例 app.js - 手動カスタムサブセグメント
const segment = AWSXRay.getSegment(); //returns the facade segment const subsegment = segment.addNewSubsegment('subseg'); ... subsegment.close(); //the segment is closed by the SDK automatically