

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

# 故障診斷 AWS X-Ray
<a name="xray-troubleshooting"></a>

本主題列出使用 X-Ray API、主控台或 SDKs常見錯誤和問題。如果您發現未列在此處的問題，您可以使用此頁面上的 **Feedback (意見回饋)** 按鈕來報告。

**Topics**
+ [X-Ray 追蹤映射和追蹤詳細資訊頁面](#xray-console-troubleshooting)
+ [適用於 Java 的 X-Ray 開發套件](#troubleshooting-java)
+ [適用於 Node.js 的 X-Ray 開發套件](#troubleshooting-nodejs)
+ [X-Ray 協助程式](#troubleshooting-daemon)

## X-Ray 追蹤映射和追蹤詳細資訊頁面
<a name="xray-console-troubleshooting"></a>

如果您在使用 X-Ray 追蹤映射和追蹤詳細資訊頁面時遇到問題，下列各節可協助您：

### 我沒有看到所有 CloudWatch 日誌
<a name="xray-troubleshooting-Nologs"></a>

如何設定日誌，使其顯示在 X-Ray 追蹤映射和追蹤詳細資訊頁面中，取決於 服務。
+ API Gateway 日誌只會在 API Gateway 中開啟記錄日誌時出現。

 並非所有服務映射節點都支援檢視相關聯的日誌。檢視下列節點類型的日誌：
+ Lambda 內容
+ Lambda 函式
+ API Gateway 階段
+ Amazon ECS 叢集
+ Amazon ECS 執行個體
+ Amazon ECS 服務
+ Amazon ECS 任務
+ Amazon EKS 叢集
+ Amazon EKS 命名空間
+ Amazon EKS 節點
+ Amazon EKS Pod
+ Amazon EKS 服務

### 我在 X-Ray 追蹤地圖上看不到所有警示
<a name="xray-troubleshooting-NoAlarms"></a>

如果與該節點相關聯的任何警示處於 ALARM 狀態，X-Ray 追蹤映射只會顯示節點的警示圖示。

追蹤映射使用以下邏輯將警示與節點建立關聯：
+ 如果節點代表 AWS 服務，則具有與該服務相關聯之命名空間的所有警示都會與該節點相關聯。例如，`AWS::Kinesis` 類型的節點會與所有根據 CloudWatch 命名空間 `AWS/Kinesis` 中指標為基礎的警示進行連結。
+ 如果節點代表 AWS 資源，則會連結該特定資源上的警示。例如，`AWS::DynamoDB::Table` 類型且名稱為 “MyTable” 的節點會與所有以命名空間為 `AWS/DynamoDB`，且已將 `TableName` 維度設為 `MyTable` 指標為基礎的警示連結。
+ 如果節點是未知類型 (由名稱周圍的虛線外框表示)，則不會有任何警示與該節點建立關聯。

### 我在追蹤地圖上看不到一些 AWS 資源
<a name="xray-troubleshooting-MissingResources"></a>

不是每個 AWS 資源都由專用節點表示。有些 AWS 服務會以單一節點表示，用於對服務提出所有請求。下列資源類型會以每個資源一個節點的方式顯示：
+ `AWS::DynamoDB::Table`
+ `AWS::Lambda::Function`

  Lambda 函數由兩個節點表示，一個用於 Lambda 容器，另一個用於函數。這有助於識別 Lambda 函數的冷啟動問題。Lambda 容器節點與警示和儀表板建立關聯的方式同 Lambda 函數節點一樣。
+ `AWS::ApiGateway::Stage`
+ `AWS::SQS::Queue`
+ `AWS::SNS::Topic`

### 追蹤映射上有太多節點
<a name="xray-troubleshooting-MapTooBig"></a>

請使用 X-Ray 群組，以將您的映射分成多個映射。如需詳細資訊，請參閱[搭配群組使用篩選條件表達式](xray-console-filters.md#groups)。

## 適用於 Java 的 X-Ray 開發套件
<a name="troubleshooting-java"></a>

**錯誤：***Exception in thread "Thread-1" com.amazonaws.xray.exceptions.SegmentNotFoundException: Failed to begin subsegment named 'AmazonSNS': segment cannot be found. *(執行緒 "Thread-1" 中發生異常 com.amazonaws.xray.exceptions.SegmentNotFoundException：無法開始名為 'AmazonSNS' 的子區段：找不到子區段。)

此錯誤表示 X-Ray 開發套件嘗試記錄傳出呼叫 AWS，但找不到開啟的區段。發生此問題的可能情況如下：
+ **未設定 servlet 篩選條件** – X-Ray SDK 會使用名為 的篩選條件為傳入請求建立區段`AWSXRayServletFilter`。[設定 servlet 篩選條件](xray-sdk-java-filters.md)來檢測傳入請求。
+ **您正在 servlet 程式碼之外使用經檢測的用戶端** – 如果您使用經檢測的用戶端在啟動程式碼或其他未執行的程式碼中呼叫 ，則您必須手動建立客群。如需範例，請參閱 [檢測啟動程式碼](scorekeep-startup.md)。
+ **您在工作者執行緒中使用經檢測的用戶端** – 當您建立新的執行緒時，X-Ray 記錄器會失去其對開啟區段的參考。您可以使用 [https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#getTraceEntity--](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#getTraceEntity--) 和 [https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#setTraceEntity--](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#setTraceEntity--) 方法來取得目前區段或子區段的參考 ([https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Entity.html](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Entity.html))，並將其傳遞給執行緒內部的記錄器。如需範例，請參閱[在工作者執行緒中使用受檢測用戶端](scorekeep-workerthreads.md)。

## 適用於 Node.js 的 X-Ray 開發套件
<a name="troubleshooting-nodejs"></a>

**問題：**「CLS 並未使用 Sequelize」**

使用 `cls`方法傳遞適用於 Node.js 的 X-Ray 開發套件命名空間以 Sequelize。

```
var AWSXRay = require('aws-xray-sdk');
const Sequelize = require('sequelize');
Sequelize.cls = AWSXRay.getNamespace();
const sequelize = new Sequelize({{...}});
```

**問題：**「CLS 並未使用 Bluebird」**

使用 `cls-bluebird` 來使 Bluebird 使用 CLS。

```
var AWSXRay = require('aws-xray-sdk');
var Promise = require('bluebird');
var clsBluebird = require('cls-bluebird');
clsBluebird(AWSXRay.getNamespace());
```

## X-Ray 協助程式
<a name="troubleshooting-daemon"></a>

**問題：**「精靈使用錯誤的登入資料」**

協助程式使用 AWS SDK 載入登入資料。若您使用多個方法提供登入資料，便會使用優先順序最高的方法。如需詳細資訊，請參閱「[執行精靈](xray-daemon.md#xray-daemon-running)」。