Elastic APM 是基於 Elastic Stack 構建的應用性能監控系統。經過 Elastic APM 能夠監控應用程序,收集有關請求的響應時間、數據庫查詢、高速緩存調用、外部 HTTP 請求等的詳細性能信息,這樣能夠更快地查明並修復性能問題。java
Elastic APM 還會自動收集未處理的錯誤和異常,錯誤主要基於堆棧跟蹤進行分組,所以能夠識別出現的新錯誤,並密切關注特定錯誤發生的次數。面試
Elastic APM 包含四個組件:spring
APM agentdocker
APM agent 是使用與服務相同的語言編寫的開源庫,能夠像安裝其餘庫同樣將它們安裝到服務中,agent 將檢測服務的代碼並在運行時收集性能數據和錯誤,這些數據緩衝一小段時間併發送到 APM server。數據庫
APM serverjson
APM Server 是用 Go 編寫的開源應用程序,一般運行在專用服務器上,默認監聽端口 8200 ,並經過 JSON HTTP API 從 agent 接收數據,而後根據該數據建立文檔並將其存儲在 Elasticsearch 中。api
Elasticsearch瀏覽器
Elasticsearch 是高可擴展的開源全文搜索和分析引擎,用於快速、近實時地存儲、搜索和分析大量數據。此處用於存儲 APM 性能指標並利用其聚合。緩存
Kibana服務器
Kibana 是開源的分析和可視化平臺,旨在與 Elasticsearch 協同工做,能夠經過 Kibana 搜索、查看 Elasticsearch 中存儲的數據,此處用於可視化 Elasticsearch 中存儲的 APM 數據。
一、部署 Elasticsearch 和 Kibana
參考:使用 Docker 部署帶權限認證的 Elasticsearch
二、編輯 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複製代碼
參考文檔:Running APM Server on Docker
目前 APM Agent 支持以下語言:
參考文檔:安裝和配置 APM Agents
一、下載 Java Agent 庫
下載地址:https://search.maven.org/search?q=a:elastic-apm-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
添加 APM 數據到面板
啓動 APM 面板
APM 服務列表
接口請求數據
● Spring Boot 注入外部配置到應用內部的靜態變量
● Java 使用 UnixSocket 調用 Docker API
● Service Mesh - gRPC 本地聯調遠程服務
● Spring Security 實戰乾貨:如何保護用戶密碼
● Spring Boot RabbitMQ - 優先級隊列
本文由博客一文多發平臺 OpenWrite 發佈!