Ambari Metrics Collector 架构

Metrics Collector 架构图,由图中看,主要有4部分:
TimelineWebServices:是一个Web服务,一方面提供 Metrics Monitor 和 Metrics Sink 汇报监控数据的 POST 接口;另一方面提供 Ambari Server 查询监控数据的 GET 接口。
TimelineMetricStore:周期性聚合数据。
Phoenix:是一个开源工具库,可以把 SQL 语句转换为 HBase 的操作语句。
HBase:存储监控数据的地方,HBase 有两种工作模式:Embedded Mode,单机模式,数据存储在本地文件系统中;Distributed Mode,分布式模式,数据存储在 HDFS 中。目前 Metrics 服务默认是 Embedded Mode,安装之后可通过修改参数进行调整。

简述一下 Metrics Collector 的工作流程:
1、存储监控数据:Metrics Monitor/Sink,通过 POST 接口汇报监控数据,TimelineWebServices 根据收到的监控数据生成 SQL 语句,然后通过 Phoenix 把 SQL 转换为 HBase 的操作语句,把监控数据存储到 HBase 当中(原始监控数据都存储到 METRIC_RECORD 表中)。
2、查询监控数据:Ambari Server 根据 GET 接口查询监控数据,TimelineWebServices 根据查询条件生成 SQL 语句,然后通过 Phoenix 把 SQL 转换为 HBase 的操作语句,查询出符合条件的监控数据。
3、周期性聚合数据:Metrics Monitor 和 Metrics Sink 上传的原始监控数据粒度是秒级的,TimelineMetricStore 通过运行周期任务,可以聚合出分钟级、小时级、天级的监控数据。

Metrics 表分为两类:主机级别和集群级别,然后不同粒度是不同的表,具体如下:
Host 级别:
METRIC_RECORD                秒级
METRIC_RECORD_MINUTE   分级
METRIC_RECORD_HOURLY  时级
METRIC_RECORD_DAILY     天级

Cluster 级别:
METRIC_AGGREGATE                分级
METRIC_AGGREGATE_HOURLY  时级
METRIC_AGGREGATE_DAILY     天级

简单介绍一下 METRIC_RECORD 的表结构,其他表的结构大同小异。
METRIC_RECORD 表结构:

METRIC_NAME     指标名
HOSTNAME          主机名
APP_ID                应用名
INSTANCE_ID      实例ID,如果一台 HOST 安装了多个同样的应用
UNITS                 数据类型,如:Number
SERVER_TIME      记录保存时间
START_TIME        本次 METRICS 最小的时间
METRICS             具体指标,如:{"1490605303":"149491.1875","1490605313":"149591.1875"}
METRIC_SUM       METRICS value的总数
METRIC_COUNT   METRICS 记录的数量
METRIC_MAX       METRICS 中最大的 value
METRIC_MIN       METRICS 中最小的 value

简单介绍一下 数据聚合 的实现方式,是通过执行如下的 SQL 进行聚合的:

Host 级别数据聚合:

UPSERT INTO 'METRIC_RECORD_MINUTE' (METRIC_NAME, HOSTNAME, APP_ID, INSTANCE_ID, SERVER_TIME, UNITS, METRIC_SUM, METRIC_COUNT, METRIC_MAX, METRIC_MIN)
SELECT METRIC_NAME, HOSTNAME, APP_ID, INSTANCE_ID, MAX(SERVER_TIME), UNITS, SUM(METRIC_SUM), SUM(METRIC_COUNT), MAX(METRIC_MAX), MIN(METRIC_MIN)
FROM 'METRIC_RECORD' 
WHERE SERVER_TIME >= 'startTime' AND SERVER_TIME < 'endTime'
GROUP BY METRIC_NAME, HOSTNAME, APP_ID, INSTANCE_ID, UNITS

Cluster 级别数据聚合:

UPSERT INTO 'METRIC_AGGREGATE' (METRIC_NAME, APP_ID, INSTANCE_ID, SERVER_TIME, UNITS, METRIC_SUM, METRIC_COUNT, METRIC_MAX, METRIC_MIN) 
SELECT METRIC_NAME, APP_ID, INSTANCE_ID, MAX(SERVER_TIME), UNITS, SUM(METRIC_SUM), SUM(METRIC_SUM), MAX(METRIC_MAX), MIN(METRIC_MIN) 
FROM METRIC_RECORD 
WHERE SERVER_TIME >= 'startTime' AND SERVER_TIME < 'endTime'
GROUP BY METRIC_NAME, APP_ID, INSTANCE_ID, UNITS
posted @ 2017-04-28 17:46  basenet855x  阅读(2175)  评论(5编辑  收藏  举报