▶ 概述

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

参考:使用 Docker 部署带权限认证的 Elasticsearch

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

参考文档: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

1、下载 Java Agent 库

下载地址:https://search.maven.org/search?q=a:elastic-apm-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

多语言应用性能监控系统:Elastic APM的更多相关文章

  1. 前端性能监控系统ShowSlow

    作者:zhanhailiang 日期:2014-11-14 1. 简单介绍 ShowSlow是开源的前端性能监控系统,提供了下面功能: 前端性能指标数据收集功能:ShowSlow原生提供了数据收集工具 ...

  2. 性能监控系统 | 从0到1 搭建Web性能监控系统

    工具介绍 1. Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理.常见支持的「G ...

  3. 实用|从0到1 搭建Web性能监控系统

    工具介绍 1. Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理. 常见支持的「 ...

  4. CentOS7安装性能监控系统

    目录 系统描述. 开发环境. 开始之前. 安装influxdb数据库. 安装collectd 安装Grafana FAQ       influxdb的web界面没反应.   系统描述 想打造 New ...

  5. 前端性能监控系统 & 前端数据分析系统

    前端监控系统 目前已经上线,欢迎使用! 背景:应工作要求,需要整理出前端项目的报错信息,尝试过很多统计工具,如: 腾讯bugly.听云.OneApm.还有一个忘记名字的工具. 因为各种原因,如: 统计 ...

  6. Solutions:应用程序性能监控/管理(APM)实践---python/flask

    本文部分内容转载自:https://blog.csdn.net/UbuntuTouch/article/details/102844900 官方文档:https://www.elastic.co/gu ...

  7. .Net Core with 微服务 - Elastic APM

    上一次我们介绍了Seq日志聚合组件.这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件.APM 监控围绕对应用.服务.容器的健康监控,对接口的调用链.性能进行监控.在我们实施微服务 ...

  8. Node.js精进(9)——性能监控(上)

    市面上成熟的 Node.js 性能监控系统,监控的指标有很多. 以开源的 Easy-Monitor 为例,在系统监控一栏中,指标包括内存.CPU.GC.进程.磁盘等. 这些系统能全方位的监控着应用的一 ...

  9. 前端性能监控方案window.performance 调研(转)

    1. 业界案例 目前前端性能监控系统大致为分两类:以GA为代表的代码监控和以webpagetest为代表的工具监控. 代码监控依托于js代码并部署到需监控的页面,手动计算时间差或者使用浏览器的的API ...

随机推荐

  1. 机器学习:DeepDreaming with TensorFlow (二)

    在前面一篇博客里,我们介绍了利用TensorFlow 和训练好的 Googlenet 来生成简单的单一通道的pattern,接下来,我们要进一步生成更为有趣的一些pattern,之前的简单的patte ...

  2. 关于在.Net开发中使用Sqlite的版本选择问题

    原文:关于在.Net开发中使用Sqlite的版本选择问题 如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不 ...

  3. Debug权限提升

    procedure SetPrivilege; var OldTokenPrivileges, TokenPrivileges: TTokenPrivileges; ReturnLength: dwo ...

  4. 关于"云服务器被检测到对外攻击已阻断该服务器对其它服务器端口的访问"的解决措施

    前段时间阿里云大量发送云服务器对外攻击的信息到邮箱中,邮件信息大概如下: 您的云服务器(XX.XX.XX.XX)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:XX)的访问,阻断预计将在 ...

  5. wpf VisualBrush 的使用,可创建重复图像

    VisualBrush 类(msdn) <Grid.Background> <VisualBrush TileMode="Tile" Viewport=" ...

  6. 如何计算memcache的容量

    在容量足够的情况下,当然是越大越好,但这样会造成浪费.不考虑这种情况.我们一般的情况是: memcache集群一开始创建会根据存储的数据量与访问量进行容量大小的估算.再算一个20%的冗余. 在网站快速 ...

  7. C# ToolStrip在父窗体失去焦点时,点击里面的按钮无效

    C#里面ToolStrip控件,在父窗体失去焦点的情况下,第一次点击ToolStrip上面的按钮,只是让父窗体获得焦点,并不会引发按钮的Click事件.要执行按钮操作必须再点击一次.相当于说,在父窗体 ...

  8. Android零基础入门第41节:使用SimpleAdapter

    原文:Android零基础入门第41节:使用SimpleAdapter 通过ArrayAdapter实现Adapter虽然简单.易用,但ArrayAdapter的功能比较有限,它的每个列表项只能给一个 ...

  9. Attention is all you need及其在TTS中的应用Close to Human Quality TTS with Transformer和BERT

    论文地址:Attention is you need 序列编码 深度学习做NLP的方法,基本都是先将句子分词,然后每个词转化为对应的的词向量序列,每个句子都对应的是一个矩阵\(X=(x_1,x_2,. ...

  10. 读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)

    很多方案是采用GetVersion.GetVersionEx这两个API来查询操作系统的版本号来判断当前的操作系统是Windows系列中的哪个,在Win10没有出现前,这种方法是行的通的,但是Win1 ...