如何對服務對應中遺失的 X-Ray 蹤跡、區段或服務進行疑難排解?

3 分的閱讀內容
0

我想對服務對應中遺失的 AWS X-Ray 蹤跡、區段和服務進行疑難排解。

簡短說明

遺失的蹤跡會導致服務地圖中遺失服務。以下是導致蹤跡遺失的原因:

  • 儀表不正確
  • X-Ray SDK 無法透過常駐程式地址或埠號到達 X-Ray 常駐程式
  • X-Ray 常駐程式無法到達 X-Ray 服務端點
  • 追蹤未在個別服務層級設定
  • 缺少 AWS 身分和存取管理 (IAM) 權限
  • 取樣規則組態
  • OpenTelemetry Collector 中缺少組態

如果子區段沒有開啟的父區段,則會導致區段遺失。如需詳細資訊,請參閱 AWS X-Ray 疑難排解

解決方法

儀表不正確

**使用 X-Ray SDK 時的儀表不正確 **

如果您的應用程式碼未正確設定 X-Ray SDK 來修補支援的程式庫和框架,則可能會遺失蹤跡。未傳遞給下游服務的蹤跡 ID 也可能導致遺失蹤跡。

若要解決此問題,請開啟 SDK 上的偵錯層級記錄,將更詳細的記錄輸出至應用程式記錄檔。這可讓您進一步隔離與儀表相關的問題,並追蹤整個應用程式的蹤跡 ID 流程。日誌也會指出蹤跡會遺失是因為未取樣,還是由於儀表設定錯誤所造成。如需詳細資訊,請根據 JavaNode.jsPython.NETRuby 在 X-Ray SDK 檢查偵錯記錄。

**注意:**如果應用程式使用 Java 的自動儀表代理,它就不會捕捉非同步請求的蹤跡,而蹤跡會遺失。如有遺失的蹤跡,請使用手動儀表。如果 X-Ray SDK 缺少某些功能或有問題,請檢查 OpenTelemetry SDK 是否有 Java 的自動儀表代理。

使用 OpenTelemetry SDK 時,儀表不正確

如果您使用 OpenTelemetry SDK,而應用程式碼未正確設定來修補支援的程式庫和框架,則代碼可能會遺失蹤跡。未傳遞給下游服務的蹤跡 ID 也可能導致遺失區段。

若要對此問題進行疑難排解,請執行下列動作:

  • 開啟 SDK 上的偵錯層級記錄,以將更詳細的日誌傳送到您的應用程式日誌檔。這可讓您進一步隔離與儀表相關的問題,並追蹤整個應用程式的蹤跡 ID 流程。日誌指出蹤跡會遺失是因為未取樣,還是由於儀器設定錯誤所造成。如需詳細資訊,請根據 JavaNode.jsPython.NETRuby 在 X-Ray SDK 檢查偵錯記錄。
  • 確保您的儀表未關閉。如需詳細資訊,請參閱 OpenTelemetry 網站上的隱藏特定的自動儀表

**注意:**若要使用 AWS 基礎設施資訊豐富蹤跡,請確定 OpenTelemetry SDK 中的 AWS 服務支援 AWS 資源偵測器。如需詳細資訊,請參閱使用 AWS 資源偵測器

X-Ray SDK 無法透過常駐程式地址或埠號到達 X-Ray 常駐程式

如果 X-Ray SDK 無法透過預設或設定的守護程式連接埠號碼和位址到達 X-Ray 常駐程式,則 SDK 會遺失蹤跡。X-Ray 常駐程式地址會使用環境變數 AWS_XRAY_DAEMON_ADDRESS 傳遞給 SDK。預設情況下,X-Ray 常駐程式偵聽連接埠 2000 UDP。您可以透過指令行選項和傳遞至 X-Ray 常駐程式的組態檔來變更此連接埠。如需詳細資訊,請參閱使用組態檔案

如果您使用偵錯日誌執行 X-Ray 常駐程式,請執行下列命令來識別為 X-Ray 常駐程式設定的 UDP 連接埠:

./xray -l debug

**注意:**下列範例會將 3000 識別為連接埠號碼。

範例輸出:

2023-03-28T15:15:43-07:00 \[Debug\] Listening on UDP 127.0.0.1:3000

如果您沒有使用偵錯日誌執行 X-Ray 常駐程式,請開啟偵錯日誌的選項,然後重新執行常駐程式。如需詳細資訊,請參閱使用組態檔案

**注意:**如果您的 X-Ray 常駐程式與應用程式及 X-Ray SDK 不在同一台機器上執行,請檢查入埠和輸入規則。檢查安全群組入埠規則和網路存取控制清單 (網路 ACL) 輸入規則是否允許流量。您必須允許 X-Ray SDK 流量通過 X-Ray 常駐程式的接聽程式連接埠。

X-Ray 常駐程式無法到達 X-Ray 服務端點

如果您的 X-Ray 常駐程式無法到達 X-Ray 服務端點,請執行下列動作:

  • 如果您在來源端設定代理,請檢查代理是否不允許流量到達 X-Ray 服務端點。
  • 如果您使用 com.amazonaws.region.xray X-Ray Amazon Virtual Private Cloud (Amazon VPC) 端點連接到 X-Ray 服務,則檢查連接的安全群組。請確定安全群組具有允許 HTTPS 流量將資料推送至 X-Ray 服務 API 的輸出流量。此外,請確定安全群組允許連接埠 443 上的入埠流量,以允許 X-Ray 常駐程式。
  • 確認相關聯的網路 ACL 和 X-Ray Amazon VPC 端點具有輸出規則,該規則允許連接埠 443 上任何位置的流量為 0.0.0.0/0。X-Ray 常駐程式必須將資料傳送至 X-Ray 服務端點。此外,請確認網路 ACL 輸入規則是否允許從 X-Ray 常駐程式傳送到 Amazon VPC 端點的流量。

追蹤未在個別服務層級設定

如果您沒有為某些 AWS 服務開啟 X-Ray 設定,則可能會遺失蹤跡。以下是要求您在服務層級開啟 X-Ray 設定的 AWS 服務清單:

缺少 IAM 權限

確認您擁有必要的 IAM 權限:

  • 如果您在 X-Ray 常駐程式日誌中收到拒絕存取錯誤,請檢查 IAM 權限。若要將蹤跡傳送至 X-Ray 服務端點,X-Ray 常駐程式 IAM 角色需要 AWSXRAYDaemonWriteAccess 受管理政策中的權限。如果您在 IAM 政策中使用基於標籤的條件,請確保 IAM 政策參考正確的標籤。如需詳細資訊,請參閱基於 X-Ray 標籤的授權
  • 如果 X-Ray 常駐程式在 Amazon Elastic Container Service (Amazon ECS) 中作為任務中的附屬容器執行,請檢查 Amazon ECS 任務角色。請確定 AWSXRayDaemonWriteAccess 政策已附加到 Amazon ECS 任務角色。
  • 如果在 Amazon Elastic Kubernetes 服務 (Amazon EKS) 中部署 X-Ray 常駐程式,請檢查 Pod 中的附屬容器。請確定容器使用服務帳戶 (IRSA) 的 IAM 角色,且 AWSXRayDaemonWriteAccess 政策已附加到 IAM 角色。
  • 如果在 Amazon Elastic Compute Cloud (Amazon EC2) 中設定了 X-Ray 常駐程式,請檢查關聯的執行個體設定檔。請確定與該 EC2 執行個體相關聯的執行個體設定檔角色已附加 AWSXRayDaemonWriteAccess 政策。
  • 如果在 AWS Lambda 中設定了 X-Ray 常駐程式,請檢查 Lambda 執行角色。確認 Lambda 執行角色是否具有 AWSXRayDaemonWriteAccess 政策。請確定已附加政策。
  • 如果您已在 Amazon SNS 中開啟作用中蹤跡,但仍看不到您的蹤跡,請在 X-Ray 中設定資源政策

**注意:**若要確認 X-Ray 權限,請使用 IAM 政策模擬器測試您附加到資源的 IAM 角色或政策。此外,請檢查組織的服務控制政策 (SCP)。SCP 會在帳戶層級限制特定 API 呼叫的存取權限。

如需 X-Ray 的 IAM 受管政策清單,請參閱 X-Ray 的 IAM 受管政策

取樣規則組態

如果透過取樣組態支援作用中蹤跡的 X-Ray SDK 和 AWS 服務沒有取樣蹤跡,則您可能會遺失蹤跡。使用取樣規則來決定要記錄的請求。根據預設,X-Ray SDK 會每秒記錄第一個請求,以及任何其他請求的 5%。您可以變更取樣率以減少或增加記錄的蹤跡數量。

例如,儲存庫設定為 1。儲存庫為 1 表示每秒的第一個請求都被採取。或者,取樣率設定為 0.1。取樣率為 0.1 表示記錄每秒 10% 的額外請求。

由於 X-Ray SDK 限制 SDK 記錄的請求數量,因此所有請求都可能無法被追蹤。若要記錄更多蹤跡,請增加儲存器和取樣率設定。如需詳細資訊,請參閱取樣規則範例

**注意:**如果您已設定多個取樣規則,且取樣蹤跡數量波動,請檢查 X-Ray SDK 使用的取樣規則。如需詳細資訊,請參閱檢視取樣結果

OpenTelemetry Collector 中缺少組態

如果您使用 OpenTelemetry 收集器而不是 X-Ray 常駐程式,則可能會遺失所需的接收器和匯出程式設定。如果組態遺失,則蹤跡不會傳送至 X-Ray 服務端點。根據您的接收器,檢查 config.yaml 檔案中的接收器組態,以確認沒有遺失任何組態。

請在 GitHub 網站上查看以下範例組態:

**注意:**請確定所需的 IAM 權限在 AWSXRayDaemonWriteAccess 受管政策中。

AWS 官方
AWS 官方已更新 6 個月前