Monitor | 关于监控系统的相关知识
Contents
1. 关于监控
监控就是要把一切尽在掌控
1.1. 监控的目的
通过监控可以:
- 实时掌握系统的运行状态
- 减少宕机时间
- 对故障的提前预警
- 历史状态的回放、故障排除、分析
- 扩展和性能管理
- 资源计划
1.2. 监控的层次
- 硬件
- OS、中间件(MySQL、Tomcat)
- 应用程序
- RUM(Real User Monitor, 用户数据监控): 是一种客户端的监控技术,它通过记录下用户访问网站的真实行为数据,来进行对网站的监控。
1.3. 监控系统(体系)的设计
一个好的监控系统需要做到以下几点: 如图, 引用自 Here
一个完整的监控体系包括以下几个组成部分:
- 监控数据采集:时效与精确
- 监控数据采集:存储与归档
- 监控数据的自动化展示
- 监控数据的自动化分析与联动处理
- 监控告警及自动化处理
- 监控工具自身的安全控制
- 监控告警的响应及追踪
监控体系架构图:如图,引用自 Here
从上图可以看出,一个完整的监控系统是从监控数据的采集开始、再将数据进行存储, 处理从而产生价值。 比如,智能生成分析报告、可视化展示、通过联动完成高可用, 伸缩,限流等事件处理, 监控告警等。
1.4. 监控数据采集
目前监控数据的采集方式主要有以下几种:
主动输出
提前在应用中埋点,应用
主动上报
。比如一些应用系统的业务状态,可以通过在日志中主动输出状态用于采集远程接入
通过对应用进程接口调用获取应用状态。比如使用JMX的方式连接到java进程中,对进程的状态进行采集。
嵌入式
通过在进程中运行 agent 的方式获取应用状态。如目前的 APM(App Performance Manage) 产品都是通过将监控工具嵌入到应用内部进行数据采集。
旁路式
通过外部获取的方式采集数据。比如对网站url的探测,模拟业务的报文 ,对服务器的ping,流量的监控。可以通过在交换机上将流量进行端口复制,将源始流量复制到另一个端口后再进行处理,这样这业务系统是完全没有侵入。
入侵式
不同于嵌入式,入侵式的 agent 是独立运行的进程,而不是运行在进程中。这个是目前监控工具比较常用的形式,比如:zabbix, 在主机上独立运行一个进程进行相关数据采集
CLI 方式
命令行的方式是最基本的方式,比如在linux系统上使用top,vmstat,netstat写一些shell脚本进行数据的采集,再把数据存储在文本文件中进行处理。
1.4.1. 数据采集需要注意以下三点
采集的时间间隔
对应用平台的监控数据采集的频率非常重要,关系到数据的及时性,有效性。在做监控数据采集时,也是根据不同的监控对象设定不同的时间间隔。比如对日志的监控是实时的,对实例的状态也是实时的,而对于一些后期用来分析的状态性数据则采集的时间间隔会长一些,3-5分钟的样子。
监控工具自身的安全控制
有些监控工具可能是时时运行,特别是侵入式监控,如果运行不当,自身就可能造成故障,比如执行过程异常不释放资源,造成高CPU占用;比如进程结束异常,不停的重启相同的进程;比如日志级别设置过低,大量日志输出,影响进程性能和占用大量磁盘空间。所以做监控时一定要遵循有自我安全控制的能力。监控工具在拿到生产环境中运行前,一定要先在测试环境中进行一段时间的试运行 。
触发式的数据采集
需要关注异常点的现场数据采集,比如threaddump,heapdump,主机的性能数据等。这些故障点的数据重启后就会失去,有些故障不能重现时,相关的分析数据就很重要了,所以对于这些数据,需要进行触发式的数据采集。当满足某些条件时触发采集,而在平常不运行。
See Also
Thanks to the authors 🙂