elastic stack在6.3版本开始推出了APM功能,但当时只支持nodejs,python和ruby,尚不支持java和go,而公司里面大部分系统还是java,因此只是关注,还没有去解读。但在6.4.0版本,终于推出了java和go的beta版本,而在6.5.0版本,终于变为GA版本。这使得在生产环境上部署APM服务变为可能,下面让我们一起来看看elastic stack的这个APM服务吧

文章目录

  • elastic APM的前世今生
  • 基本组件
  • APM
    • 事件(event)
    • 组件通信
    • 真实用户监控(RUM)
    • 分布式跟踪(Distributed trace)

elastic APM的前世今生

首先,不要以为这个APM功能是一个不务正业、心血来潮的新功能。其实今天elastic的APM来源于之前的opbeat。而Opbeat是由一个丹麦初创团队于2013年成立的老公司了,专门运维软件的开发,而其主打产品即是APM运维软件。
被elastic收购之后,opbeat已经于2018年5月份,正式关闭网站和社区,转到了elastic APM上:

基本组件

Elastic APM 由四个基本组件构成:

  • APM agents
  • APM Server
  • Elasticsearch
  • Kibana APM UI

基本架构如下图:

APM agent是一系列开源库,使用与服务器端相同的语言编写,目前支持node、python、ruby、js,java和golang。您可以像安装任何其他库一样将它们安装到服务器端中。apm agent会检测代码并在运行时收集性能数据和错误。此数据可 缓冲一小段时间并发送到APM服务器。

APM Server是一个用Go编写的开源应用程序,通常在专用服务器上运行。它默认侦听端口8200,并通过JSON HTTP API从代理接收数据。然后,它根据该数据创建文档并将其存储在Elasticsearch中。

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许你快速,近实时地存储,搜索和分析大量数据。Elasticsearch用于存储APM性能指标并利用其聚合。

Kibana是一个开源分析和可视化平台,旨在与Elasticsearch协同工作。你可使用Kibana搜索,查看Elasticsearch中存储的数据并与之进行交互。你还可以使用Kibana中的专用APM UI或可以通过 APM Kibana UI直接加载的预构建的开源Kibana dashboard来可视化APM数据。(basic license就授权了APM功能)

APM

事件(event)

APM agent从其已监测的应用程序中捕获不同类型的信息,称为事件。事件可以是Errors,Spans或Transactions。然后将这些事件流式传输到APM server,由server验证并处理事件。

  • Errors 包含捕获的错误或异常的相关信息。
  • Spans包含已执行的特定代码路径的相关信息。它们从活动的开始到结束进行测量,并且可以与其他跨度建立父/子关系。
  • Transactions是一种特殊的跨度,具有与之关联的额外元数据。您可以将Transactions视为您在服务中衡量的最高级别的工作。例如,提供HTTP请求或运行特定的后台作业。

组件通信

APM server是一个单独的组件 - 它有助于保持agent的轻量化,防止某些安全风险,并提高整个elastic stack和APM stack的兼容性。

Intake API是的APM agent和APM server进行通信的内部协议。在APM server验证并处理来自APM agent的事件(通过Intake API)后,server将数据转换为Elasticsearch文档并将其存储在相应的Elasticsearch索引中。只需几秒钟,您就可以开始在Kibana中查看应用程序性能数据。

真实用户监控(RUM)

Real User Monitoring捕获用户与Web浏览器等客户端的交互。javascript agent是Elastic的RUM agent。要使用它,您需要在APM server中启用RUM支持。

与监视请求和响应的Elastic APM后端agent不同,RUM JavaScript agent监视客户端应用程序中的真实用户体验和交互。RUM JavaScript agent也与框架无关,这意味着它可以与任何前端JavaScript应用程序一起使用。

您将能够测量诸如time to first byte之类的指标。而domInteractivedomComplete这类指标可以帮助你发现客户端应用程序中的性能问题以及与服务器端应用程序通信延迟的相关问题。

分布式跟踪(Distributed trace)

我们所有的APM agent都支持开箱即用的分布式跟踪。通过分布式跟踪,你可以在一个视图中分析整个微服务架构的性能。

现代应用程序性能监视的一个关键特性是分布式跟踪。随着软件应用程序架构从单一架构转变为更加分散的,基于服务的架构,能够跟踪请求如何流经系统至关重要。

通过分布式跟踪,request和transactions将链接在一起形成trace,即transactions和spans共同构成了一个Trace。trace不是事件,而是将具有公共根的事件组合在一起。从中,我们可以端到端的检测request的性能,以及哪些service是该request服务的一部分。

分布式追踪可以监控整个调用链,使开发人员和运营人员能够将各个事务的性能进行上下文分析,从而快速查明最终影响用户体验的瓶颈。

需要注意的是,目前Distributed trace还只是一个Beta版本

我们可以从下图学习分布式跟踪。
其中,Rack是一个request。因为是一个微服务系统,整个request是由多个service共同完成的。示例中,参与服务的bean由ruby, python, java, node。可见,整个Distributed trace与技术无关,只要由一个公共的根(trace id),则在服务下所有的transactions均可在UI上显示。

elasticsearch APM功能全解 一相关推荐

  1. rpm包管理功能全解

    rpm包管理功能全解 rpm包管理功能全解              linux rpm问题:怎样查看rpm安装包的安装路径                      rpm -qa l grep   ...

  2. 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索. 首先要添加权限 <uses-permission andro ...

  3. 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓短信功能全解:调用系统短信功能发送短信.彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信. 首先需要 ...

  4. (洛谷入门系列,适合洛谷新用户)洛谷功能全解

    目录 前注 前言 第一章 进入方式 1.1 基础操作 1.2 两步验证 1.3 安全邮箱和安全手机 第二章 侧栏与主界面介绍 2.1 蓝底白色洛谷标志 2.2 "应用>>&quo ...

  5. 安卓自定义相机拍照功能全解(不调用系统相机)

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓实现一个相机的基本功能. 启动和释放相机 由于拍照功能一般需要实时预览,所以比较耗电,因此在窗口的恢复和暂停函数中需要启动和释放相机 privat ...

  6. 硬盘开启NCQ功能全解

    硬盘发展的速度大家是有目共睹的,在2005年,SATA接口的硬盘顺利代替了PATA硬盘,成为市场中主流的热点产品.而在2005年末,关于SATA硬盘的一项新的技术NCQ又进入了人们的视野. 对于硬盘的 ...

  7. 模型量化压缩功能全解:打开AI部署加速器

    点击左上方蓝字关注我们 随着深度学习技术渗透入越来越多领域,人工智能在边缘侧的大规模应用被提上日程.尤其这两年人工智能-计算机视觉方向在安全生产.工业质检.智能硬件等应用场景中在广泛应用,这些应用场景 ...

  8. word的导航、目录索引、标题索引功能全解——非常适合作为个人笔记本使用all in one,相比云笔记,可任性加入图片依然流畅运行

    找遍全网文章也没找到讲解很系统的标题使用方法,今天做一个总结: 首先新建一个word文档,打开后拟一个标题,比如todolist(待办列表).然后点击菜单开始-样式-标题1: 如果您发现左侧没有van ...

  9. python 3.8教程_Python 3.8 新功能全解

    Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变.内存共享 ...

  10. 韩松手机摄影笔记第一课---手机拍照核心功能全解

    1.课堂所需设备: 2.拍照动作: 3.在拍背景虚化前,弄懂对焦原理 轻触画面可重定位焦点,但是焦点会在几秒后重新计算,若想锁定焦点,可长按某处.手机会定自动定位焦点,但是推荐自己定位.因为焦点可以确 ...

最新文章

  1. ASP.NET程序中常用的三十三种代码(转载)
  2. halcon/c++接口基础 之 halcon初认识
  3. 树莓派(TCP客户端 )和Wemos(TCP服务端连接红外模块)通讯实现对红外设备的控制
  4. C++继承的继承方式
  5. 手工画设计模式的类图
  6. mysql怎么回复.from的数据库_mysql怎么回复.from的数据库
  7. Stanford NLP 第六课: Long Short Term Memory
  8. 剑指offer面试题[49]-把字符串转化为整型
  9. linux如何rpm更新内核,使用RPM包对RedHat进行内核升级
  10. 以围棋来说,人工智能程序跟通常程序差异在哪里
  11. 零元学Expression Design 4 - Chapter 4 教你如何自制超炫笔刷
  12. 球面坐标系转换为笛卡尔坐标系
  13. Linux环境使用smart-go-dl install go1.18报错error obtaining VCS status: exit status 129 -buildvcs=false
  14. 中公计算机类考试题库,计算机考试题库:计算机考试模拟练习题(194)
  15. SaaS系统权限体系设计
  16. 【sqlplus】SQL*Plus命令使用大全
  17. 翻译图片中文字的网站
  18. 车间制造管理系统(上)
  19. 除了照片征集、视频征集,fotoo还可以征集什么?
  20. 103、迷之自信,不是真的自信

热门文章

  1. word 插入目录及错误!未找到目录项
  2. 2018年1月份最热门的JavaScript开源项目
  3. html 重力感应效果,HTML5 重力感应效果,实现摇一摇效果
  4. 函数9:生成器和 yield 语句
  5. C语言程序设计 题目抽签系统
  6. 毕业设计开题报告撰写方法
  7. fabric 中 peer 和 couch 容器内部数据存放目录地址
  8. 统信uos设置静态IP
  9. 数据库小型教务系统,成绩管理系统
  10. sql数据库读取oracle数据库,SQL Server 数据导入Oracle数据库(脚本实现)