监控对于后端系统十分重要,如何采集监控指标呢?
总结起来,大概有以下几种类型:
首先,Agent 是一种比较常见的采集数据指标的方式。
通过在数据源的服务器上部署自研或者开源的 Agent 来收集数据,发送给监控系统,实现数据的采集。在采集数据源上的信息时,Agent 会依据数据源上提供的一些接口获取数据
另一种很重要的数据获取方式是在代码中埋点。
这个方式与 Agent 的不同之处在于,Agent 主要收集的是组件服务端的信息,而埋点则是从客户端的角度来描述所使用的组件,和服务的性能和可用性。
最后,日志也是你监控数据的重要来源之一。
监控数据的处理和存储:
在采集到监控数据之后,你就可以对它们进行处理和存储了。在此之前,我们一般会先用消息队列来承接数据,主要的作用是削峰填谷,防止写入过多的监控数据,让监控服务产生影响。
与此同时,我们一般会部署两个队列处理程序,来消费消息队列中的数据。
一个处理程序接收到数据后,把数据写入到 Elasticsearch,然后通过 Kibana 展示数据,这些数据主要是用来做原始数据的查询。
另一个处理程序是一些流式处理的中间件,比如 Spark、Storm。它们从消息队列里接收数据后会做一些处理,这些处理包括:
解析数据格式,尤其是日志格式。从里面提取诸如请求量、响应时间、请求 URL 等数据;
对数据做一些聚合运算。比如,针对 Tomcat 访问日志,可以计算同一个 URL 一段时间之内的请求量、响应时间分位值、非 200 请求量的大小等等。
将数据存储在时间序列数据库中。
最后,你就可以通过 Grafana 来连接时序数据库,将监控数据绘制成报表,呈现给开发和运维的同学了。
此文章为6月Day6学习笔记,内容来源于极客时间《高并发系统设计 40 问》