Elastic APM

weixin_34189116發表於2019-01-21

Elastic APM

簡介

APM = Application Performance Management

企業可以使用 APM 實時監控應用效能和當前工作負載,從而更好做出擴容決定保證系統穩定,閒時可以做對應的伺服器縮容,降低總體執行成本。

與伺服器效能指標監控不同,APM 的探針可以部署在程式碼執行時裡面,可收集到更加接近應用程式的效能資料,大部分 APM sdk 還可以監控到 SQL 請求,Redis 請求,對外 HTTP 請求,模板渲染細節等資料。

現在市場上的 APM 都做成了 SaaS 服務。國外領先的 APM 有 NewRelic 和 DataDog 等。國內有 OneAPM。

Elastic 開源出了一款 APM,資料儲存用 ElasticSearch,使用者只需要安裝一個 apm-server,然後在應用裡面安裝對應語言版本的 elastic-apm 包,便可以快速搭建一套開源的 APM 服務。

Elastic APM 打著以開發者為中心的旗號,官網是如下強調的

Elastic APM 支援 Java、Go、Node.js、Python、Ruby 和 Real User Monitoring (JavaScript),未來還會支援更多程式語言。如果沒有發現自己想要的,您既可自行構建,也可求助於開源社群。 -- https://www.elastic.co/cn/solutions/apm

具體 Elastic APM 有什麼功能大家在官網或者試用一下就知道了,這裡就不詳細說了。

以前在做 Ruby 應用效能優化的時候,用的都是 stackprofrbspy 之流,stackprof 能收集 Ruby 程式的 CPU wall time,新建物件數量等資訊,rbspy 能線上收集一個 Ruby 程式的當前呼叫棧(用 ptrace),可以生成火焰圖,清晰看出具體耗時最長的函式。

而在使用了 Elastic APM 之後,每個路徑的耗時對比清晰可見,APM 的每一個 HTTP Service 首頁都給出了響應時間(均值,95%,99%),狀態碼數量等資訊,簡單直接的給出了需要做效能調優的功能。

Elastic APM 通過探針可以收集到常用類庫的執行資訊,目前的 Ruby elastic-apm gem 可以支援 Active Record,Sequel SQL,Redis,Mongo,NET::HTTP,tilt::Template,json 等等。

通過使用 Elastic APM,我們發現了友好速搭官網首頁執行了 89 次 SQL 查詢,看程式碼發現是前端渲染模板的時候在迴圈裡呼叫了兩次 SQL 請求。通過優化,整個頁面現在只需要 2 個 SQL 請求,目前 99% 的 response time 在 40ms 以內。大家可以訪問 https://youhaosuda.com/ 或者搜尋 友好速搭 感受一下火箭般的瀏覽速度。

Elastic APM 還會記錄應用內的異常,可以簡單使用現有的 Grafana,通過增加 Elasticsearch 資料來源,可以直觀看到對應服務的異常數量,Grafana 可以設定告警發到 Slack 或者 Bearychat。

Web 產品的響應速度也是產品特性之一。亞馬遜統計過,每快 100ms 的響應時間可以節省 1% 的銷售成本,通過友好速搭建立的網站,全球毫秒級載入,而且現在還可以通過 Elastic APM 實時監控網站效能狀況,用最敏捷的方式解決效能瓶頸。

友好速搭是國內領先的電商服務和雲技術提供方。依託技術、營銷、企業服務三大業務,為高階零售品牌打造個性化交易系統,並快速連結行業資源與精準流量,使品牌價值最大化。

閱讀原文

相關文章