实现原理

监控的通用逻辑

1

  • 定义数据源:首先,需要建立元数据基本模型,元数据是监控系统的根基。例如:定义应用、部署实例、机房信息,单元化信息等。在 SOFAStack 场景下,这部分信息需要从 PaaS 侧自动获取。

  • 数据采集:通过安装在机器上的 Agent 采集监控数据,这部分可以是日志,也可以是通过各种方式获取到的指标。

  • 数据清洗:将采集得到的非结构化的数据,解析为监控系统可以处理的结构化信息。这部分解析能力需要是事先通过监控系统预设好的某种规则。例如,日志解析规则、Prometheus 协议规则等。

    举个例子,有业务日志样例如下,希望通过监控获取每一分钟各商品各自创建了多少笔交易这一数据。

      2012-11-11 11:11:11,2950211004,衣服,交易,创建,7,Y,
      2012-11-11 11:11:12,2950211005,衣服,交易,创建,8,Y,
      2012-11-11 11:11:13,2950211006,食品,交易,创建,9,Y,
      2012-11-11 11:11:14,2950211007,家居,交易,创建,11,Y,
      2012-11-11 11:11:15,2950211008,食品,交易,创建,7,N,
      ……
    说明

    日志格式为:日志打印时间,订单id,商品,服务名,方法名,耗时,结果

  • 数据统计:由于监控系统面对的是海量集群,在获取结构化数据之后,需要对数据进行数据统计。统计方式可以有很多种,比如求行数、求和、求平均、最大/最小值等统计方法。

  • 预警配置:可在统计数据上定义类型丰富的预警规则,包括绝对值、同比、环比、最近 N 分钟求和等,支持定义多项规则和逻辑运算。

实现原理

基本实现原理是在所有的应用主机上部署 Agent(代理),从而采集主机和应用的各种指标、日志和链路等数据,并将其存储在 CeresDB 中,通过在 PontusSpark 中进行分析计算,实现在不同产品场景中的可视化展现和告警通知。

实现原理示意图

RMS 实现原理-01

采集层

DaemonSet Agent(又称 Pontus-Agent)日志采集代理

  • 负责所有的数据的最终采集,包括原始日志拉取和指标型数据采集。

  • 具有插件化的能力,统一本地调度能力,负责拉起插件和解析数据,解析完了之后做一次聚合计算。然后放入本地的缓存中,等待 Vessel 来拉取数据。

  • 提供一次性的任务执行能力,主要用于性能分析。

  • 启动时会和 Register 进行通信。通信之后会获取 Agent 运行所需要的所有配置,包含运行时采集配置,Vessel 建连的配置等。

Register 注册中心

  • 负责与 Agent 之间保持网络心跳,收集所有 Agent 的状态,版本透视等信息。

  • 负责 Agent 与 Vessel 的配置生成与下发,即负责管控所有的采集配置。

  • 负责管控 Agent 与 Vessel 之间的连接与会话(session),Register 感知 Vessel 集群负载,负责通知 Agent,应该和哪个 Vessel 地址进行建连。

Vessel 流量清洗组件

  • 抽象来看,Vessel 其实就是一个独立部署的 Agent,这个 Agent 通过 remote input 的形式,拿到了日志或者其他的原始数据。

  • 一个 Vessel 服务可以托管 N 个 Agent,即从 N 个 Agent 中收集数据。

  • Vessel 可以通过一系列的解析规则,最终将非结构化的数据变成结构化的数据并返回,也就是所谓的数据清洗。

  • 所有上层组件(包括计算层与链路层组件)都是通过 Vessel 来获取数据。

计算层

DimServer 维度数据服务(又称元数据服务)

  • 包括维度数据的读和写的服务。在这一层上无业务语义,业务语义为上层产品层注入。

  • 计算和采集层都会用到维度数据(元数据),通过 DimServer 提供的 Java Client 来实现数据通讯。

  • 为适配任意维度数据结构,DimServer 实现了维度数据 Table 化,即使用若干张宽表来处理所有可能的元数据表结构,这类宽表被称为维度表。

PontusConsole 监控数据平台的管控端

  • 主要负责内部运维性管控、系统配置,以及提供给产品使用的配置接口。

  • 提供操作维度表、指标表的标准数据服务接口。

Scheduler 全局任务调度器

  • 不依赖任何中间件,实现全局任务调度能力,仅用于监控系统内部,实现功能自闭环。

  • 负责根据配置信息定时生成并分发监控的计算任务。

  • Scheduler 可以实现多机房部署,通过数据库维持高可用。

PontusSpark 分布式计算引擎

  • 功能强大的 Spark 计算集群,负责接收产品层的计算配置,并对数据进行离线计算和统计。

  • 从 Register 中获取监控数据采集的 Vessel 地址,并通过 Vessel 获取必要的监控数据。

PontusAlarm 监控告警组件(又称 RMSAlarm)

  • 主要负责将监控计算完成的告警信息以短信、邮件、钉钉等方式向外推送。

  • 在 SOFAStack 输出的模式下,告警渠道主要通过 Gotone 服务提供。

MonitorGateway 分布式链路追踪

  • 主要负责分布式链路处理的相关功能。

  • 对于链路信息的收集,提供三种方式,分别为主动日志采集、SLS 日志采集以及链路日志上报。

数据层

主要是由时序数据库 CeresDB 来承载。CeresDB 是蚂蚁自研的时序数据库,时序引擎是一种存储和管理时间序列数据的分布式数据库,为时间序列提供高性能读写、预处理计算、可视化查询等功能。

产品层

产品层(应用名为 monitorprod)承载了RMS的所有页面以及用户交互、配置逻辑,是监控对客的主要门户。

产品层负责与用户权限系统打通,读取用户身份信息。同时,产品层也负责打通 PaaS 元数据,将元数据同步至 DimServer 。

说明

PaaS 元数据,是指通过 PaaS 系统发布的描述应用的基本信息,例如应用 IP、机房、单元化等信息。