Elastic APM 是基於 Elastic Stack 構建的應用性能監控系統。經過 Elastic APM 能夠監控應用程序,收集有關請求的響應時間、數據庫查詢、高速緩存調用、外部 HTTP 請求等的詳細性能信息,這樣能夠更快地查明並修復性能問題。html
Elastic APM 還會自動收集未處理的錯誤和異常,錯誤主要基於堆棧跟蹤進行分組,所以能夠識別出現的新錯誤,並密切關注特定錯誤發生的次數。java
Elastic APM 包含四個組件:git
APM agentgithub
APM agent 是使用與服務相同的語言編寫的開源庫,能夠像安裝其餘庫同樣將它們安裝到服務中,agent 將檢測服務的代碼並在運行時收集性能數據和錯誤,這些數據緩衝一小段時間併發送到 APM server。spring
APM serverdocker
APM Server 是用 Go 編寫的開源應用程序,一般運行在專用服務器上,默認監聽端口 8200 ,並經過 JSON HTTP API 從 agent 接收數據,而後根據該數據建立文檔並將其存儲在 Elasticsearch 中。數據庫
Elasticsearchapi
Elasticsearch 是高可擴展的開源全文搜索和分析引擎,用於快速、近實時地存儲、搜索和分析大量數據。此處用於存儲 APM 性能指標並利用其聚合。瀏覽器
Kibana緩存
Kibana 是開源的分析和可視化平臺,旨在與 Elasticsearch 協同工做,能夠經過 Kibana 搜索、查看 Elasticsearch 中存儲的數據,此處用於可視化 Elasticsearch 中存儲的 APM 數據。
一、部署 Elasticsearch 和 Kibana
二、編輯 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
三、部署 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 Agents
一、下載 Java Agent 庫
二、啓動 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 .........
三、任意訪問 Spring Boot 服務的地址,使 APM Agent 採集信息
admin
/ Passw0rd