TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • Ambari 深度专题

  • Bigtop 方法论

  • 自定义集成

  • Ambari Server 与 Web

  • Ambari Metrics

    • 试读&介绍

    • Ambari-Metrics解读【简写AMS】

      • 源码下载及环境初始化
      • 项目目录及模块解读
      • AMS-Collector剖析

      • AMS-Collector表结构实战

      • AMS-Collector-元数据-接口实战

      • AMS-Collector-指标查询-接口实战

        • [/metrics] — 监控数据接口查询方法
        • [/metrics] — 请求参数概括及详解索引
        • [/metrics] — Service 代码整体逻辑概览
        • [/metrics] — condition生命周期
          • 一、入口:Condition 的构建
          • 一、为什么要关注 Condition(查询“意图”在这里定型)
          • 二、入口回顾:三类 Condition 的构建分流
          • 三、Condition 持有的关键字段(生命周期“装配清单”)
            • 1、核心过滤与范围
            • 2、TopN 扩展(仅 TopNCondition)
            • 3、Transient 扩展(仅 TransientMetricCondition)
          • 四、基于 hostnames 的“表级”分流(两条主干路径)
            • 1、有 hostnames:走 METRIC_RECORD_* 系列
            • 2、无 hostnames:走 METRIC_AGGREGATE_* 系列
        • [/metrics] — metricNames 生命周期
        • [/metrics] — seriesAggregateFunc生命周期
        • [/metrics] — getUuidsForGetMetricQuery精讲
        • [/metrics] — applyTopNCondition精讲
        • [/metrics] — getAggregateMetricRecords精讲
        • [/metrics] — getMetricRecords精讲
        • [/metrics] — 临时指标精讲
      • AMS-Collector-普通指标写入-接口实战

      • AMS-Collector-聚合指标写入-接口实战

  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Ambari Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector-指标查询-接口实战
JaneTTR
2025-09-16
目录
一、入口:Condition 的构建
一、为什么要关注 Condition(查询“意图”在这里定型)
二、入口回顾:三类 Condition 的构建分流
三、Condition 持有的关键字段(生命周期“装配清单”)
1、核心过滤与范围
2、TopN 扩展(仅 TopNCondition)
3、Transient 扩展(仅 TransientMetricCondition)
四、基于 hostnames 的“表级”分流(两条主干路径)
1、有 hostnames:走 METRIC_RECORD_* 系列
2、无 hostnames:走 METRIC_AGGREGATE_* 系列

[/metrics] — condition生命周期

# 一、入口:Condition 的构建

在 metricNames 生命周期的文章中,我们已经提到会调用:

Condition condition = conditionBuilder.build();
1

# 一、为什么要关注 Condition(查询“意图”在这里定型)

在 /metrics 的整个调用链中,Condition 是查询意图的最终“固化形态”:它承载了 uuid 约束、metric 过滤、主机维度选择、时间窗口、精度、结果分组与上限、以及 TopN 配置等。Controller 侧前置的各种解析与校验,最后都会“落盘”到一个具体的 Condition 实例里,供后续 HBase/Phoenix 访问层据此拼装扫描范围与聚合策略。

提示

换句话说:你传了什么参数、想查什么粒度与范围、要不要做 TopN,最终都“写进了” Condition;后端只需读 Condition,就能确定使用哪张表、怎样扫、如何聚合。

# 二、入口回顾:三类 Condition 的构建分流

applyTopNCondition、parseMetricNamesToAggregationFunctions 等步骤完成后,构建在下列分支中收敛为三种 Condition:

public Condition build() {
  if (topN == null) {
    if (CollectionUtils.isEmpty(transientMetricNames)) {
      return new DefaultCondition(
        uuids, metricNames,
        hostnames, appId, instanceId, startTime, endTime,
        precision, limit, grouped);
    } else {
      return new TransientMetricCondition(
        uuids, metricNames,
        hostnames, appId, instanceId, startTime, endTime,
        precision, limit, grouped, transientMetricNames);
    }
  } else {
    return new TopNCondition(uuids, metricNames, hostnames, appId, instanceId,
      startTime, endTime, precision, limit, grouped, topN, topNFunction, isBottomN);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 三、Condition 持有的关键字段(生命周期“装配清单”)

# 1、核心过滤与范围

  • uuids:基于 metricName/appId/instanceId(及 host 相关字节)映射得到的主键片段;
  • metricNames、hostnames、appId、instanceId:语义过滤;
  • startTime、endTime:时间窗口(毫秒级/秒级视实现);
  • precision:精度(minute/hour/day…),影响 AGGREGATE 系列分表选择;
  • grouped:是否对多序列进行分组聚合;
  • limit:返回条数/点位上限(防止过量扫描);

# 2、TopN 扩展(仅 TopNCondition)

  • topN:N 的具体值;
  • topNFunction:排序依据(如 sum/avg/max/min 等);
  • isBottomN:是否反向(取最小 N)。

# 3、Transient 扩展(仅 TransientMetricCondition)

  • transientMetricNames:临时性指标集合,走瞬时路径。

提示

生命周期理解:Controller → 解析/校验 → 计算 uuids/函数映射 → build() 固化为 Condition → 传入访问层执行。

详解可参考

[/metrics] — 临时指标精讲

# 四、基于 hostnames 的“表级”分流(两条主干路径)

源码中的分流判断如下图所示(你的示意图):

image-20250916092949983

以及对应代码:

if (CollectionUtils.isEmpty(hostnames)) {
  metrics = hBaseAccessor.getAggregateMetricRecords(condition, metricFunctions);
} else {
  metrics = hBaseAccessor.getMetricRecords(condition, metricFunctions);
}
1
2
3
4
5

# 1、有 hostnames:走 METRIC_RECORD_* 系列

  • 典型表:METRIC_RECORD_UUID
  • RowKey 语义:在指标基础上增加主机 4B 维度字节(你的前文已有论证)
  • 适合:主机维度的明细曲线、多主机并列对比、细粒度诊断

详解可参考

[/metrics] — getMetricRecords精讲

# 2、无 hostnames:走 METRIC_AGGREGATE_* 系列

  • 典型表:METRIC_AGGREGATE_UUID(以及 minute/hour/day 粒度分表)
  • 由 precision 决定使用哪张聚合表
  • 适合:跨主机/实例的汇总趋势、长时间窗口的轻量级查询

详解可参考

[/metrics] — getAggregateMetricRecords精讲

#Ambari-Metrics#源码解析#Ambari#HBase
[/metrics] — Service 代码整体逻辑概览
[/metrics] — metricNames 生命周期

← [/metrics] — Service 代码整体逻辑概览 [/metrics] — metricNames 生命周期→

最近更新
01
当前版本 2026/08
08-29
02
把 Ambari Server HA 稳稳地跑起来
08-17
03
从一次启用操作追到主备就绪
08-17
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式