TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • 试读&介绍

    • Ambari-Metrics 的演进过程
    • Ambari-Metrics 的分支研究
    • Ambari-Metrics 的编译成果
    • Ambari-Metrics 的组件分工
  • Ambari-Metrics解读【简写AMS】

  • GOD-Ambari-Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector-指标查询-接口实战
JaneTTR
2025-09-16
目录

[/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#Ambari-Metrics#TimelineService#Controller#Condition#HBase查询
最近更新
01
[/metrics/aggregated] — 聚合数据范围 检查点
09-19
02
[/metrics] — 反向分析接口参数 请求抓包
09-17
03
[/metrics] — 普通指标写入方法 POST
09-17
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式