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

img

▶ 概述

Elastic APM 是基於 Elastic Stack 構建的應用性能監控系統。經過 Elastic APM 能夠監控應用程序,收集有關請求的響應時間、數據庫查詢、高速緩存調用、外部 HTTP 請求等的詳細性能信息,這樣能夠更快地查明並修復性能問題。java

Elastic APM 還會自動收集未處理的錯誤和異常,錯誤主要基於堆棧跟蹤進行分組,所以能夠識別出現的新錯誤,並密切關注特定錯誤發生的次數。面試

▶ APM 組件

Elastic APM 包含四個組件:spring

img

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 數據。

▶ 部署 APM Server

一、部署 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 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

一、下載 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 採集信息

  • http://localhost:8080/
  • http://localhost:8080/user

> Kibana APM Dashboard

  • Kibana 地址:http://localhost:5601
  • 帳號/密碼:admin / Passw0rd

img

添加 APM 數據到面板

img

啓動 APM 面板

img

APM 服務列表

img

接口請求數據

img

Spring Boot 注入外部配置到應用內部的靜態變量

將 HTML 轉化爲 PDF新姿式

Java 使用 UnixSocket 調用 Docker API

Fastjson致命缺陷

Service Mesh - gRPC 本地聯調遠程服務

使用 Thymeleaf 動態渲染 HTML

Fastjson致命缺陷

Spring Boot 2 集成log4j2日誌框架

Java面試通關要點彙總集之核心篇參考答案

Java面試通關要點彙總集之框架篇參考答案

Spring Security 實戰乾貨:如何保護用戶密碼

Spring Boot RabbitMQ - 優先級隊列

img

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索