写点什么

小米开源监控 Open-Falcon 收录汽车之家贡献的 Win 版 Agent

本文转载自小米运维

  • 2018-11-16
  • 本文字数:1970 字

    阅读完需:约 6 分钟

小米开源监控Open-Falcon收录汽车之家贡献的Win版Agent

前沿

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

Windows Agent 通过 pypiwin32 这个库,把 python 代码变成了服务安装到了 Windows 服务器上。这个库怎么用呢?Demo 如下:



首先要继承 win32serviceutil.ServiceFramework 这个类,然后分别实现构造方法,停止运行方法 SvcStop, 以及启动方法 SvcStop。最后在主方法中调用 win32serviceutil.HandleCommandLine(AppServerSvc)。就可以通过 python agent.py install 安装服务,python agent.py start 启动服务,有兴趣的同学不妨可以自己试试。

配置文件

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 监控,网络监控等,并且已经应用到生产环境当中。以后我们也会把通用的组件开源,回馈社区。


2018-11-16 22:102206

评论

发布
暂无评论
发现更多内容

2022全球边缘计算大会,火山引擎荣获“优质边缘云服务提供商”称号

火山引擎边缘云

云原生 CDN 边缘计算 边云协同 火山引擎边缘计算

js异步编程面试题你能答上来几道

loveX001

JavaScript

百度前端一面必会vue面试题合集

bb_xiaxia1998

Vue

【从零开始学爬虫】采集收视率排行数据

前嗅大数据

大数据 数据采集 爬虫软件 爬虫教程 数据采集教程

明道云携手衡石科技共建企业应用数据分析联合解决方案

明道云

手写一个Redux,深入理解其原理-面试进阶

beifeng1996

React

零代码平台在政府智慧城市领域的应用

明道云

2022面试官常考的前端面试题

loveX001

JavaScript

React源码分析1-jsx转换及React.createElement

flyzz177

React

React源码分析(三):useState,useReducer

flyzz177

React

React Context源码是怎么实现的呢

flyzz177

React

前端leetcde算法面试套路之回溯

js2030code

JavaScript LeetCode

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

2022前端高频react面试题集锦

beifeng1996

React

KCL 与其他 Kubernetes 配置管理工具的异同 - Kustomize 篇 [一个自研编程语言能做什么?(系列 2)]

Peefy

开发者 工具 编程语言 Kubernetes Serverless #DevOps

Linux RT 进程引发内核频繁卡死的优化方案

火山引擎边缘云

云计算 Linux 云原生 边缘计算 火山引擎边缘计算

你是如何使用React高阶组件的?

beifeng1996

React

聊聊产品中的状态机设计

产品海豚湾

产品经理 产品设计 产品开发 需求分析 主业务流程梳理

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue

阿里前端常考面试题集锦

loveX001

JavaScript

React源码分析(二)渲染机制

flyzz177

React

用javascript分类刷leetcode23.并查集(图文视频讲解)

js2030code

JavaScript LeetCode

细说react源码中的合成事件

flyzz177

React

深入react源码看setState究竟做了什么?

flyzz177

React

明道云联合契约锁共建人事场景电子签约解决方案

明道云

极客时间运维进阶训练营第八周作业

9527

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

腾讯前端常考react面试题(持续更新中)

beifeng1996

React

能不能手写Vue响应式?前端面试进阶

bb_xiaxia1998

Vue

架构实战 - 模块3作业

mm

学生管理系统架构 #架构实战营

2022年的各大平台小游戏生态发展到哪一步了?

FN0

游戏开发 小游戏开发 小程序游戏开发

小米开源监控Open-Falcon收录汽车之家贡献的Win版Agent
_软件工程_InfoQ精选文章