专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
运维  ·  再见,CDN 巨头:Akamai 宣布 ... ·  3 天前  
51好读  ›  专栏  ›  运维帮

汽车之家为Open-Falcon贡献Windows监控

运维帮  · 公众号  · 运维  · 2018-11-16 16:31

正文

前言


小米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


实现

1 代码架构

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。方便第三方数据的接入。

2 数据的传输

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一致

3 如何变身Windows服务

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作为服务运行







请到「今天看啥」查看全文