应用性能监控(APM)
1、主要目标
考虑接入应用性能监控主要想解决以下问题:
- 分布式链路追踪
- 应用级别性能监控(jvm等)
- 低侵入
2、选型
方案 | cat | zipkin | pinpoint | skywalking |
---|---|---|---|---|
依赖 | Java 6 7 8、Maven 3+ MySQL 5.6 5.7、Linux 2.6+ hadoop可选 | Java 6,7,8 Maven3.2+ rabbitMQ | Java 6,7,8 maven3+ Hbase0.94+ | Java 6,7,8 maven3.0+ nodejs zookeeper elasticsearch |
实现方式 | 代码埋点(拦截器,注解,过滤器等) | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码增强 | java探针,字节码增强 |
存储 | mysql , hdfs | in-memory , mysql , Cassandra , Elasticsearch | HBase | elasticsearch , H2 |
jvm监控 | 不支持 | 不支持 | 支持 | 支持 |
trace查询 | 支持 | 支持 | 需要二次开发 | 支持 |
stars | 5.5k | 9.1k | 6.5k | 4k |
侵入 | 高,需要埋点 | 高,需要开发 | 低 | 低 |
部署成本 | 中 | 中 | 较高 | 低 |
基于对应用尽可能的低侵入考虑,以上方案选型优先级pinpoint>skywalking>zipkin>cat。
3、原理
基于我们的选型,重点关注pinpoint和skywalking。
3.1 google dapper 主流的分布式调用链跟踪技术大都和google dapper相似。简单介绍下dapper原理:
span 基本工作单元,一次链路调用(可以是RPC,DB等没有特定的限制)创建一个span,通过一个64位ID标识它,uuid较为方便,span中还有其他的数据,例如描述信息,时间戳,key-value对的(Annotation)tag信息,parent_id等,其中parent-id可以表示span调用链路来源。
上图说明了span在一次大的跟踪过程中是什么样的。Dapper记录了span名称,以及每个span的ID和父ID,以重建在一次追踪过程中不同span之间的关系。如果一个span没有父ID被称为root span。所有span都挂在一个特定的跟踪上,也共用一个跟踪id。 trace 类似于 树结构的Span集合,表示一次完整的跟踪,从请求到服务器开始,服务器返回response结束,跟踪每次rpc调用的耗时,存在唯一标识trace_id。比如:你运行的分布式大数据存储一次Trace就由你的一次请求组成。
每种颜色的note标注了一个span,一条链路通过TraceId唯一标识,Span标识发起的请求信息。树节点是整个架构的基本单元,而每一个节点又是对span的引用。节点之间的连线表示的span和它的父span直接的关系。
整体部署结构:
- 通过AGENT生成调用链日志。
- 通过logstash采集日志到kafka。
- kafka负责提供数据给下游消费。
- storm计算汇聚指标结果并落到es。
- storm抽取trace数据并落到es,这是为了提供比较复杂的查询。比如通过时间维度查询调用链,可以很快查询出所有符合的traceID,根据这些traceID再去 Hbase 查数据就快了。
- logstash将kafka原始数据拉取到hbase中。hbase的rowkey为traceID,根据traceID查询是很快的。
3.2 pinpoint
3.3 skywalking
以上几种方案数据采集端都采用了字节码增强技术,原理如下:
在类加载的过程中,执行main方法前,会先执行premain方法来加载各种监控插件,从而在运行时实现整个链路的监控。
4、部署
下面重点介绍pinpoint部署,目前我们线上是集群部署,整体架构如下:
机器 | 部署应用 |
---|---|
master | zookeeper,hadoop,hbase,pinpoint-collector |
node1 | zookeeper,hadoop,hbase |
node2 | zookeeper,nginx,hadoop,hbase,pinpoint-web,pinpoint-collector |
搭建pinpoint线上用了三台服务器,master、node1、node2。应用数据采集端agent-client将采集到的数据通过udp发送到部署在node2的nginx,通过负载均衡分流到两台pinpoint-collector服务器,落库通过hadoop集群master节点负载均衡到两台hbase服务器上。
4.1 编译
pinpoint编译条件比较苛刻,需要jdk6,7,8环境。
4.2 hbase
集群部署,需要先搭建hadoop集群,hbase集群。搭建完成后初始化表,执行 ./hbase shell /pinpoint-1.7.2/hbase/scripts/hbase-create.hbase,可以根据自己对历史数据的需求设置表的ttl时间。
4.3 pinpoint-web
/pinpoint-1.7.2/web/target/pinpoint-web-1.7.2.war拷贝到tomcat webapps目录下 修改tomcat目录/webapps/pinpoint-web-1.7.2/WEB-INF/classes/hbase.properties hbase配置启动
4.4 pinpoint-collector
/pinpoint-1.7.2/collector/target/pinpoint-collector-1.7.2.war拷贝到tomcat webapps目录下,修改tomcat目录/webapps/pinpoint-collector-1.7.2/WEB-INF/classes/hbase.properties和pinpoint-collector.properties配置并启动
4.5 agent
将/pinpoint-1.7.2/agent整个目录拷贝到应用服务器指定目录下修改/agent/target/pinpoint-agent-1.7.2/pinpoint.config配置业务应用启动时增加参数-javaagent:/root/agent/target/pinpoint-agent-1.7.2/pinpoint-bootstrap-1.7.2.jar -Dpinpoint.agentId=application01 -Dpinpoint.applicationName=application
具体集群部署可以参考: blog.csdn.net/yue530tomto…
需要注意: 默认配置的日志级别是DEBUG,会产生海量日志,要将其修改成INFO级别
5、功能简介
首页能看到应用的拓扑信息,接口调用的成功失败数,响应时间等。
可以查看具体的某一次请求的整个调用链路信息 可以查看jvm相关信息 针对某个慢请求,我们可以通过pinpoint跟踪整个调用链,从而定位慢在哪里。
应用性能监控(APM)相关推荐
- kibana服务器性能要求,kibana 性能监控 apm
启动本地节点:nohup ./apm-server -c apm-server.yml -e weblogic 12 性能监控 修改 wls12213/user_projects/domains/ba ...
- 使用 Paessler PRTG 进行应用程序性能监控 (APM)
首字母缩略词APM可以代表应用程序性能管理和应用程序性能监控.应用程序性能管理致力于检测和诊断复杂的应用程序性能问题,以维持预期的服务水平:它是"将 IT 指标转化为业务意义".在 ...
- 小程序性能监控_通过应用程序性能管理升级监控
小程序性能监控 APM入门 应用程序性能管理(APM)是对软件应用程序的可用性和性能的监视和管理. 不同的人对这个定义的理解不同,因此本文试图确定APM是什么,包括什么以及为什么对您的业务很重要. 如 ...
- ArchSummit深圳APM专场总结:性能监控与调优实践干货分享
随着应用性能管理(APM)越来越被开发和运维人员所熟知,7月17日在深圳召开的ArchSummit 2015全球架构师峰会特开设应用性能管理专场,来自听云.腾讯和OPPO的讲师分享了他们在性能监控.管 ...
- Dockerfile配置APM监控实现Java容器的性能监控
通过Dockerfile可以用来构建容器镜像,我们一般也是通过这种方式来构建一个Tomcat应用服务容器,如果要实现对容器中的Tomcat服务(或是其他Java应用)进行APM(应用性能管理)监控,就 ...
- 多语言应用性能监控系统:Elastic APM
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 概述 Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统.通 ...
- Android apm监控框架,移动性能监控 SDK 详细集成文档
移动性能监控 SDK 详细集成文档 一. Gradle配置 在 Project 的 build.gradle 文件中添加ArgusAPM的相关配置,示例如下: 在项目根目录的 build.gradle ...
- APPDynamics APM性能监控软件
一.软件介绍 APPDynamics 是一款APM性能监控软件,可用于监控和管理服务器.虚拟机.数据库等运行情况. 二.软件使用 1.基础架构 App agent : tomcat agent,用于监 ...
- 微信团队自研的APM利器,Matrix性能监控日志探索
1 前言 2018年12月25日,微信团队自研的APM利器,Matrix正式开源了. https://github.com/tencent/matrix ❝ Matrix 是一款微信研发并日常使用的 ...
- 阿里云产品专家解读链路追踪(Tracing Analysis)和应用性能监控(APM)的联系和区别
阿里云上最近推出了一款新产品链路追踪 ,专注于帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率,并省去用户搭建各类链路监控应用(Jaeger, Zipkin等)和相关 ...
最新文章
- 微生物群落来自哪里,我们说了算-FEAST or SourceTracker
- [20150113]关于oracle的存储结构.txt
- android xml 文件里面的宽度Match_Parent 被 替换成了wrap_content
- 比较Visual Studio中的两个文件
- python decode()函数 (使用登记用于编码的编解码器解码字节)
- HDU - 1223 DP 分类
- vue 常用ui组件
- calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
- windows怎么将图片变为单色图片_印刷丨单色黑与四色黑
- vc可以实现对话框里显示html文档内容,也可以显示word内容吗,VC6中使用CHtmlView在对话框控制中显示HTML文档...
- LeetCode 208. Implement Trie (Prefix Tree)
- perl JSON与HASH 互相转换
- 力特usb转232驱动程序下载_电脑USB接口、U盘接口不能使用的原因及解决方法
- 小米蓝牙驱动_小米降噪项圈蓝牙耳机:随时随地享受奢侈静谧空间
- 开发实战:舍得网44587行代码开发经验
- 装完金蝶电脑无限重启_电脑一直自动重启的原因与解决方法
- MySQL数据库下.frm .MYD .MYI损坏恢复操作——筑梦之路
- python一行输入两个数据中间用空格隔开
- MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图)
- 如何将您的iPhone更新到最新的iOS版本