在AWS X-Ray分布式跟蹤服務4月份發布的通用版本(General Availability,GA)中,Amazon已經為X-Ray添加了對AWS Lambda的支持,它能夠記錄函數調用和相關的元數據,通過AWS Console進行圖像化展示并進行分析以便于調試或故障的恢復。
通過AWS Console,我們能夠將X-Ray用于已有的Lambda函數,只需導航至函數的配置Tab標簽,滑動至“Advanced settings”,并選中“Enable active tracing”選擇框,或者也可以通過AWS Command Line Interface (CLI)來更新函數的追蹤配置:
$ aws lambda update-function-configuration --tracing-config '{"Mode": "Active"}' --function-name 'my-function-name-or-ARN'AWS博客中包含了一篇Randall Hunt所撰寫的文章,他是AWS的開發人員布道師,這篇文章指出,當啟用跟蹤模式時,Lambda將會試圖跟蹤函數,除非它被上游的服務顯式地禁用掉。當Lambda函數觸發的時候,將會生成trace并開始進行數據捕獲,通過AWS Console能夠以可視化的方式展現應用資源和它們之間的連接(edges):
AWS Console中,X-Ray跟蹤的可視化展現(圖片來源于Randall Hunt)
每個服務或函數收集到的數據被稱之為segment(類似于OpenTracing API規范中的Span),以JSON數據的方式來進行存儲。這種segment的樣本可以通過X-Ray daemon發送至AWS X-Ray服務,而X-Ray daemon必須要和Lambda函數在一起運行。Hunt指出,X-Ray daemon確實會消耗Lambda函數關聯的一點資源,但是如果函數接近特定的內存極限的話,Lambda將會嘗試殺掉X-Ray daemon,避免出現內存溢出的錯誤。
segment代表了一個工作單元,包含了請求和響應的時間,另外還有可選的子segment(sub-segment),它們會包含更小的工作單元。子segment可以啟動和停止,并且添加了一些額外的元數據,這是通過針對X-Ray的特定語言SDK實現的。目前,針對Java 8運行時的X-Ray SDK、針對Node.js 4.3的X-Ray SDK以及一些更新的運行時已經得到了官方的支持,針對其他語言的非官方支持托管在GitHub上,比如Fleece項目所提供的對Python的支持。
針對應用的請求會通過一個trace來進行跟蹤。trace會收集單個請求所生成的所有segment。這意味著我們可以很容易地跟蹤在請求生命周期中,已支持的服務所發出的所有的事件,比如API網關調用、應用/服務函數的處理以及對X-Ray所支持的數據存儲(比如AWS DynamoDB)的所有操作,從而能夠理解哪里出現了錯誤以及延遲發生在什么地方。
關于AWS X-Ray所支持的AWS服務的更多細節可以參考“Integrating AWS X-Ray with Other AWS Services”文檔。關于AWS X-Ray以及相關跟蹤術語可以參考InfoQ之前的新聞,這篇新聞是在2016 AWS re:invent會議之后發布的。
X-Ray服務可以通過美國東部(北弗吉尼亞)、美國西部(加州北部)、美國東部(俄亥俄)、美國西部(俄勒岡州)、歐盟(愛爾蘭)、歐盟(法蘭克福)、南美洲(圣保羅)、亞太(東京)、亞太(首爾)、亞太(悉尼)以及亞太(孟買)的這些Region來進行使用。其他的信息可以通過AWS Lambda頁面和Troubleshooting Lambda-Based Applications文檔來進行獲取。
查看英文原文:AWS Lambda Support Added to AWS X-Ray Distributed Tracing Service