多語言應用效能監控系統:Elastic APM

> 概述
Elastic APM 是基於 Elastic Stack 構建的應用效能監控系統。通過 Elastic APM 可以監控應用程式,收集有關請求的響應時間、資料庫查詢、快取記憶體呼叫、外部 HTTP 請求等的詳細效能資訊,這樣可以更快地查明並修復效能問題。
Elastic APM 還會自動收集未處理的錯誤和異常,錯誤主要基於堆疊跟蹤進行分組,因此可以識別出現的新錯誤,並密切關注特定錯誤發生的次數。
> APM 元件
Elastic APM 包含四個元件:

APM agent
APM agent 是使用與服務相同的語言編寫的開源庫,可以像安裝其他庫一樣將它們安裝到服務中,agent 將檢測服務的程式碼並在執行時收集效能資料和錯誤,這些資料緩衝一小段時間併發送到 APM server。
APM server
APM Server 是用 Go 編寫的開源應用程式,通常執行在專用伺服器上,預設監聽埠 8200 ,並通過 JSON HTTP API 從 agent 接收資料,然後根據該資料建立文件並將其儲存在 Elasticsearch 中。
Elasticsearch
Elasticsearch 是高可擴充套件的開源全文搜尋和分析引擎,用於快速、近實時地儲存、搜尋和分析大量資料。此處用於儲存 APM 效能指標並利用其聚合。
Kibana
Kibana 是開源的分析和視覺化平臺,旨在與 Elasticsearch 協同工作,可以通過 Kibana 搜尋、檢視 Elasticsearch 中儲存的資料,此處用於視覺化 Elasticsearch 中儲存的 APM 資料。
> 部署 APM Server
1、部署 Elasticsearch 和 Kibana
參考: 使用 Docker 部署帶許可權認證的 Elasticsearch
2、編輯 APM Server 配置檔案 apm-server.yml
apm-server: host: "0.0.0.0:8200" output.elasticsearch: hosts: ["elasticsearch:9200"] username: "admin" password: "Passw0rd"
更多配置參考:Config APM Server
3、部署 APM Server
docker run -d \ --name apm-server \ --link elasticsearch:elasticsearch \ -v `pwd`/apm-server.yml:/usr/share/apm-server/apm-server.yml \ -p 8200:8200 \ -e "TZ=Asia/Shanghai" \ docker.elastic.co/apm/apm-server:6.6.2
參考文件: Running APM Server on Docker
> APM Agent
目前 APM Agent 支援如下語言:
- Java:Servlet API、Spring MVC、Spring Boot
- Node.js:Express、hapi、Koa、Restify
- Go:Gorilla、Gin
- Python:Django、Flask
- Ruby:Rails
- RUM(Real User Monitoring):捕獲使用者與客戶端的互動,例如:Web 瀏覽器
參考文件: 安裝和配置 APM Agents
> 示例:Spring Boot & APM Agent
1、下載 Java Agent 庫
下載地址: https://search.maven.org/search?q=a:elastic-apm-agent
2、啟動 Spring Boot 應用
以 any-spring-security/security-login-no-db 專案作為示例,使用 maven 打包後,通過如下命令啟動服務:
java \ -javaagent:/path/to/elastic-apm-agent-<version>.jar \ -Delastic.apm.service_name=my-cool-service \ -Delastic.apm.application_packages=org.example,org.another.example \ -Delastic.apm.server_urls=http://localhost:8200 \ -jar my-application.jar
輸出日誌類似如下代表 Agent 啟動成功:
2019-03-24 18:29:49.027 [apm-server-healthcheck] INFO co.elastic.apm.agent.report.ApmServerHealthChecker - Elastic APM server is available: {"ok":{"build_date":"2019-03-06T14:11:42Z","build_sha":"daad5449d758e7bf101f6482778a2b15f646a67f","version":"6.6.2"}} 2019-03-24 18:29:49.215 [main] INFO co.elastic.apm.agent.configuration.StartupInfo - Starting Elastic APM 1.4.0 as my-application on Java 1.8.0_172 (Oracle Corporation) Mac OS X 10.14.3 .........
3、任意訪問 Spring Boot 服務的地址,使 APM Agent 採集資訊
> Kibana APM Dashboard
- Kibana 地址: http://localhost:5601
- 賬號/密碼:
admin
/Passw0rd

新增 APM 資料到面板

啟動 APM 面板

APM 服務列表

介面請求資料