

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用適用於 Node.js 的 X-Ray 開發套件產生自訂子區段
<a name="xray-sdk-nodejs-subsegments"></a>

子區段會延伸追蹤的[區段](xray-concepts.md#xray-concepts-segments)，其中包含為了處理請求而完成之工作的詳細資訊。每次您與經檢測的用戶端進行呼叫時，X-Ray 開發套件都會記錄子區段中產生的資訊。您可以建立其他子區段來將其他子區段分組、測量程式碼區段的效能，或記錄註釋和中繼資料。

## 自訂快速子區段
<a name="xray-sdk-nodejs-subsegments-express"></a>

**注意**  
X-Ray 開發套件/協助程式維護通知 – 在 2026 年 2 月 25 日， AWS X-Ray SDKs/協助程式將進入維護模式，其中 AWS 將限制 X-Ray 開發套件和協助程式版本，以僅解決安全問題。如需支援時間軸的詳細資訊，請參閱 [X-Ray SDK 和協助程式支援時間表](xray-sdk-daemon-timeline.md)。建議您遷移至 OpenTelemetry。如需遷移至 OpenTelemetry 的詳細資訊，請參閱[從 X-Ray 檢測遷移至 OpenTelemetry 檢測](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html)。

若要為呼叫下游服務的函數建立自訂子區段，請使用 `captureAsyncFunc` 函數。

**Example 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 開發套件會為其產生 ID，並記錄開始時間和結束時間。

**Example 使用中繼資料的子區段**  

```
"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 子區段
<a name="xray-sdk-nodejs-subsegments-lambda"></a>

開發套件設定為在偵測到在 Lambda 中執行時自動建立預留位置外觀區段。若要建立基本子區段，以在 X-Ray 追蹤地圖上建立單一`AWS::Lambda::Function`節點，請呼叫 並重新利用外觀區段。如果您使用新 ID 手動建立新區段 (在共用追蹤 ID、父系 ID 和抽樣決策時)，您將能夠傳送新區段。

**Example 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
```