在百度云 Noah 智能监控产品中,我们提供了多维度数据聚合计算、智能异常检测、数据可视化、智能报警合并、逐级通告等丰富功能。今天,我们追根溯源,讲讲所有这些能力的基础,数据的来源,监控数据采集(入门篇)。
不同业务场景下都有着不同的监控需求,比如服务器的运行时信息、服务进程信息、日志信息、网络状态信息以及服务状态信息等。与之对应的,数据采集也需要提供丰富的采集方式来满足这些需求,一般地,针对应用场景的不同,可分别通过本地客户端采集和远程服务采集的方式来实现。
图 1 监控平台架构简化图
本地客户端采集主要负责服务器自身的信息采集以及服务器上运行程序的信息采集,远程服务采集则通过远程发起探测的方式进行域名监控、网络监控、死机探测等,本文也将从这几个方面来阐述。当然,除此之外,还有更高级的数据采集方式,暂不在本文(入门篇)讨论范畴内。
本地客户端采集
本地客户端采集提供基础的机器信息采集和用户服务信息采集。机器信息采集主要关注机器硬件信息、机器资源使用、机器负载情况等。服务信息采集则通过插件的形式提供服务,包括进程采集、日志采集、自定义脚本采集、自定义 HTTP 采集等。
图 2 本地客户端架构图
机器数据采集
服务器信息采集我们可提供数百个监控指标,其中大家常用的如 CPU、内存、磁盘、网络等指标,一般要提供高频度的采集,比如 Noah 监控提供了最细粒度 5 秒采集频率,采集延时小于 1 秒的采集能力;对于系统内核等信息,由于不常变化,一般会使用小时级或天级的采集频率。主要指标如下表:
服务数据采集
1 进程采集
服务进程信息采集,最简单粗暴的指标莫过于采集进程是否存活,另外,就要通过进程的资源消耗来一窥服务运行状态。关于进程采集,我们提供了 CPU 使用、内存使用、FD 使用信息、磁盘 IO 读写信息近 30 个监控指标,大多数信息都可以从/proc/${pid}/下的各个文件获取并计算得到。
在采集客户端设计研发的过程中,我们发现,很多场景下 FD 资源会成为一个紧缺资源,因此,部署到所有机器的采集客户端,对于机器资源占用都有着比较严格的要求,通常 FD 数量占用也不宜过高,避免影响机器其他服务的运行。因此,对于进程的 FD 使用监控显得尤为重要,为了进一步了解服务使用的 FD 信息,我们还提供了块设备 FD 数、字符设备 FD 数、管道 FD 数、网络 FD 数、文件 FD 数、FD 总数、FD 上限的监控。
图 3 进程采集的数据
图 4 进程 FD 监控
2 日志采集
服务的运行状况通常可以通过打印日志方式来记录,业务的指标也可以通过分析这些日志得到。比如服务流量指标、异常请求指标、响应时间指标等都是服务的重要业务指标,通过客户端提供的日志采集插件可以统统满足。对于基本的流量指标,我们可以用正则匹配等较简单的方式来进行采集,当然还有很多复杂的需求,需要进行多维度数据分析或故障诊断的时候,就需要提供高级版的功能,通过提取日志中的具体字段构成数据的维度信息,从多维度的角度来计算、查看、分析这份数据。
简单的多维度日志数据采集举例
一个最典型的多维度日志数据采集的例子,就是通过提取日志中请求来源 IP,来生成各地域、运营商等的流量信息。
通过提取日志中的 IP 字段,并进一步反解该 IP 所属的省份、运营商信息,便于直观的统计来源请求。当然,要支持海外流量的统计需求,还需要监控系统支持海外的 IP 国家归属信息查询。
如下图所示,我们可以将日志中各个字段的值进行提取,如关注的 URI 字段、IDC 字段、IP 字段等,进一步,还以可将某些字段进行二次解析,例如,将 IP 字段所属的省份运营商进行解析。
图 5 日志维度提取
再进一步,我们将数据按照提取的维度进行聚合,可以查看机房维度的流量信息,如下图所示:
图 6 维度数据展示
3 自定义采集
为了应对某些定制化的场景,比如服务的指标并不在日志中体现,那么我们还提供了一些常见自定义采集插件来满足业务需求。包括通过自定义脚本进行数据的采集,以及服务提供的 HTTP 接口进行数据采集。比如服务的某些信息不适合通过日志的方式采集,那么此时便可以通过自定义脚本或者 HTTP 接口的形式将该数据吐出来,通过配置自定义监控来采集这些数据便可以方便的查看这些数据以及后续的聚合计算以及报警配置。
一种简单的自定义脚本输出形式:
图 7 自定义脚本输出
对应的监控输出如下:
图 8 自定义脚本监控
远程服务采集
服务监控
远程探测的形式是从监控机向用户机器发起探测请求,并校验返回的结果,根据返回结果来判断服务是否正常。根据请求内容的类型我们主要提供以下三种功能:
1.端口监控:探测目标端口是否存活;
2.语义监控:发送请求到目标机器,校验返回的数据是否符合预期,支持各种文本类型的协议,如 HTTP/HTTPS;
3.结构体监控:对于二进制等文本形式难以描述的服务接口,则通过结构体监控来解决二进制内容的监控。
死机检测
机器故障或者死机是线上的一个常见问题 ,死机检测功能则可以帮助用户及时发现故障机器,进行服务的迁移或者降级来保障服务可用性。死机检测往往很难通过单一手段来判断,这里,我们通过分别检测本地客户端的存活状况、SSH 等常用端口来判断机器是否故障以及故障的类型。
总结
本文主要介绍了百度云 Noah 智能监控中的数据采集(入门篇),数据采集需要针对不同的应用场景,通过不同的方式进行采集。基础的数据采集,可以通过部署本地客户端和远程服务采集两种方式来完成。通用化的服务器信息、进程信息等,可以通过预置方式进行采集,无需用户操心或干预;而针对不同业务的个性化情况,则提供灵活的插件形式进行采集,由用户来灵活配置采集的形式,满足定制化的需求。
作者介绍:
运小羴,百度云高级研发工程师,负责百度云 Noah 智能监控产品数据采集子系统相关研发工作,在分布式监控系统架构、服务器客户端研发等方向有着较为广泛的实践经验。
本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。
原文链接:
https://mp.weixin.qq.com/s/AHyl1_Yn6BTl4XLhQW84Yg
评论