本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Node.js 的 X-Ray SDK 產生自訂子區段
子段擴展了跟踪的段,其中包含有關完成工作的詳細信息,以滿足請求。每次您使用已檢測的用戶端進行呼叫時,X-Ray 都會SDK記錄在子區段中產生的資訊。您可以建立其他子區段來分組其他子區段、測量程式碼區段的效能,或是記錄註釋和中繼資料。
自訂快速子區段
若要為呼叫下游服務的函數建立自訂子區段,請使用 captureAsyncFunc
函數。
範例 app.js - 快速自訂子區段
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
函數,自動在函數區塊完成執行後關閉子區段。
當您在區段或其他子區段內建立子區段時,Node.js 的 X-Ray 會SDK為其產生 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