什么是监控?
指对计算机系统、网络、应用程序等进行实时、持续的管理和控制,以确保系统的性能、稳定性和安全性。
具体来说,监控可以通过收集和分析各种指标数据来实现,例如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存储
Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。 Pinpoint支持的功能比较丰富,可以支持如下几种功能:
服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
开源源码地址: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回复。
架构图对应说明:
什么是探针
在计算机系统中,探针(Probe)通常指一种用于监测系统状态或收集性能数据的软件工具。探针可以通过不同的方式来监测系统,例如监测CPU利用率、内存占用、磁盘I/O、网络流量等。探针通常会以一定的频率向监测系统发送请求,以获取系统的状态数据,并将收集到的数据传送到一个中央收集器或者监测系统中。
在与应用服务器关联的场景中,探针通常会被部署在应用服务器所在的操作系统上,用于监测应用服务器的性能和状态数据。例如,可以使用探针来监测Tomcat应用服务器的线程池使用情况、请求处理时间、连接数等指标,以帮助管理员了解应用服务器的健康状况和性能瓶颈,从而采取相应的优化措施。
在线演示地址:http://demo.skywalking.apache.org:3000/?orgId=1
账号密码:skywalking
SkyWalking是一种开源的分布式应用性能监测系统,它提供了实时的跟踪和诊断解决方案。SkyWalking通过一个中央控制台来展示应用程序的性能特征,并提供了一个详细的、分布式的跟踪工具箱。
SkyWalking系统主要由以下四个组成部分组成:
除此之外,SkyWalking还有语言特定的探针,如Java探针、.NET探针、Node.js探针等,以适应不同语言和平台的需求。同时,它也提供了针对不同框架和组件的支持,如Spring、Dubbo、OkHttp等。
SkyWalking的工作原理
在应用程序启动时,SkyWalking会通过类似代理的方式与应用程序绑定在一起,实现了对应用程序无侵入的监测。SkyWalking通过探针在应用程序中收集性能数据,并将其发送到收集器。
SkyWalking采用了分布式追踪的技术,在请求流传递时,传递唯一标识符,在发送请求和接收响应时,它都将标识符发送给调用对方的节点。如果一个服务所调用的其他服务也是用SkyWalking处理的,SkyWalking会自动收集这些服务产生的数据,形成完整的跟踪链路。
SkyWalking将分布式追踪数据存储到持久化的存储层中。存储层可以是关系型数据库,如MySQL和Oracle,也可以是NoSQL数据库,如Elasticsearch。
SkyWalking UI提供了一个可视化界面,用于查看和分析收集和聚合的数据。在UI中,可以轻松地跟踪整个请求链路,分析性能瓶颈以及事件的源和目标节点。
优点
搞定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的主要特征
4、普罗米修斯原理架构图
界面
Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。
网址: Grafana: The open observability platform | Grafana Labs
它是开源的时序数据分析平台 目前支持52种数据源,其中promethus 就是其中支持的一种
git:https://github.com/dianping/cat
CAT(Central Application Tracking),是基于Java开发的全球化实时监控系统。CAT在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供了应用范例CAT目前在美团的产品定位是应用层的统一监控组件,基本接入了美团所有核心应用,在中间件(RPC、数据库、存储、MQ等)框架中得到全面应用,为各业务线提供系统的性能指标、健康状况、实时回顾等。
功能
对比项目 | 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博客