fasionchan

读万卷书,行万里路,品万味肴,撸万行码。

监控系统(被动)

这是一套全新设计的监控系统,为游戏部所有服务器和线上服务提供状态监视指标采集异常检测/告警以及数据报表等服务。 系统分被动监控以及主动监控两部分,下面介绍的是被动监控部分,侧重于指标数据的收集分析应用。

架构

agent

agent是一个常驻监控客户端,部署在每台受监控服务器上。 agent核心提供一个插件调度模块和一个长连接通讯(控制)模块,具有以下特点:

  • 插件式设计,提供一个通用插件编写框架,可以灵活扩展(采集)功能;
  • 插件开发调试框架,可以不依赖实际运行环境开发;
  • 插件采用Python包部署,支持动态加载热更新
  • 插件采用git管理代码,提交后自动打包并发布;
  • 与控制服务器保存长连接,支持心跳保活;
  • 跨平台,支持LinuxBSDWindows以及OSX等操作系统;
  • agent发布新版本后,运行实例自动升级
  • 自带Python执行环境,不影响宿主;
  • 运行稳定,占用资源小;

CMDB

CMDB是整个系统的元数据所在,定义了机器-群组-服务-端口-插件等配置模型。 通过CMDB可以计算出哪些机器需要运行哪些监控插件监控哪些服务。

Arbiter

Arbiter是一个全局仲裁器,负责监视Publisher节点的状态,并将机器监控配置进行划分推给健康的Publisher节点。 Arbiter提供一个接口,供agent查询其需要连接哪个Publisher节点。

Publisher

Publisher是一个控制服务器,为agent提供配置同步命令下发以及数据提交等服务。 Publisher以网络域(机房)为单位进行部署,每个域至少部署两个节点,为该域下所有agent提供服务。 Publisher以长连接连到Aribter模块,Arbiter监视其状态,并把一个域下所有机器的监控配置(以机器为单位)平均划分下发到可用的Publisher上。

agent用长连接与Publisher保持活跃通讯,Publisher推送其配置信息。 agent采集到数据后也通过该长连接进行提交,Publisher负责将数据转发到消息队列集群(MQ)。 系统支持下发一个命令给某台机器上的agent执行,也是通过Publisher转发给agent的。

上图是Publisher节点架构图,绿色部分为Publisher服务实例,进程协作关系如下:

Main主进程与Arbiter保持长连接通讯,接受状态监控,接收Aribter推送配置。 主进程启动后创建工作进程Worker系列,并监视其运行状态,并将配置划分(IP哈希)推送。 主进程监听服务端口,接受agent长连接,对新连接进行身份验证后,将文件描述符发给负责的工作进程(IP哈希)。 Worker接到新的文件描述符后(新agent连接),为其提供配置推送,命令下发,数据转发等连接控制服务。

DB

指标数据(时序数据)采用MongoDB做存储。按照数据粒度不同,总共分成4个集群。 每个集群由5分片(shard)组成,每个分片有3个副本集(replica set),总共15mongod实例。 规模最大的集群每天支撑超过20亿条文档的写入压力,每台数据库实例插入速度超过1QPS

Comments