云原生之可观测性-APM概念及选型

导读:为了让大家更好的 APM 系统的设计实现,我将在公众号编写《云原生之可观测性》系列文章,深入讲解 APM 系统的产品设计、架构设计和基础技术。APM是一个庞杂的技术体系,涉及到很多开源技术,欢迎大家留言讨论。

本文主要从以下几个维度来阐述APM:

1、APM是什么?

2、APM的目的是什么?

3、APM开源框架

一. APM是什么?

APM 是Application Performance Managment的缩写,即:“应用性能管理”。现代的APM体系,基本都是参考Google的《Dapper,大规模分布式系统的跟踪系统》(公众号回复: APM,领取高清版本文档)的体系来实践的。

APM属于IT运维管理(AIOps)范畴。主要是针对企业关键业务的IT应用性能和用户体验的监测、优化,提高企业IT应用的可靠性和质量,保证用户得到良好的服务,降低IT总体拥有成本(Total cost of ownership - TCO)。

后来由Gartner归纳抽象出来一套概念框架,如下图:

Gartner的APM Conceptual Framework(概念框架)是经过大量调研与分析后的归纳与抽象,这些切实需求由来已久,IT从业者们对它的理解与实践也几乎是从IT诞生至今就已开始,这并不是一次发明。

1、终端用户体验:End User Experience

2、运行时应用架构:Runtime application architecture

3、业务事务分析:Business Transactions

4、深度组件监控:Deep Dive Component Monitoring

5、分析报告:Analytics / Reporting

关于APM概念框架,之后将结合案例讲解。

二、APM的目的是什么?

随着中台、微服务、云原生架构的流行,应用系统本身正变得越来越难以管理,终端用户的一次请求往往需要涉及到多个服务,因此服务性能监控和问题排查就变得异常的复杂。不同的服务可能由不同国家,不同团队,和不同编程语言来实现。服务可能部署在成千上万台服务器,跨越不同机房,不同数据中心。

如上图,一次请求经过多个应用,实际情况可能比上图还要复杂,那么我们如何去发现问题和排查问题,以及它们的性能如何?如果性能不好,我们该如何去优化呢?是去优化应用C还是去优化应用D呢?

因此,就需要一个可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是APM系统。

APM最早是谷歌公开的论文提到的 Google Dapper。Dapper是Google生产环境下的分布式跟踪系统,自从Dapper发展成为一流的监控系统之后,给google的开发者和运维团队帮了大忙,所以谷歌公开论文分享了Dapper。

三、APM开源套件

APM是一种理念,一种方法论,主要指对企业关键业务应用进行观测、分析、优化。从而提高企业应用的可靠性和稳定性。

从用户的角度来说:可以保证为用户提供高质量的服务。

从企业的角度来说:可以为企业降低IT的总成本。

Metrics、Tracing和Logging是APM中三个主要的概念,如上图,Metrics、Tracing和Logging是有交叠的地方。从左边线条的箭头方向看成本会越来越高。Metrics、Tracing和Logging三者之间的成本关系(以存储成本计算):

  • Metrics 更节省存储资源,因为数据会被聚合后存储。
  • Logging 需要的存储空间最大,成本最高。
  • Tracing 也是存储大户,由于它的业务特点可以采样,所以总体存储成本则介于两者之间。

了解了Metrics、Tracing和Logging之后,我们在看看市面上有哪些开源产品是支持的这三个概念的,下面介绍到的开源框架,大部分都是笔者在做监控系统工作中调研过的,如果想深入了解,欢迎留言讨论。

3.1 主流框架

1. Skywalking

官方地址:https://skywalking.apache.org/

主要语言:Java

项目描述:必须排第一,国货之光。Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。

总结:Skywalking已经是一个比较完整的APM解决方案了,如果公司体量不是很大,建议使用。

2. ELK stack

官方地址:https://www.elastic.co/cn/

主要语言:GO和Java

项目描述:ELK Stack是一个流行的工具套件,功能涵盖监控、日志和数据可视化。它由 ElasticSearch, Logstash, and Kibana 三部分组成。其中,Elasticsearch 负责搜索和分析,Logstash 是日志聚积器,而 Kibana则提供华丽的可视化仪表盘。

总结:国内大数据互联网公司都采用ELK做日志采集。

3. prometheus

官方地址:https://prometheus.io/

主要语言:Go

项目描述:Prometheus 是一套开源的系统监控报警框架。它受启发于 Google 的 Brogmon 监控系统,由工作在 SoundCloud 的前 google 员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。

2016 年,Prometheus 正式加入 Cloud Native Computing Foundation(CNCF)基金会的项目,成为受欢迎度仅次于 Kubernetes 的项目。2017 年底发布了基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配合。

Prometheus 作为新一代的云原生监控系统,目前已经有超过 650+位贡献者参与到 Prometheus 的研发工作上,并且超过 120+项的第三方集成。

总结:容器化必备监控软件

4. open-falcon

官方地址:http://open-falcon.org/

主要语言:Go、Python

项目描述:小米开源的企业级监控工具,用 Go 语言开发而成,包括小米、滴滴、美团等在内的互联网公司都在使用它,是一款灵活、可扩展并且高性能的监控方案,Open-Falcon从互联网公司的一些需求出发,从各位SRE、SA、DEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了open-falcon。

总结:用于做服务器端监控是一个不错的选择

5. Sensu

官方地址:http://sensu.io/

主要语言:Ruby

项目描述:Sensu 是由 Sonian 公司开发的一种监控框架,主要用于拥有大规模节点的云计算平台的检查与监控。它可以监控服务器、相关服务和应用程序健康状况,并通过第三方集成发送警报和通知。目前发行的版本有企业版和开源版两种,收费的企业版本较之免费的开源版本拥有更多的功能。

6. pinpoint

官方地址:https://github.com/pinpoint-apm/pinpoint

主要语言:Java

项目描述:pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的。

总结:UI不错,但是不支持多语言,探针也不丰富,个人不建议使用。

 7. zipkin

官方地址:https://zipkin.io/

主要语言:Java

项目描述:这个是twitter开源出来的,也是参考Dapper的体系来做的。Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。为了方便在开发环境我直接采用了In-Memory方式进行存储,生产数据量大的情况则推荐使用Elasticsearch。

总结:具有侵入性,报表也比较单一。

8. Jaeger

官方地址:https://www.jaegertracing.io/

主要语言:Go

项目描述:Jaeger由Uber创建,它除了Zipkin的功能集外,Jaeger还提供了动态采样,REST API,基于ReactJS的UI界面,以及对Cassandra和Elasticsearch内存数据存储的支持。为了实现这些功能,Jaeger相比Zipkin采取了一种不同的,更分散的方法。

总结:Jaeger的采样算法是非常值得推荐的。如果在Jaeger和Zipkin选择,建议Jaeger

9. Cat

官方地址:https://github.com/dianping/cat

主要语言:Java

项目描述:CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全面的监控服务和决策支持。AT作为大众点评网基础监控组件,它已经在中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等)中得到广泛应用,为点评各业务线提供系统的性能指标、健康状况、基础告警等。

总结:15年左右做监控系统的时候,调用链用了Cat,不过由于具备侵入性,后面大面积的改造,改成无侵入型,总体来说是不错的开源框架。

3.2 传统监控

1.zabbix

官方地址:http://zabbix.com/

主要语言:C和PHP

项目描述:Zabbix是业界领先的开源网络监控工具,它具有可扩展的网络监控能力,Zabbix在网络、服务器、云、应用程序和服务监控方面做得非常好。

你可以通过Zabbix可以跟踪网络信息,如网络带宽使用、网络健康状况和配置更改,并排除需要解决的问题。与其他开源监控工具相比,Zabbix提供了很高的便利性。诸如它可以自动检测连接到网络的设备。

目前还有很多公司都在用zabbix。

2. Nagios

官方地址:http://www.nagios.org

主要语言:C

项目描述:Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

3. cacti

官方网站:http://www.cacti.net

开发语言:php

项目描述:Cacti是一个开源的,基于web网络监控和图形化工具,它被设计作为开源,工业化标准数据日志工具RRDtool的后端应用程序。它通常用来显示数据时序图、CPU加载和网络宽带应用程序。最普通的用处就是通过轮询网络交换机或者通过简单网络管理协议来路由接口(SNMP, Simple Network Management Protocol)

总结:以上三种传统监控系统,俗称:监控三剑客。

3.3 前端监控

1. sentry

github地址:https://sentry.io/welcome/

项目描述:Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、RoR、PHP、Laravel、Android、.NET、JAVA 等。同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck、heroku、slack、Trello 等。

2. Webfunny

github地址:https://www.webfunny.cn/

项目描述:也是含有监控错误的功能,可以支持千万级别日PV量,额外的亮点是可以远程调试、性能分析,也可以docker私有化部署(免费),业务代码加密过。

总结:由于其代码没有开源,二次开发受限

3. zanePerfor

github地址:http://github.com/wangweianger

3.4 移动端监控资料

AndroidPerformanceMonitor : https://github.com/markzhai/AndroidPerformanceMonitor

leakcanary : https://github.com/square/leakcanary

watchdog : https://github.com/gorakhargosh/watchdog

iOS-System-Services : https://github.com/Shmoopi/iOS-System-Services

总结

监控系统是IT运维和产品运营的一双眼睛,随着业务到达一定的量级,监控需求会越来越丰富,目前市面上开源的监控系统都存在这样或者那样的问题。在国内外,监控系统的技术问题和产品体验都存在很多需要突破的点,后续将持续分享一些自己的看法。

云原生之可观测性 - APM概念及选型

专家压测服务-腾讯WeTest,您的质量守护专家

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

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

相关文章

python中的异步实践与tornado应用

最近项目中由于在python3中使用tornado,之前也有用过,是在python2中,由于对于协程理解不是很透彻,只是套用官方文档中的写法,最近比较细致的看了下协程的用法,也将tornado在python3中异步的实践了一下。 异步基础 要…

[香橙派开发系列]使用蓝牙和手机进行信息的交换

文章目录 前言一、HC05蓝牙模块1.HC05概述2.HC05的连接图3.进入HC05的命令模式4.常用的AT指令4.1 检查AT是否上线4.2 重启模块4.3 获取软件版本号4.4 恢复默认状态4.5 获取蓝牙的名称4.6 设置蓝牙模块的波特率4.7 查询蓝牙的连接模式4.8 查询模块角色 5.连接电脑6.通过HC05发送…

2024美赛MCM Problem A: Resource Availability and Sex Ratios资源可用性和性别比例 完整代码以及思路分享

虽然一些动物物种存在于通常的雄性或雌性性别之外,但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1:1,但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。例如,美洲短吻鳄孵化卵的巢穴的温度会影…

sql指南之null值用法

注明:参考文章: SQL避坑指南之NULL值知多少?_select null as-CSDN博客文章浏览阅读2.9k次,点赞7次,收藏21次。0 引言 SQL NULL(UNKNOW)是用来代表缺失值的术语,在表中的NULL值是显示…

Git解决分支合并冲突的问题:分支合并提交出现了不同分支同一个文件的修改的冲突解决

有些时候我们合并分支的时候,会出现冲突,原因就是我们修改了分支A 的第一行代码,我们还修改了主分支上面同一个文件中的第一行代码(分支A已经提交过一次),此时我们在次合并的时候就会出现冲突,需…

智慧养老成关键力量,全视通智慧机构养老解决方案来助力

近日,国新办举行国务院政策例行吹风会,国家发展改革委、工业和信息化部、民政部、商务部有关负责人介绍《关于发展银发经济增进老年人福祉的意见》有关情况并答记者问。 会上,民政部养老服务司负责人李永新透露,将发展智慧养老服务…

tidb节点重启后,服务无法重连

大家好,我是烤鸭: 前几天遇到tidb节点重启后服务无法重连,确切地说是两个服务,一个可以正常重连,一个不行。 问题复现 由于线上执行慢SQL,导致TiDB 单个节点宕机重启。 其中A服务的3个节点和B服务的1个节…

Sketch使用手册:从入门到精通的完整教程

Sketch软件是Mac平台上流行的矢量图形编辑软件,旨在帮助用户创建网站、移动应用、图标等各种设计原型。Sketch软件的设计风格简洁明了,界面操作简单易用,非常适合UI/UX设计师、平面设计师等数字创意人员。本文将根据如何使用Sketch&#xff0…

IEPE数据采集卡的作用说明

IEPE传感器是一种特殊的加速度传感器,其特点是自带电量放大器或电压放大器。这种传感器产生的电信号非常微弱,很容易受到噪声干扰,因此需要使用灵敏的电子器件进行放大和信号调理。为了实现更好的抗噪声性能和更方便的封装,IEPE传…

xmind思维导图 for mac v24.01中文版

mac电脑上思维导图软件哪个好呢? xmind for mac一个功能强大、易于使用的思维导图软件,够帮助你更好地组织思维、管理信息、规划项目和解决问题,提高个人和团队的工作效率。 软件下载:xmind思维导图 for mac v24.01中文版 XMind f…

数据可视化工具选择指南:六款主流工具的综合评测

随着大数据时代的来临,数据可视化已成为各行业不可或缺的工具。本文将为您介绍市面上六款主流数据可视化工具,包括山海鲸可视化、Echarts、D3.js、Tableau、Power BI和Funnel.io,帮助您更好地了解并选择适合您的工具。 山海鲸可视化 山海鲸…

【Django开发】美多商城项目第2篇:Django用户注册和登录开发(附代码,已分享)

本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

C# .Net学习笔记—— 异步和多线程(异常处理)

一、异常处理 1、下面for循环20个线程&#xff0c;到11&#xff0c;12号的时候执行失败&#xff0c;这里我也用了try catch来捕获异常。 private void button11_Click(object sender, EventArgs e){TaskFactory taskFactory new TaskFactory();List<Task> taskList ne…

回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于POA-LSSVM…

【数据结构与算法】之排序系列-20240201

【数据结构与算法】之排序系列-20240201 一、88. 合并两个有序数组二、169. 多数元素三、217. 存在重复元素四、242. 有效的字母异位词五、268. 丢失的数字六、349. 两个数组的交集七、350. 两个数组的交集 II 一、88. 合并两个有序数组 简单 给你两个按 非递减顺序 排列的整数…

【Uni-App】运行微信小程序时报错routeDone with a webviewId 2 that is not the current page

使用HBuilderX开发微信小程序&#xff0c;运行项目的时有可能会出现routeDone with a webviewId 1 that is not the current page的报错&#xff0c;但不影响运行。如果强迫症介意的话&#xff0c;可以考下面的方法进行修复。 产生原因 由于微信开发者工具的调试基础库处于灰度…

私域流量如何变现?一站式产品体系搭建与运营策略大公开

在互联网日新月异的今天&#xff0c;我们面临着人口红利逐渐消失的问题&#xff0c;各行各业的广告投放获客成本也在不断上涨。为了降低成本并提高用户转化和复购率&#xff0c;我们需要寻找新的解决方案。此时&#xff0c;私域流量的概念应运而生&#xff0c;成为了一个值得考…

【计算机二级考试C语言】C递归

目录 C 递归 数的阶乘 实例 斐波那契数列 实例 C 递归 递归指的是在函数的定义中使用函数自身的方法。 举个例子&#xff1a; 从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&#xff0c;正在给小和尚讲故事呢&#xff01;故事是什么呢&#xff1f;"从…

Python 的 pass 语句到底是什么?

Python 中的 pass 语句是一个简单的概念&#xff0c;即使没有编程经验的初学者也能很快掌握。官方文档提供了非常简单的介绍&#xff0c;下面的三个示例可以让我们快速了解如何使用它。 pass 本质上是一个空操作&#xff0c;除了允许解释器在跳过语法之前检查语法是否有效之外&…

apk反编译修改教程系列---修改apk的默认颜色 布局颜色 手机电脑同步演示【十】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…