本文介绍了汽车之家为小米开源的Open-Falcon监控系统贡献的Windows监控组件。
前言
小米Open-Falcon监控系统自2015年开源以来,以其丰富的插件,灵活的架构,良好的性能表现,高效的告警策略等特性,赢得的众多互联网公司的青睐。
汽车之家也一直关注着Open-Falcon的发展,系统平台团队通过对Open-Falcon的二次开发,打造了汽车之家的监控系统。这套系统负责了汽车之家所有服务器基础监控,URL监控,日志监控等重要功能。作为公司基础系统,稳定高效的支撑了近万台服务器的监控,告警工作。
设计
初衷
汽车之家除Linux服务器外,还有很多业务运行在Windows机器上,所以对Windows服务器基础监控,IIS,SQL Server等Windows服务的监控也非常重要。但是Open-Falcon未全面覆盖Windows系统,没有官方的Windows Agent去做数据的采集。社区中开源的脚本都是通过计划任务的方式采集。而我们希望的是Open-Falcon在Windows下的Agent采集的逻辑和架构与Linux下保持一致,方便监控平台管理,控制Agent。
目标
我们的设计目标有以下几点:
1. 可以服务的形式运行在Windows服务器上,不用配置计划任务
2. 支持采集Windows服务器基础监控项
3. 支持采集IIS,SQL Server的监控项采集
4. 提供和Linux Agent一样的push数据接口,支持第三方push数据
5. 与Linux Agent其他功能保持一致
基于以上几点我们自研了之家的Open-Falcon Windows Agent。
实现
Windows-Agent的代码架构如上图所示。程序启动后,会启动5个线程。每个线程都会按照配置好的时间间隔定时采集所需信息。
-
basic thread基础监控项采集线程,通过psutil这个跨平台的库,可以轻松获取操作系统进程和系统利用率等信息。
-
IIS thread IIS数据采集线程,通过winstats这个库,定时的采集IIS站点的连接数,IIS站点的cpu使用率等数据。
-
SQL Server thread SQL server数据采集线程,同样通过winstats, 获取到SQLServer内存和I/O相关数据。
-
status thread Agent自身状态线程。这一点和Linux Agent的功能一样, 定时向HearbeatServer汇报自己Agent的状态。这样在我们的监控平台上就可以向管理Linux服务器一样的管理这些Windows服务器。
-
HTTP HTTP线程会开启一个HTTP服务提供push接口,和LinuxAgent一样,用户可以选择通过该push接口,把自定义的数据push给Agent。方便第三方数据的接入。
Open-Falcon Linux下的Agent启动之后,会和transfer组件建立长连接,通过Transfer.Update这个RPC调用,把Agent采集到的监控数据传输给transfer,后面的事情就全部交由Open-Falcon处理。Agent自身状态的汇报也同样方式,通过Agent.ReportStatus这个RPC调用和Hearbeat Server交互,上报自身状态。在Windows下,我们要采用同样的方式和transfer组件,Hearbeat Server组件进行数据的传输,不同的是,Linux下的Agent是golang实现,可以方便的使用golang原生的JSONRpc处理RPC调用,而我们Windows下的Agent使用python开发,所以我们自己实现了jsonrpc的client,来模拟Linux下的处理。保证我们的Agent行为和Linux下的Agent一致。
Windows Agent通过pypiwin32这个库,把python代码变成了服务安装到了Windows服务器上。这个库怎么用呢?Demo如下:
首先要继承win32serviceutil.ServiceFramework这个类,然后分别实现构造方法,停止运行方法SvcStop, 以及启动方法SvcStop。最后在主方法中调用win32serviceutil.HandleCommandLine(AppServerSvc)。就可以通过python agent.py install安装服务,python agent.py start启动服务,有兴趣的同学不妨可以自己试试。
4 配置文件
Windows Agent的配置文件也和Linux Agent一下保持一致,如果你熟悉了Linux下的配置,甚至可以直接copy到Windows服务器下。具体的配置解释如下:
安装
实战
目前Windows Agent运行在汽车之家上千台Windows服务器下2年多时间,始终保持了稳定,可靠的数据采集,同时对资源的消耗也非常小。
下图为Agent作为服务运行
下图为Agent进程的消耗,由于我们内部的Agent监控项要比开源的版本多,所以内存占用大概有30M左右,开源版本的内存占用会小于这个数值
下图为采集到的IIS站点的cpu使用率监控数据
下图为SQL Server采集监控数据
开源
在公司的支持下,我们将代码以Apache许可证开源。目前WindowsAgent组件已经被Open-Falcon社区收录,为更多Windows用户提供支持。
相关文档以及代码参见:
https://github.com/AutohomeRadar/Windows-Agent/
后续计划
我们计划下一步为Windows Agent加入更多的特性。例如对插件的支持,添加更丰富的监控项等。同时,汽车之家对Open-Falcon还做了很多的二次开发,比如告警的升级机制,多种维度的告警收敛,URL监控,网络监控等,并且已经应用到生产环境当中。以后我们也会把通用的组件开源,回馈社区。
感谢汽车之家技术团队对小米开源的Open-Falcon监控系统的支持和贡献,也欢迎更多的Open-Falcon用户加入我们。
本文联合汽车之家系统平台部发布,首发于公众号“之家技术” 。