• 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
  • 相关阅读:
    android&php 加密解密
    AES加解密算法在Android中的应用及Android4.2以上版本调用问题
    eclipse 中 import sun.misc.BASE64Decoder; 报错
    Java加密技术(一)——加密介绍
    android加密DESede/CBC/PKCS5Padding
    Android中的Audio播放:竞争Audio之Audio Focus的应用
    java.lang.IllegalStateException: attempt to re-open an already-closed object
    Android 性能优化的一些方法
    android.os.DeadObjectException memory near r0: 异常处理 Consumer closed input channel or an error occurred. events=0x9
    如何分析解决Android ANR
  • 原文地址:https://www.cnblogs.com/basenet855x/p/6782679.html
Copyright © 2020-2023  润新知