▶ 概述
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
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
▶ 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 庫
2、啓動 Spring Boot 應用
以 spring-boot-demos/hello spring boot 項目作爲示例,使用 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 <app-name>.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