监控是一种对计算机系统和应用程序进行实时、持续的管理和控制的方法,通过收集和分析各种指标数据可以及时发现和解决系统的性能问题、故障和安全事件,保证系统的稳定运行和高效运作。监控分为多个维度,包括系统层、调用量、转化率等。在Java程序中,可以使用工具和框架如Pinpoint、SkyWalking等进行监控。探针是一种用于监测系统状态或收集性能数据的软件工具,通过不同的方式来监测系统,如监测CPU利用率、内存占用等。SkyWalking是一种开源的分布式应用性能监测系统,提供了实时的跟踪和诊断解决方案。Prometheus是一种高效的监控系统,使用高效的压缩算法节省存储空间。Grafana是一个可视化工具,用于将采集的数据进行分析和展示。Cat是常用的用于观察接口报警和请求速度的监控工具。
1 了解监控
什么是监控?
作为一名IT工程师,我负责实时、持续地管理和控制计算机系统、网络和应用程序,以保证系统的性能、稳定性和安全性。
在IT领域,监控是通过收集和分析各种指标数据来完成的。这些指标数据包括硬件方面的指标,比如CPU、内存、网络和磁盘,以及软件方面的指标,比如应用程序的请求、响应和日志等。通过监控这些指标,我们能够及时发现并解决系统的性能问题、故障和安全事件,以确保系统稳定运行和高效运作的目标得以实现。
从软件开发的角度来看,Java程序的监控主要涵盖对Java虚拟机的监测,包括对堆内存、非堆内存和线程池等指标的监测,以及对应用程序请求和响应等进行跟踪和分析。为了实现Java程序的监控,可以利用一些工具和框架,比如Cat、Spring Boot Actuator和Prometheus等。
监控是一种实时、持续对计算机系统和应用程序进行管理和控制的方法。通过监控,我们可以及时发现和解决系统的性能问题、故障和安全事件,以确保系统的稳定运行和高效运作。
监控层次?
监控也分不同维度,我分一下3个维度
1 系统层对 CPU 内存 磁盘 利用率等 进行监控,主要是运维和开发人员关注。
2 调用量,延迟,接口报错,99线成功率,平均调用时长等,主要是开发和小组长关注。
3 转化率,收益,用户活跃,主要是小组长和大领导关注。
监控的技术方案
1 探针
在运行时操作代码". 底层原理就是自动打点代理利用了虚拟机提供的用于修改代码的接口来动态加入打点的代码, 如通过 javaagent premain
来修改 Java 类.
一次请求 的唯一id Trace ID
2 收集器
收集探针的日志
3 页面
用于展示日志内容,服务关系,调用链
4 DB存储
2 各种监控介绍
1 pinpoint分布式性能监控工具
Pinpoint是一款全链路分析工具,基于GoogleDapper论文实现,提供了无侵入式调用链监控、方法执行详情查看、应用状态信息监控等功能。与开源工具Zipkin类似,但相比Zipkin,Pinpoint提供了更多的特性,包括无侵入式监控和代码维度监控。Pinpoint支持多种功能,如下所示:
服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
演示地址:PINPOINT
Pinpoint 的特点
1.分布式事务跟踪,跟踪跨分布式应用的消息;
2.自动检测应用拓扑,帮助你搞清楚应用的架构;
3.水平扩展以便支持大规模服务器集群;
4.提供代码级别的可见性以便轻松定位失败点和瓶颈;
5.使用字节码增强技术,添加新功能而无需修改代码。
6.pinpoint有非常直观的UI,符合项目的当前需求
7.pinpoint是基于java开发的,利于项目后期对源代码的修改
8.pinpoint的社区还是挺活跃,一般提问题第二天就有项目的 committer回复。
架构图对应说明:
- Pinpoint-Collector:收集各种性能数据
- Pinpoint-Agent:探针与应用服务器(例如tomcat)关联,部署到同一台服务器上
- Pinpoint-Web:将收集到的数据层现在web展示
- HBase Storage:收集到数据存到HBase中
什么是探针
在计算机系统中,探针是一种专门用于监测系统状态和收集性能数据的软件工具。探针可以通过监测CPU利用率、内存占用、磁盘I/O以及网络流量等方式来监测系统。探针会定期向监测系统发送请求,以获取系统的状态数据,并将收集到的数据传输到中央收集器或监测系统中。
在与应用服务器相关的场景中,常常需要在应用服务器所在的操作系统上部署探针,以监测应用服务器的性能和状态数据。举例来说,可以通过探针来监测Tomcat应用服务器的线程池使用情况、请求处理时间、连接数等指标,从而帮助管理员了解应用服务器的健康状况和性能瓶颈,并采取相应的优化措施。
SkyWalking 分布式追踪系统
推荐资料
在线演示地址:http://demo.skywalking.apache.org:3000/?orgId=1
账号密码: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)。作为一个IT工程师,了解并选择适合特定需求的存储层非常重要。
SkyWalking UI为用户提供了一个可视化界面,该界面用于查看和分析所收集和聚合的数据。通过使用UI,用户可以轻松地跟踪请求的整个链路,并分析性能瓶颈以及事件的源和目标节点。
优点
- 提供完整的分布式追踪功能,帮助开发人员更好地理解应用程序的性能问题。
- 支持不同的编程语言和平台,并提供了对不同框架和组件的支持。
- 利用开源社区成员的力量,获取了大量的资源和支持。
- 提供了功能完整的中央化控制台,方便用户集中管理监测数据。
Prometheus(普罗米修斯)监控
搞定Prometheus普罗米修斯监控系统-腾讯云开发者社区-腾讯云
一、普罗米修斯概述
Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。Overview | Prometheus
二、时间序列数据
1、什么是序列数据 时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用的场景很多, 如:
- 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距
- 离等等。每时每刻都要将数据记录下来做分析。
- 某一个地区的各车辆的行驶轨迹数据
- 传统证券行业实时交易数据
- 实时运维监控数据等
2、时间序列数据特点
- 性能好
关系型数据库对于大规模数据的处理性能糟糕。NOSQL可以比较好的处理大规模数据,让依然比不上时间序列数据库。
- 存储成本低
作为一名IT工程师,我要向您介绍一种高效的压缩算法,它能够节省存储空间,并有效地降低IO负载。Prometheus采用了非常高效的时间序列数据存储方法。根据官方数据,每个采样数据仅占用约3.5字节的空间。考虑到Prometheus通常需要存储上百万条时间序列数据,以30秒的间隔保留60天,大约需要占用200多GB的存储空间。
3、Prometheus的主要特征
- 多维度数据模型
- 灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过pull模型拉去时间序列数据
- 也可以通过中间网关支持push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示
4、普罗米修斯原理架构图
界面
Grafana 可视化工具 配合普罗米修斯
Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。
网址: Grafana: The open observability platform | Grafana Labs
它是开源的时序数据分析平台 目前支持52种数据源,其中promethus 就是其中支持的一种
cat监控
git:https://github.com/dianping/cat
项目背景
CAT(Central Application Tracking),是基于Java开发的全球化实时监控系统。CAT在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供了应用范例CAT目前在美团的产品定位是应用层的统一监控组件,基本接入了美团所有核心应用,在中间件(RPC、数据库、存储、MQ等)框架中得到全面应用,为各业务线提供系统的性能指标、健康状况、实时回顾等。
CAT的产品价值
- 减少线上问题的发现时间
- 减少问题故障的定位时间
- 优化工具的辅助应用程序
CAT的优势
- 实时处理:信息的价值会随着时间锐减,尤其是事故处理过程中
- 全量数据:最开始的设计目标就是全量采集,全量的好处有很多
- 高可用:所有应用都倒基地,需要监控还站着,并告诉工程师发生了什么,实现故障还原和问题定位
- 故障忍受:CAT本身故障应该不会影响业务正常运行,CAT挂了,应用不该出行,只是监控能力暂时中断
- 高吐:真相,需要全方位的吞吐监控和还原,必须震动超强的处理吞吐能力
- 可扩展:支持全方位、跨IDC部署,横向扩展的监控系统
功能
各大监控对比
对比项目 | 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,因为当我使用它时,我所在的公司使用的是虚拟机,而虚拟机的性能较差。因此,在某些项目中,出现了同时并发处理量超过20万的情况,导致客户端内存溢出。不过,从社区和整体评价来看,Skywalking的评价仍然很好。
cat:经常使用,用于观察接口报警和请求速度,能快速定位接口哪个报错了,或者哪个sql慢,进行针对性优化。
Prometheus 普罗米修斯:这个数据力度比较细,但ui需要自定义查询内容,查询条件,比较耗费时间资源,接入Grafana 也是,需要各种配置,我个人真不推荐,因为开发多是开发,不是运维不懂需要哪些维度的东西,基本上配了一些,大家也不看,浪费时间,虽然自由度高。
参考博客:
【监控】Prometheus(普罗米修斯)监控概述_普罗米修斯监控_逆流°只是风景-bjhxcc的博客-CSDN博客
分布式链路追踪之SkyWalking_skywalking拓扑图问题_swimming_in_it_的博客-CSDN博客
监控是一种对计算机系统和应用程序进行实时、持续的管理和控制的方法。在Java程序中,可以通过工具和框架如Pinpoint、SkyWalking等实现监控。监控可以分为不同的维度,包括系统层、调用量、转化率等。探针是一种监测系统状态或收集性能数据的工具。Pinpoint、SkyWalking和Prometheus是常用的监控工具,用于实现分布式应用性能监测和存储。Grafana和Cat是可视化工具,用于分析和展示监控数据。