常用调用链等监控对比

1 了解监控

什么是监控?

        指对计算机系统、网络、应用程序等进行实时、持续的管理和控制,以确保系统的性能、稳定性和安全性。

具体来说,监控可以通过收集和分析各种指标数据来实现,例如CPU、内存、网络、磁盘等硬件指标,以及应用程序的请求、响应、日志等软件指标。通过监控这些指标,可以及时发现并解决系统的性能问题、故障和安全事件,保证系统的稳定运行和高效运作。

在研发程序方面,Java程序的监控通常包括对Java虚拟机的监控,例如堆内存、非堆内存、线程池等指标的监测,以及对应用程序的请求、响应等进行跟踪和分析。Java程序的监控可以通过一些工具和框架进行实现,例如Cat、Spring Boot Actuator、Prometheus等。

总之,监控是一种对计算机系统和应用程序进行实时、持续的管理和控制的方法,可以帮助我们及时发现和解决系统的性能问题、故障和安全事件,确保系统的稳定运行和高效运作。

监控层次?

监控也分不同维度,我分一下3个维度

常用调用链等监控对比_第1张图片

1 系统层对 CPU 内存 磁盘 利用率等 进行监控,主要是运维和开发人员关注。

2 调用量,延迟,接口报错,99线成功率,平均调用时长等,主要是开发和小组长关注。

3 转化率,收益,用户活跃,主要是小组长和大领导关注。

监控的技术方案

1 探针

        在运行时操作代码". 底层原理就是自动打点代理利用了虚拟机提供的用于修改代码的接口来动态加入打点的代码, 如通过 javaagent premain 来修改 Java 类.

一次请求 的唯一id  Trace ID 

2 收集器

        收集探针的日志

3 页面

        用于展示日志内容,服务关系,调用链

4 DB存储

2 各种监控介绍

1 pinpoint分布式性能监控工具

Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。 Pinpoint支持的功能比较丰富,可以支持如下几种功能:

服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。

常用调用链等监控对比_第2张图片

 常用调用链等监控对比_第3张图片

 常用调用链等监控对比_第4张图片

开源源码地址:GitHub - pinpoint-apm/pinpoint: APM, (Application Performance Management) tool for large-scale distributed systems.

演示地址:PINPOINT

Pinpoint 的特点

1.分布式事务跟踪,跟踪跨分布式应用的消息;

2.自动检测应用拓扑,帮助你搞清楚应用的架构;

3.水平扩展以便支持大规模服务器集群;

4.提供代码级别的可见性以便轻松定位失败点和瓶颈;

5.使用字节码增强技术,添加新功能而无需修改代码。

6.pinpoint有非常直观的UI,符合项目的当前需求

7.pinpoint是基于java开发的,利于项目后期对源代码的修改

8.pinpoint的社区还是挺活跃,一般提问题第二天就有项目的 committer回复。

常用调用链等监控对比_第5张图片

架构图对应说明:

  • Pinpoint-Collector:收集各种性能数据
  • Pinpoint-Agent:探针与应用服务器(例如tomcat)关联,部署到同一台服务器上
  • Pinpoint-Web:将收集到的数据层现在web展示
  • HBase Storage:收集到数据存到HBase中

什么是探针

        在计算机系统中,探针(Probe)通常指一种用于监测系统状态或收集性能数据的软件工具。探针可以通过不同的方式来监测系统,例如监测CPU利用率、内存占用、磁盘I/O、网络流量等。探针通常会以一定的频率向监测系统发送请求,以获取系统的状态数据,并将收集到的数据传送到一个中央收集器或者监测系统中。

        在与应用服务器关联的场景中,探针通常会被部署在应用服务器所在的操作系统上,用于监测应用服务器的性能和状态数据。例如,可以使用探针来监测Tomcat应用服务器的线程池使用情况、请求处理时间、连接数等指标,以帮助管理员了解应用服务器的健康状况和性能瓶颈,从而采取相应的优化措施。

SkyWalking 分布式追踪系统

推荐资料

  • SkyWalking 官网
  • SkyWalking GitHub
  • SkyWalking 文档中文版(社区提供)
  • SkyWalking 官方 Living Demo

在线演示地址:http://demo.skywalking.apache.org:3000/?orgId=1

 账号密码:skywalking   

SkyWalking是一种开源的分布式应用性能监测系统,它提供了实时的跟踪和诊断解决方案。SkyWalking通过一个中央控制台来展示应用程序的性能特征,并提供了一个详细的、分布式的跟踪工具箱。

SkyWalking系统主要由以下四个组成部分组成:

  • 探针(Probe):在应用程序中注入的代码,用于收集性能数据。
  • 收集器(Collector):用于收集和处理从探针发送来的数据,并提供一个中央化的数据库。
  • 存储层(Storage):用于持久化来自收集器的数据。
  • UI展示层(UI):用于展示数据和提供用户界面。

除此之外,SkyWalking还有语言特定的探针,如Java探针、.NET探针、Node.js探针等,以适应不同语言和平台的需求。同时,它也提供了针对不同框架和组件的支持,如Spring、Dubbo、OkHttp等。

SkyWalking的工作原理

在应用程序启动时,SkyWalking会通过类似代理的方式与应用程序绑定在一起,实现了对应用程序无侵入的监测。SkyWalking通过探针在应用程序中收集性能数据,并将其发送到收集器。

SkyWalking采用了分布式追踪的技术,在请求流传递时,传递唯一标识符,在发送请求和接收响应时,它都将标识符发送给调用对方的节点。如果一个服务所调用的其他服务也是用SkyWalking处理的,SkyWalking会自动收集这些服务产生的数据,形成完整的跟踪链路。

SkyWalking将分布式追踪数据存储到持久化的存储层中。存储层可以是关系型数据库,如MySQL和Oracle,也可以是NoSQL数据库,如Elasticsearch。

SkyWalking UI提供了一个可视化界面,用于查看和分析收集和聚合的数据。在UI中,可以轻松地跟踪整个请求链路,分析性能瓶颈以及事件的源和目标节点。

优点

  • 提供完整的分布式追踪功能,帮助开发人员更好地理解应用程序的性能问题。
  • 支持不同的编程语言和平台,并提供了对不同框架和组件的支持。
  • 利用开源社区成员的力量,获取了大量的资源和支持。
  • 提供了功能完整的中央化控制台,方便用户集中管理监测数据。

常用调用链等监控对比_第6张图片

常用调用链等监控对比_第7张图片

常用调用链等监控对比_第8张图片

Prometheus(普罗米修斯)监控

搞定Prometheus普罗米修斯监控系统-腾讯云开发者社区-腾讯云


一、普罗米修斯概述

Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。Overview | Prometheus

二、时间序列数据

1、什么是序列数据 时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用的场景很多, 如:

  • 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距
  • 离等等。每时每刻都要将数据记录下来做分析。
  • 某一个地区的各车辆的行驶轨迹数据
  • 传统证券行业实时交易数据
  • 实时运维监控数据等

2、时间序列数据特点

  • 性能好

关系型数据库对于大规模数据的处理性能糟糕。NOSQL可以比较好的处理大规模数据,让依然比不上时间序列数据库。

  • 存储成本低

高效的压缩算法,节省存储空间,有效降低IO,Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了200多G(来自官方数据)

3、Prometheus的主要特征

  • 多维度数据模型
  • 灵活的查询语言
  • 不依赖分布式存储,单个服务器节点是自主的
  • 以HTTP方式,通过pull模型拉去时间序列数据
  • 也可以通过中间网关支持push模型
  • 通过服务发现或者静态配置,来发现目标服务对象
  • 支持多种多样的图表和界面展示

4、普罗米修斯原理架构图

常用调用链等监控对比_第9张图片

 界面

常用调用链等监控对比_第10张图片

常用调用链等监控对比_第11张图片

Grafana 可视化工具 配合普罗米修斯

Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。

网址: Grafana: The open observability platform | Grafana Labs

它是开源的时序数据分析平台 目前支持52种数据源,其中promethus 就是其中支持的一种

常用调用链等监控对比_第12张图片

常用调用链等监控对比_第13张图片

cat监控

git:https://github.com/dianping/cat

项目背景

CAT(Central Application Tracking),是基于Java开发的全球化实时监控系统。CAT在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供了应用范例CAT目前在美团的产品​​定位是应用层的统一监控组件,基本接入了美团所有核心应用,在中间件(RPC、数据库、存储、MQ等)框架中得到全面应用,为各业务线提供系统的性能指标、健康状况、实时回顾等。

CAT的产品价值

  • 减少线上问题的发现时间
  • 减少问题故障的定位时间
  • 优化工具的辅助应用程序

CAT的优势

  • 实时处理:信息的价值会随着时间锐减,尤其是事故处理过程中
  • 全量数据:最开始的设计目标就是全量采集,全量的好处有很多
  • 高可用:所有应用都倒基地,需要监控还站着,并告诉工程师发生了什么,实现故障还原和问题定位
  • 故障忍受:CAT本身故障应该不会影响业务正常运行,CAT挂了,应用不该出行,只是监控能力暂时中断
  • 高吐:真相,需要全方位的吞吐监控和还原,必须震动超强的处理吞吐能力
  • 可扩展:支持全方位、跨IDC部署,横向扩展的监控系统

功能

常用调用链等监控对比_第14张图片

 常用调用链等监控对比_第15张图片

各大监控对比

对比项目 CAT skyworking Pinpoint Prometheus(普罗米修斯)
调用链可视化
聚合报表 非常丰富 丰富 需要Grafana 配置生成,或者原有UI上线
服务依赖 说有没找到
埋点方式 侵入 拦截器 过滤器 注解 探针非侵入,java agent字节码 探针非侵入,java agent字节码
VM指标监控
告警支持
多语言 java net 多语言 多语言
存储机制 mysql 报表
本地文件存储
HDFS
ES  H2 Hbase
社区支持 主要国美 点评 美团 小米 华为 当当
社区活跃 17.2k 20.2k 12.4k
亮点 企业级生产报表丰富 非侵入 Apache背书
traceId查询 
插件 不支持 支持比较多 支持

个人总结

  

pinpoint:服务调用关系非常清楚,哪些请求标高,或者报错,也能框出来看具体调用链,排查非常方便

skywalking:没用过几次,因为当时公司搭建的硬件是虚拟机,卡成花灯片,然后公司有些项目并发量20w+直接客户端内存溢出了,但从社区,总体评价都是不错的。

cat:经常使用,用于观察接口报警和请求速度,能快速定位接口哪个报错了,或者哪个sql慢,进行针对性优化。

Prometheus 普罗米修斯:这个数据力度比较细,但ui需要自定义查询内容,查询条件,比较耗费时间资源,接入Grafana 也是,需要各种配置,我个人真不推荐,因为开发多是开发,不是运维不懂需要哪些维度的东西,基本上配了一些,大家也不看,浪费时间,虽然自由度高。

参考博客:

 【监控】Prometheus(普罗米修斯)监控概述_普罗米修斯监控_逆流°只是风景-bjhxcc的博客-CSDN博客

分布式链路追踪之SkyWalking_skywalking拓扑图问题_swimming_in_it_的博客-CSDN博客

你可能感兴趣的:(监控)