开源性能监控工具APM之Skywalking和Pinpoint的实测对比

作者:zollty,资深程序员和架构师,私底下是个爱折腾的技术极客,架构师社区合伙人!


零,什么是APM?

APM(ApplicationPerformance Management)是一种应用性能监控工具,通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。

一、Portal功能对象

Skywalking(简称SW)有如下菜单和功能:

  • Dashboard(仪表界面)

  1. 监控实例的数量信息

  2. 请求热力图(反映:请求数量和响应时间)

  3. 应用平均告警数量

  4. 应用吞吐量(cpm,每分钟调用次数)

  5. 最慢的服务Top10

  • Topology(拓扑界面)

  1. 用户、应用、各种中间件的调用关系图

  2. 应用之间的调用吞吐量(cpm)和平均响应时间(rt)

  3. 应用的服务可用率(SLA)

  • Application(应用界面)

  1. 应用基本信息(ip、host等)

  2. 应用调用关系图

  3. 历史实例进程列表

  4. 实例进程的平均吞吐量

  5. 实例进程的平均响应时间

  6. 实例进程的CPU、内存、JVM情况

  7. 实例进程的请求量走势图

  8. 应用的慢服务Top10

  • Service(服务界面)

  1. 服务平均吞吐量(cpm)、平均响应时间(RT)、可用率(SLA)

  2. 服务依赖关系图以及调用的平均吞吐量和响应时间

  • Alarm(告警界面)

  1. 显示服务器、应用、服务的告警信息

  • Trace(链路追踪界面)

  1. 支持按各种条件查询调用

  2. 查看调用的span链路信息(时序图)

  3. 可以看到各span的耗时、异常和其他信息(不同的span支持不同的信息,例如DB类型的,可以打印出sql)

部分截图

sw-portal

sw-trace

sw-app

Pinpoint(简称PP)有如下菜单和功能:

  • 主仪表界面

  1. 应用调用关系图

  2. 请求热力点图和柱状图(反映:请求数量和响应时间)

  3. 时间段内总的调用成功、失败次数

  4. 响应时间统计图

  5. 支持按时间选择查看调用列表(跳到链路追踪页面)

  • 链路追踪界面

  1. 查看调用的span链路信息(时序图)

  2. 可以看到各span的耗时和类名、方法名(如果DB操作,可以打印出sql和参数)

  • 检阅界面(inspector)

  1. 看不太懂,只知道有非常详细的JVM监控信息

部分截图

pp-portal

pp-trace

二、个人使用感受和优缺点对比

Skywalking的不足:

1、针对单个应用的请求热力图,只能看到请求数量,看不到响应时间分布。

2、应用界面,不能直观看到时间段内的请求总数量及错误数量。

3、JVM的监控信息,SW没有PP全面。

4、调用链信息,SW默认只显示入口和组件(如MySQL)调用处的信息,而PP还会显示SpringBean方法的调用信息,更丰富实用,当然SW也可以开启更详细的信息,但是会显示Bean内部方法的所有调用,显得冗余(例如 A调B调C,显示B和C被调用的入口方法就可以了,不用显示B调用自己内部方法的过程)。

5、SW更新快,BUG较多,值得优化和改进的地方也很多,虽然功能强,但是用起来不一定顺手和实用,还需要时间斟酌和打磨。相对而言,PP功能成熟,功能虽然少,但是都比较经典,用起来比较顺手。

6、SW调用链里面DB类型只能看到SQL,看不到参数化SQL的传值,而PP可以。

7、PP支持实时监控、页面实时刷新,而SW不支持。

Pinpoint的不足:

1、不支持异步执行的调用链追踪(比如多线程、MQ),而SW通过注解可以支持。

2、功能比较少,例如缺少平均响应、平均吞吐量等数据,缺少慢服务的统计。

3、调用链信息,可以扩展和丰富的程度,要低于SW(SW可以通过注解扩展)。

另外:

  1. 对应用性能的影响,实测两者差不多,SW稍微好一些(吞吐量比PP大概高5%——我们做过单个span的性能测试,具体数据就不贴出来了)。

  2. 实时告警通知,暂未测试,我个人希望有 服务异常、JVM异常、慢服务、高负载等的订阅和通知功能,然而貌似这两个APM都没有很直观的展示出有这方面的能力。

总的来说:

  1. PP相比后起之秀SW,要更稳定、易用,而且并没有明显短处;

  2. SW号称的异步调用链追踪(是有代码侵入性的),我认为PP只要稍加改进也可以支持;

  3. 小公司,推荐用PP,等SW成熟之后再说吧;

  4. 有二次开发实力的公司,需进一步对比两者的可扩展性、二次开发效率,选择一个更能满足自己定制需求的APM。

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Core 3.1,这匹黑马,2020年值得所有程序员重视!

强人掌舵 重回巅峰2014年萨蒂亚纳德拉接棒史蒂芬鲍尔默成为微软掌门人,五年的时间,纳德拉将夕阳西下、停滞不前的微软重新带回巅峰状态。2019年,微软今年挤下苹果,成为2019年全球市值最高企业,终止苹果过去7年来的龙头…

为什么你没有选择xamarin?

点击上方“dotNET全栈开发”,“设为星标”加“星标★”,每天11.50,好文必达全文约900字,预计阅读时间11分钟注:本篇文章只是关于xamarin的一个分享,没有xamarin技术深入的地方2019 年,注定会是 …

新款 Azure .NET SDK 如何设定 Content-Type

点击上方蓝字关注“汪宇杰博客”导语前不久我写了一篇《尝鲜新版 Azure .NET SDK》之后,使用了一段时间发现没爆,于是今天决定把博客的图片存储从旧版 SDK 迁移到新版 SDK,结果小收福报。Content-Type上传到 Azure Blob 的文件必须设置正确的…

聊聊程序员的成长与价值提升

一、 回顾我的职场体会我的职场生涯开始于十年前,一直在中小企业发展,未曾有幸到沿海那些高速发展的互联网公司工作,也就错过了互联网的大时代。但这不影响我的正常工作生活,事实上无论你身在何处,或在哪家公司&#x…

本地Jupyter连接远程linux服务器

连接的前提是本地装好了Jupyter,以及远程的服务器也配置好了。 先连接远程的Linux服务器,输入脚本命令: jupyter notebook得到执行结果: [I 14:29:11.290 NotebookApp] Serving notebooks from local directory: /home/ubuntu …

PowerBI 2019.12更新完美收官2019

PowerBI 的2019年12月更新来了。终于 PowerBI 完成了在 2019 年的进化。对于 12 月来说,最大的更新就是提供了主题设置,这使得我们彻底摆脱编写一个从来都不应该编写的JSON来设置主题文件。下面我们分别来详细介绍。自定义主题首先你需要打开预览&#x…

Task.CompletedTask和Task.Result小记

在任何返回Task的方法中,如果可以在不进行异步的情况下计算结果,则最好避免使用Task.Run。例如,一个简短的计算函数,或者测试中返回了一个预先计算过的结果,则无需使用Task.Run。例如,定义了一个返回Task的…

Dapr 运用之集成 Asp.Net Core Grpc 调用篇

前置条件: 《Dapr 运用》改造 ProductService 以提供 gRPC 服务从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包Grpc.AspNetCore配置 Http/2gRPC 服务需要 Http/2 协议public static IHostBuilder CreateHostBuilder(string[] args) {return Host.CreateDefault…

蓝桥杯 印章拿金币

今日心得 对于大数组的定义要放在main函数外&#xff0c;否则会报错认真思考动态规划的边界设置&#xff0c;不是机械地设置1或0 动态转移方程&#xff1a; dp[i][j] dp[i-1][j]*j/n dp[i-1][j-1]*(n-j1)/n;参考代码 #include<bits/stdc.h> using namespace std;int…

ASP.NET Core Web API 最佳实践指南

原文地址&#xff1a; ASP.NET-Core-Web-API-Best-Practices-Guide介绍当我们编写一个项目的时候&#xff0c;我们的主要目标是使它能如期运行&#xff0c;并尽可能地满足所有用户需求。但是&#xff0c;你难道不认为创建一个能正常工作的项目还不够吗&#xff1f;同时这个项目…

蓝桥杯 砝码称重

试题&#xff1a; 思路&#xff1a; 经典的0-1背包问题&#xff0c;这题坑的地方在于方案数会超过边界&#xff0c;当发现当前重量可行时&#xff0c;直接归为1&#xff0c;防止dp数组累加时溢出。或者最后统计的时候&#xff0c;将判断条件从if(dp[n][i])>0改为if(dp[n][i…

[小技巧]你真的了解C#中的Math.Round么?

今天在某.NET Core 群中看到有人在问Math.Round的问题。其实这个问题之前有很多人遇到了&#xff0c;在此总结一下。开发者为了实现小数点后 2 位的四舍五入&#xff0c;编写了如下代码&#xff0c;var num Math.Round(12.125, 2);代码非常的简单&#xff0c;开发者实际得到的…

蓝桥杯 左baby右兄弟

试题&#xff1a; 思路&#xff1a; “左孩子右兄弟”是常见的多叉树转化成二叉树的方法。具体的实现方式是&#xff0c;从第二层最右边的结点开始&#xff0c;将将自己的孩子结点放到左边&#xff0c;左边一位的兄弟放到左边的结点上。对于是多支的孩子先递归转成一支树。 本…

一文带你了解如何打造持续学习文化

一个学习型组织&#xff0c;必须是通过致力于不懈地改进和促进创新的文化来实现的。持续学习文化能力描述了一套鼓励个人和整个企业不断增长知识、能力、绩效和创新的价值观和实践。它是精益企业的七个核心能力之一&#xff0c;每一个都是实现业务敏捷的关键点。为什么要持续学…

蓝桥杯 数字三角形 贪心+动态规划

参考代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int data[105][105];int main() {ios::sync_with_stdio(false);int n;cin >> n;for(int i 1; i < n; i){for(int j 1; j < i; j){cin >> data[i][j];}}int…

【.NET Core 跨平台 GUI 开发】第三篇:Gtk# 表格布局与事件处理

除了使用 HBox 和 VBox 进行布局外&#xff0c;还可以使用 Table 对象进行布局。这个有点像 html 的 table&#xff0c;适合方方正正大小差不多的空间集合。本篇将会对 Table 布局进行讲解&#xff0c;利用 Table 做出一个计算器的界面并使其可以响应按钮点击并将点击的按钮内容…

如何构建知识体系

大家好&#xff0c;我是Z哥。不知道你有没有过这样的感觉&#xff0c;那些比你更厉害的人&#xff0c;在一件事中往往可以轻易地从一个「点」延展出一条「线」&#xff0c;甚至一个「面」的知识点。对我们真实感受的冲击是&#xff0c;在大局观上被碾压&#xff0c;相比之下觉得…

蓝桥杯 递增序列

思路&#xff1a; 这道题一开始想复杂了&#xff0c;其实这么小的数据量直接暴力求解即可。 参考代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int m 30, n 50;bool checkL(int x, int y) //判断坐标是否超出边界 {if(x &g…

使用DbContextPool提高EfCore查询性能

长话短说上个月公司上线了一个物联网数据科学项目&#xff0c;我主要负责前端接收设备Event&#xff0c;并提供模型参数下载&#xff08;数据科学团队会优化参数&#xff09;。WebApp部署在Azure&#xff0c;模型参数使用Azure SQL Server存储。最近从灰度测试转向全量部署之后…

蓝桥杯 分巧克力 二分

#include<bits/stdc.h> using namespace std; typedef long long ll; ll n, k; vector<ll> width, height;bool check(ll length) //判断边长为length的正方形都否满足需求 {ll sum 0; //记录能切成的最大方块数 for(int i 0; i < n; i){sum (width[i] / …