

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

# 設定適用於 Node.js 的 X-Ray 開發套件
<a name="xray-sdk-nodejs-configuration"></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)。

您可以使用外掛程式設定適用於 Node.js 的 X-Ray 開發套件，以包含應用程式執行服務的相關資訊、修改預設抽樣行為，或新增適用於特定路徑請求的抽樣規則。

**Topics**
+ [服務外掛程式](#xray-sdk-nodejs-configuration-plugins)
+ [抽樣規則](#xray-sdk-nodejs-configuration-sampling)
+ [日誌](#xray-sdk-nodejs-configuration-logging)
+ [X-Ray 協助程式地址](#xray-sdk-nodejs-configuration-daemon)
+ [環境變數](#xray-sdk-nodejs-configuration-envvars)

## 服務外掛程式
<a name="xray-sdk-nodejs-configuration-plugins"></a>

使用 `plugins` 記錄託管您應用程式之服務的相關資訊。

**外掛程式**
+ Amazon EC2 – `EC2Plugin` 新增執行個體 ID、可用區域和 CloudWatch Logs 群組。
+ Elastic Beanstalk – `ElasticBeanstalkPlugin` 新增環境名稱、版本標籤和部署 ID。
+ Amazon ECS – `ECSPlugin` 新增容器 ID。

若要使用外掛程式，請使用 `config`方法設定適用於 Node.js 的 X-Ray 開發套件用戶端。

**Example app.js - 外掛程式**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.config([AWSXRay.plugins.EC2Plugin,AWSXRay.plugins.ElasticBeanstalkPlugin]);
```

軟體開發套件也會使用外掛程式設定來設定區段上的 `origin` 欄位。這表示執行您應用程式 AWS 的資源類型。當您使用多個外掛程式時，軟體開發套件會使用下列解析順序來判斷原始伺服器：ElasticBeanstalk > EKS > ECS > EC2。

## 抽樣規則
<a name="xray-sdk-nodejs-configuration-sampling"></a>

SDK 會使用您在 X-Ray 主控台中定義的抽樣規則來決定要記錄哪些請求。預設規則每秒追蹤第一個請求，以及所有傳送追蹤至 X-Ray 服務的任何其他請求的 5%。[在 X-Ray 主控台中建立其他規則](xray-console-sampling.md)，以自訂為每個應用程式記錄的資料量。

軟體開發套件會依定義自訂規則的順序套用自訂規則。如果請求符合多個自訂規則，軟體開發套件只會套用第一個規則。

**注意**  
如果開發套件無法達到 X-Ray 以取得取樣規則，它會每秒還原為第一個請求的預設本機規則，以及每個主機任何額外請求的 5%。如果主機沒有呼叫取樣 APIs許可，或無法連線到 X-Ray 協助程式，該常駐程式可做為 SDK 進行 API 呼叫的 TCP 代理，就可能發生這種情況。

您也可以設定 SDK 從 JSON 文件載入抽樣規則。開發套件可以在 X-Ray 取樣無法使用的情況下，使用本機規則做為備份，或僅使用本機規則。

**Example sampling-rules.json**  

```
{
  "version": 2,
  "rules": [
    {
      "description": "Player moves.",
      "host": "*",
      "http_method": "*",
      "url_path": "/api/move/*",
      "fixed_target": 0,
      "rate": 0.05
    }
  ],
  "default": {
    "fixed_target": 1,
    "rate": 0.1
  }
}
```

此範例會定義一個自訂規則和預設規則。自訂規則會套用 5% 的取樣率，沒有追蹤 下路徑的最低請求數`/api/move/`。預設規則會追蹤每秒的第一個請求和 10% 的額外請求。

在本機定義規則的缺點是，固定目標是由記錄器的每個執行個體獨立套用，而不是由 X-Ray 服務管理。當您部署更多主機時，固定速率會倍增，因此更難控制記錄的資料量。

在 上 AWS Lambda，您無法修改取樣率。如果您的函數是由 檢測服務呼叫，則 Lambda 將記錄產生該服務取樣之請求的呼叫。如果啟用主動追蹤且不存在追蹤標頭，Lambda 會做出抽樣決策。

若要設定備份規則，請指示適用於 Node.js 的 X-Ray 開發套件使用 從 檔案載入取樣規則`setSamplingRules`。

**Example app.js - 檔案的抽樣規則**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.middleware.setSamplingRules('sampling-rules.json');
```

您也可以在程式碼中定義規則，然後將其做為物件傳遞給 `setSamplingRules`。

**Example app.js - 物件的抽樣規則**  

```
var AWSXRay = require('aws-xray-sdk');
var rules = {
  "rules": [ { "description": "Player moves.", "service_name": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ],
  "default": { "fixed_target": 1, "rate": 0.1 },
  "version": 1
  }

AWSXRay.middleware.setSamplingRules(rules);
```

若要僅使用本機規則，請呼叫 `disableCentralizedSampling`。

```
AWSXRay.middleware.disableCentralizedSampling()
```

## 日誌
<a name="xray-sdk-nodejs-configuration-logging"></a>

 若要記錄軟體開發套件的輸出，請呼叫 `AWSXRay.setLogger(logger)`，其中 `logger` 是提供標準記錄日誌方法的物件 (`warn`、`info` 等)。

根據預設，軟體開發套件會使用主控台物件上的標準方法，將錯誤訊息記錄到主控台。您可以使用 `AWS_XRAY_DEBUG_MODE`或 `AWS_XRAY_LOG_LEVEL`環境變數來設定內建記錄器的日誌層級。如需有效日誌層級值的清單，請參閱[環境變數](#xray-sdk-nodejs-configuration-envvars)。

如果您想要為日誌提供不同的格式或目的地，您可以向 SDK 提供自己的記錄器界面實作，如下所示。您可以使用任何實作此界面的物件。這表示許多日誌程式庫，例如 Winston，都可以直接使用並傳遞至 SDK。

**Example app.js - 日誌記錄**  

```
var AWSXRay = require('aws-xray-sdk');

// Create your own logger, or instantiate one using a library.
var logger = {
  error: (message, meta) => { /* logging code */ },
  warn: (message, meta) => { /* logging code */ },
  info: (message, meta) => { /* logging code */ },
  debug: (message, meta) => { /* logging code */ }
}

AWSXRay.setLogger(logger);
AWSXRay.config([AWSXRay.plugins.EC2Plugin]);
```

請在執行其他組態方法前呼叫 `setLogger`，確保擷取來自這些操作的輸出。

## X-Ray 協助程式地址
<a name="xray-sdk-nodejs-configuration-daemon"></a>

如果 X-Ray 協助程式接聽 以外的連接埠或主機`127.0.0.1:2000`，您可以設定適用於 Node.js 的 X-Ray 開發套件，將追蹤資料傳送至不同的地址。

```
AWSXRay.setDaemonAddress('host:port');
```

您可以透過名稱或 IPv4 地址指定主機。

**Example app.js - 精靈地址**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.setDaemonAddress('daemonhost:8082');
```

若您設定精靈針對 TCP 和 UDP 接聽不同連接埠，您可以在精靈地址設定中同時指定它們。

**Example app.js - 位於不同連接埠的精靈地址**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.setDaemonAddress('tcp:daemonhost:8082 udp:daemonhost:8083');
```

您也可以透過使用 `AWS_XRAY_DAEMON_ADDRESS` [環境變數](#xray-sdk-nodejs-configuration-envvars)來設定精靈地址。

## 環境變數
<a name="xray-sdk-nodejs-configuration-envvars"></a>

您可以使用環境變數來設定適用於 Node.js 的 X-Ray 開發套件。軟體開發套件支援以下變數。
+ `AWS_XRAY_CONTEXT_MISSING` – 設定為 `RUNTIME_ERROR` 以在未開啟區段時，檢測程式碼嘗試記錄資料時擲回例外狀況。

**有效值**
  + `RUNTIME_ERROR` – 擲回執行時間例外狀況。
  + `LOG_ERROR` – 記錄錯誤並繼續 （預設）。
  + `IGNORE_ERROR` – 忽略錯誤並繼續。

  當您嘗試在未開啟請求時執行的啟動程式碼中使用經檢測用戶端，或在產生新執行緒的程式碼中，可能會發生與缺少區段或子區段相關的錯誤。
+ `AWS_XRAY_DAEMON_ADDRESS` – 設定 X-Ray 協助程式接聽程式的主機和連接埠。根據預設，軟體開發套件會使用 `127.0.0.1:2000` 進行追蹤資料 (UDP) 和取樣 (TCP)。如果您已設定協助程式在[不同的連接埠上接聽](xray-daemon-configuration.md)，或在不同的主機上執行，請使用此變數。

**格式**
  + **相同連接埠** – `address:port`
  + **不同的連接埠** – `tcp:address:port udp:address:port`
+ `AWS_XRAY_DEBUG_MODE` – 將 設定為 `TRUE`，以設定 SDK 將日誌輸出至 主控台的`debug`關卡。
+ `AWS_XRAY_LOG_LEVEL ` – 設定預設記錄器的日誌層級。有效值為`debug`、`info`、`warn`、`error`、`silent`。當 AWS\$1XRAY\$1DEBUG\$1MODE 模式設定為 `TRUE` 時，會忽略此值。
+ `AWS_XRAY_TRACING_NAME` – 設定軟體開發套件用於區段的服務名稱。覆寫您[在 Express 中介軟體上設定](xray-sdk-nodejs-middleware.md)的區段名稱。