昨天在講如何用 API Gateway 和 Lambda 設計和實作文章發佈通知系統,今天要拿這個系統當範例,來聊聊可以怎麼使用 CloudWatch 的 Metrics 和 Dashboards 協助 debug 系統上線後可能發生的問題,有哪些指標可以協助 debug 。
為了可以模擬系統上線的真實情境,這篇文章會使用 JMeter 產生 10 個 thread 連續呼叫發佈文章的 API ,模擬很多人在同時發文的情境。
在設定好 JMeter 並開始執行後,可以看到居然出現了不少的 500 Internal Server Error
!
這時候第一時間也許可以先到 API Gateway 查看 Dashboard 。
然後發現 API Gateway 確實回傳了不少 5xx error
。
翻出之前畫的系統架構圖,可以知道 API Gateway 後面接的是 Lambda ,猜測出現 500 Internal Server Error
會不會是 Lambda 的程式碼沒寫好在搞鬼呢?!
接下來可以到 Lambda 的 Console 查看 Monitor ,觀察 Error count and success rate
這個 metrics ,如果是程式碼有問題,那 Error count
不太可能是 0 。
在看了一下 Throttles
這個 metrics , 發現居然不少到 Lambda 的 Request 被 Throttled 掉!懷疑是不是 Lambda Provision 的數量不夠!
到 Configuration
確認 Concurrency ,可以看到 Reserved concurrency
只有 2 ,扛不住一次被 10 個左右的 Request 暴打!
這邊只是一個簡單的 5xx 問題,當然正式上線的系統會有更多複雜的情境,會需要更多的 metrics 協助 debug ,如果只能在不同 Service 之間跳來跳去,尋找不同 metrics 查問題,似乎非常不方便!這時候就可以善用 CloudWatch 的 Dashboard 抓出需要的 metrics 一起觀察這些指標,明天再來聊聊這一塊!