其他分享
首页 > 其他分享> > 关于系统监控的想法和实施(一):数据监控

关于系统监控的想法和实施(一):数据监控

作者:互联网

  大家好,我是爱吃里脊,下面由我来讨论下监控的想法。提到监控,对于维护系统至关重要,对发现问题,解决问题起着决定性的作用。

  我们来先来进行整体拆解,一个监控系统包含三个主体:数据采集,数据处理,数据展示。这次我们先来了解数据采集。

  首先要做监控系统首先得有一个监控对象,了解监控对象需要什么指标,比如一个业务后台系统,需要知道物理指标有的cup,磁盘,负载,魔法指标有接口调用数,接口的tp99,接口的可用率等等。一个前端应用,可能需要用户点击某个按钮,某个页面的次数,甚至是记录某个用户行为等等。其实这些指标很多,不同系统差别很大,关注点也会随之改变。要做好一个数据监控系统,就得应对这些变化。下边是具体的一些指标用于参考:
  机器维度的监控指标包括CPU、Load、内存、网络、IO、磁盘等相关指标,详细指标可以参考Liux监控命令对应的指标数据:https://linux.cn/article-9373-1.html?pr (主要可以参见top、vmstat 、free、iostat、netstat 、iptraf等命令相关的核心指标)。
  应用维度的监控指标包括JVM使用情况、线程池使用情况:JVM情况主要包括YGC次数、时间,FullGC次数、时间,新生代老年代占比;线程池情况主要包括的线程池大小、最大线程数、活跃线程数、队列大小等。
  服务维度的监控指标包括error日志报错情况、服务接口调用量、耗时、成功率,调用接口调用量、耗时、成功率,dal层操作调用量、耗时、成功率。
  外部依赖维度主要指应用系统常见的外部依赖的监控情况,主要包括数据库、缓存、消息队列等,这些一般情况都会独立进行部署,对应的机器监控同上面列举的机器维度监控;另外数据库还需要关注连接数、内存使用、SQL调用量、耗时、成功率,慢SQL等;缓存需要关注调用量、成功率,命中率、内存使用等;消息队列需要关注调用量、成功率,队列积压情况、死信队列等
  整体上的监控指标包括可用性监控(服务是否可用)、访问量监控(PV/UV)、负载监控(限流、熔断情况)、自定义的业务监控(异常业务场景、服务统计等)

  很显然,如果在应用程序里写这些监控处理,是很笨的,业务代码与功能代码耦合,违反了程序软件开发的开闭原则,单一原则。对之后的维护添堵。

  比较好的方式是机器安装客户端,或者应用集成客户端来进行采集,应用的日志可以通过aop的方式打印上传,为了尽可能的减少对业务代码的影响,可采用独立线程定时同步或者中间件mq,redis等定时同步。这是推日志的方式,对一些实时性较高的监控还可以进行服务端拉取的方式,这种方式较为复杂,需要客户端注册服务到服务中心,服务端获取服务中心服务后,主动请求目标的日志来拉取。这里可以举个例子:push方法用于Graphite等系统,而pull方法用于Prometheus等监视系统。但是无论哪种方式,基本思想都是这种组件化,独立,异步上传日志。
在这里插入图片描述

标签:调用,成功率,想法,指标,系统监控,线程,监控,日志
来源: https://blog.csdn.net/weixin_40574644/article/details/120611755