【AWS】使用X-Ray做AWS雲上全鏈路追蹤監控系統

鄭立賽發表於2021-11-30

功能

AWS X-Ray 是一項服務,收集應用程式所請求的相關資料,並提供用於檢視、篩選和獲取資料洞察力的工具,以確定問題和發現優化的機會。

對於任何被跟蹤的對您應用程式的請求,不僅可以檢視請求和響應的詳細資訊,還可以檢視應用程式對下游AWS 資源、微服務、資料庫和 HTTP Web API 進行的呼叫的詳細資訊。

類似的全鏈路追蹤監控系統還有:

pinpoint

zipkin

skywalking

總結:X-Ray本質上是一個適用於AWS的分散式系統呼叫鏈追蹤工具,我們選擇X-Ray的原因是我們的應用都是原生在AWS雲上,能夠很好的跟X-Ray實現整合,尤其是對於AWS服務的呼叫記錄,X-Ray原生支援。

缺點:與AWS強繫結,犧牲了使用多雲的靈活性。

雲架構的設計是一個多因素綜合結果,前期的過度設計可能會導致成本和複雜度過高,需要根據公司實際業務需求選擇合適的設計方案。

關於X-Ray詳見:X-Ray

用途

1,快速定位程式故障原因,降低MTTR

2,自動生成雲端架構圖,統一檢視

3,發現系統中可以優化的點

特點

自動根據請求生成雲端結構圖

圖中:app_1和app_2為我們開發的程式,其他部分結構為自動生成

可以根據此圖,快速的定位到介面問題,比如響應慢,返回錯誤等等

分析介面每一步操作延時

通過跟蹤請求,能夠詳細分析請求中每一步的操作時間。

能夠協助排查問題,優化方案。

如何使用

引入X-Ray的SDK即可,對開發改動不大

適用於 .NET 的 AWS X-Ray 開發工具包 - AWS X-Ray

以Python為例

僅需在原始程式碼部分增加上部分的引入庫,以及下面的初始化X-Ray的SDK即可。

from aws_xray_sdk.core import patch_all
patch_all()
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.ext.flask.middleware import XRayMiddleware
<原始程式碼部分>
xray_recorder.configure(service='app-2')
XRayMiddleware(app, xray_recorder)

效能影響測試

介面效能影響

使用X-Ray

10000次請求,分別測試10次取平均值

使用X-Ray:129.1466495196024

不用X-Ray:121.5133796532948

結論:初步測試,使用X-Ray約有6%的效能損失。

例項影響

CPU佔用:0.1%

記憶體佔用:0.0%

結論:幾乎沒影響

壓力測試

按照我們的一箇中等專案的訪問量:

250000/分鐘,100臺伺服器計算

每臺伺服器的速率為42QPS

上述測試效能時,單臺伺服器的QPS為77,未出現任何效能問題。

由此結論:再達到中等專案的量級2倍之前,不會存在效能問題。

AWS技術支援關於效能問題的回覆:

監控

目前X-Ray提供的是問題排查工具,未提供告警功能。

可以藉助AWS SDK,在發生問題時,獲取X-Ray的圖表,整合到現有的告警體系中。

費用

以us-west-2區域計算

每月記錄的前 100000 條軌跡免費。

超出免費套餐的限額後,每一百萬條的記錄軌跡費用為 5.00 USD(每條軌跡 0.000005 USD)。

超出免費套餐的限額後,每一百萬條的接收軌跡費用為 0.50 USD(每條軌跡 0.000005 USD)。

以中等專案的API訪問量為例,計算使用X-Ray的費用:

25萬/分鐘*60*24h*30d/100萬*$0.5*5%取樣率=$270/月

即,如開啟X-Ray,則增加$270/月的費用

結論:這個費用值得承擔。

相關文章