指标型数据监控
指标采集概述
在上节的监控系统分类中,我们说指标数据是监控系统判断运行状态的一个重要数据来源,这里的指标是在时间维度上捕获的与系统相关的值。这个指标值按照不同的层次,可以进一步分类。
-
基础类型指标:包括CPU、内存、网络、I/O等,基于JVM系统的应用,也可以把JVM的内存回收状态、堆栈等资源占用状态的指标纳入这一类型指标。基础类型指标通常可以从宏观的视角描述当前应用所属容器或者运行环境的基本状态。
-
应用服务类型指标:指服务的运行状态指标。前文我们说的服务延迟、流量吞吐、错误和饱和度即“黄金四指标”,线程个数、队列积压情况等数据都属于应用服务类型指标。因为服务指标最贴近应用服务本身,所以应用服务类型指标可以直观地反映当前服务的运行状态,也是开发运维人员排查异常状态和定位应用错误时的主要判断依据。
-
业务定制化指标:上述两类指标是比较通用的指标类型,然而很多业务需要定制化的指标来衡量某一个业务特性。例如上节中提到的通过“存量指标”衡量不同阶段、不同门店的一个业务运营状态。而这个指标的采集需要我们手动在代码的
指定位置埋点,在采集指标数据后上报到监控服务器中心。
下面介绍在监控指标方面有哪些主要的采集方式。
系统指标采集方式
Linux系统自带的命令工具是采集基础类型指标的主要方式,通过Linux系统命令可以发现服务器资源的性能瓶颈和资源占用情况。
-
iostat:监控磁盘I/O情况。
-
meminfo:查看内核使用内存情况的各种信息。
-
mpstat:实时系统监控工具,能查看所有CPU的平均状况信息。
-
netstat:显示了大量与网络相关的信息。
-
nmon:监控Linux系统的性能、下载及安装。
-
pmap:报告每个进程占用内存的详细情况。
-
ps pstree:ps告诉你每个进程占用的内存和CPU处理时间,而pstree以树形结构显示进程之间的依赖关系,包括子进程信息。
-
sar:显示CPU使用率、内存页数据、网络I/O和传输统计、进程创建活动和磁盘设备的活动详情。
-
strace:诊断进程工具。
-
tcpdump:网络监控工具,看看哪些进程在使用网络。
-
uptime:该命令告诉你这台服务器从开机启动到现在已经运行了多长时间。
-
vmstat:监控虚拟内存。
-
wireshark:是一个网络协议检测程序,让你可以获取网站的相关资讯。
-
dstat:该命令整合了vmstat、iostat和ifstat三种命令作为多类型资源统计工具。
-
top:经常用来监控Linux的系统状况,比如CPU、内存的使用。
-
ss:用来记录套接字统计信息,可以显示类似netstat一样的信息。
-
lsof:列表显示打开的文件。
-
iftop:是另一个基于网络信息的类似top的程序,能够显示当前时刻按照带宽使用量或者上传或者下载量排序的网络连接状况。
应用指标采集方式
-
手动埋点:手动埋点是侵入式的监控数据采集方式,主要应用在业务定制化的监控场景下。手动埋点的优点是可以更灵活地为我们提供业务内部的监控指标,当然缺点也很明显,需要在代码层面修改代码,具有一定的侵入性。如果项目指标数量有限,并且被埋点代码所在位置集中在个别文件中,可以考虑使用手动埋点的方式。
-
自动埋点:使用手动埋点的方式需要侵入式地修改已有的业务代码,对于很多业务方来说,这样的做法是无法接受的。如果能在程序加载或者运行期间动态地加入监控代码,就可以做到在运行期间动态埋点,无侵入地监控应用系统。在Java技术中,我们可以利用JavaAgent和Javaassist动态字节码改写技术实现自动埋点,增加指标抓取逻辑,这项技术的另一个使用场景就是APM中的调用链技术。在后面两节中,我们会进一步介绍这两种自动埋点捕获数据的“黑科技”。
-
自带监控功能,有以下三种方式。
-
JMX方式:多数Java开发的服务均可由JMX接口输出监控指标。其中不少监控系统都集成了JMX采集插件,除此之外,我们也可通过jmxtrans、jmxcmd等命令工具采集指标信息。
-
HTTP REST方式:Spring Boot提供的Actuator技术可以采集监控信息,并以HTTP REST的方式暴露监控指标。
-
OpenMetrics方式:作为Prometheus的监控数据采集方案,OpenMetrics可能很快会成为未来监控的业界标准。
指标监控数据存储
基于时间序列数据库的监控系统是非常适合做监控告警使用的,如果我们要搭建一套新的指标监控系统,就需要使用时序监控作为数据存储引擎,下面我们介绍几款常用的以时间序列数据库为主的监控数据库。
-
Prometheus Server:需要拉取的数据既可以采用静态方式配置在Prometheus Server中,也可以采用服务发现的方式。
-
PromQL:Prometheus自带的查询语法,通过编写PromQL语句可以查询Prometheus里面的数据。
-
Alertmanager:数据的预警模块,支持通过多种方式发送预警。
-
WebUI:展示数据和图形,通常与Grafana结合,采用Grafana来展示。
-
OpenTSDB:2010年开源的一款分布式时序数据库,在这里我们把它主要用在监控方案中。OpenTSDB采用的是HBase的分布式存储,它获取数据的模式与Prometheus不同,它采用的是推模式。在展示层,OpenTSDB自带WebUI视图,可以与Grafana很好地集成,提供丰富的展示界面。但OpenTSDB并没有自带预警模块,需要自己去开发或者与第三方组件结合使用。
-
InfluxDB:2013年开源的一款时序数据库,在这里我们主要把它用在监控系统方案中。它也采用推模式收集数据。在展示层,InfluxDB也自带WebUI,可以与Grafana集成。
本文给大家讲解的内容是服务监控治理, 指标型数据监控
- 下篇文章给大家讲解的内容是服务监控治理,JavaAgent技术
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!