多语言应用性能监控系统: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 发布!

相关文章
相关标签/搜索