[监控表] — 基础表和业务表关联关系
# 一、整体概览
AMS 的存储表分为 基础表 和 业务数据表。
二者之间的纽带,就是拼装后的 UUID(16b + 4b = 20b)。
表类别 | 表名示例 | UUID 长度 | 作用说明 |
---|---|---|---|
基础表 | HOSTED_APPS_METADATA_UUID 、METRICS_METADATA_UUID | 4b / 16b | 存放主机 ID 与指标 ID 的元数据映射 |
业务表 | METRIC_RECORD_UUID 、METRIC_AGGREGATE_UUID 等 | 20b / 16b | 承载监控时序数据,依赖拼装的 UUID 唯一标识 |
提示
核心公式:
业务表 UUID = 指标 UUID (16b) + 主机 UUID (4b) = 20b
# 二、基础表
HOSTED_APPS_METADATA_UUID # 主机信息(uuid=4b)
METRICS_METADATA_UUID # 指标信息(uuid=16b)
INSTANCE_HOST_METADATA # 没数据,可忽略
2
3
- 4b 主机 ID → 唯一标识 host
- 16b 指标 ID → 唯一标识 metric
这些基础表相当于字典表,为业务数据的 UUID 拼接提供元信息。
# 三、业务数据表
业务表用于存放监控时序数据,按照粒度不同分为:
粒度 | 表名示例 | UUID 长度 | 说明 |
---|---|---|---|
Cluster 聚合 | METRIC_AGGREGATE_DAILY_UUID METRIC_AGGREGATE_HOURLY_UUID 等 | 16b | 聚合层数据,不区分主机 |
Host 明细 | METRIC_RECORD_UUID METRIC_RECORD_DAILY_UUID 等 | 20b | 主机级监控,UUID = 16b+4b |
其中 METRIC_TRANSIENT
用于 Collector 内部缓存,避免短时间写入延迟。
# 四、UUID 的实现与验证 —— 探究表间关系纽带
UUID 的拼装与解析,是基础表和业务表之间联系的桥梁。下面从源码、表结构和 Java 层面逐一说明。
# 4.1 源码层面
在源码中,metricsUuid
与 hostUuid
被组合成业务表的 20b 主键:
- 前 16 字节:指标 ID(来自
METRICS_METADATA_UUID
) - 后 4 字节:主机 ID(来自
HOSTED_APPS_METADATA_UUID
)
通过这种拼接方式,一个指标在不同主机上的监控数据就能被唯一标识。换句话说,16b 与 4b 的合并正是表间关系的核心纽带。
👌 可以的,这一段可以更“丰满”,不仅要写出表结构和 GET_BYTE
的限制,还要回答 为什么会出现这种情况:
- Phoenix 基于 HBase 的二进制存储,本身没有字符串的截取函数来处理
BINARY
类型; - UUID 在 AMS 中就是用 二进制存储的,节省空间、加速对比,但代价是查询时只能逐字节;
- 这也是 Phoenix 的设计选择 —— 优化写入/存储,而不是查询时的直观性。
我帮你重写并扩展一下 4.2 表结构层面:
# 4.2 表结构层面
通过 !describe
命令,可以直观看到表定义:
!describe METRIC_RECORD_UUID
!describe METRICS_METADATA_UUID
2
其中,METRICS_METADATA_UUID
存放了 指标名称 ↔ 应用 ID 的映射;
而 METRIC_RECORD_UUID
的 前 16 字节,正是依赖这些指标元数据来解码。
为什么会这样设计?
存储上的考虑
- AMS 中的 UUID 全部以 BINARY 格式保存,而不是
VARCHAR
。 - 这样做能大幅节省存储空间(16b/20b 定长)并提高写入速度(避免字符串解析)。
- 对于 HBase 这种面向高并发写入的场景,这是更合理的选择。
- AMS 中的 UUID 全部以 BINARY 格式保存,而不是
查询上的限制
- Phoenix 的 SQL 层面对
BINARY
类型支持有限,没有像字符串那样的substring
或split
函数。 - 因此在表 Join 时,无法直接“截取” UUID 的前 16 字节来对比,只能用 逐字节比对。
- Phoenix 的 SQL 层面对
二进制拼接的副作用
- 我们的 UUID 实际是由 metaUuid (16b) + hostId (4b) 拼出来的。
- Phoenix 并不知道这 20b 里面的“前 16b”是指标、“后 4b”是主机,只能把它当成一个纯粹的二进制串。
- 所以查询时只能靠
GET_BYTE
手工把前 16 个字节一个个拿出来匹配。
测试脚本验证
SELECT m.METRIC_NAME, COUNT(*) AS c
FROM METRIC_RECORD_UUID r
JOIN METRICS_METADATA_UUID m
ON GET_BYTE(r.UUID, 1)=GET_BYTE(m.UUID, 1)
AND GET_BYTE(r.UUID, 2)=GET_BYTE(m.UUID, 2)
AND GET_BYTE(r.UUID, 3)=GET_BYTE(m.UUID, 3)
AND GET_BYTE(r.UUID, 4)=GET_BYTE(m.UUID, 4)
AND GET_BYTE(r.UUID, 5)=GET_BYTE(m.UUID, 5)
AND GET_BYTE(r.UUID, 6)=GET_BYTE(m.UUID, 6)
AND GET_BYTE(r.UUID, 7)=GET_BYTE(m.UUID, 7)
AND GET_BYTE(r.UUID, 8)=GET_BYTE(m.UUID, 8)
AND GET_BYTE(r.UUID, 9)=GET_BYTE(m.UUID, 9)
AND GET_BYTE(r.UUID, 10)=GET_BYTE(m.UUID, 10)
AND GET_BYTE(r.UUID, 11)=GET_BYTE(m.UUID, 11)
AND GET_BYTE(r.UUID, 12)=GET_BYTE(m.UUID, 12)
AND GET_BYTE(r.UUID, 13)=GET_BYTE(m.UUID, 13)
AND GET_BYTE(r.UUID, 14)=GET_BYTE(m.UUID, 14)
AND GET_BYTE(r.UUID, 15)=GET_BYTE(m.UUID, 15)
AND GET_BYTE(r.UUID, 16)=GET_BYTE(m.UUID, 16)
GROUP BY m.METRIC_NAME
ORDER BY c DESC
LIMIT 100;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
执行结果表明:只有逐字节比对,才能把 METRIC_RECORD_UUID
中的数据正确关联回 METRICS_METADATA_UUID
中的指标元数据。
直观理解
下图展示了这种匹配的逻辑:
- 左边是业务表
METRIC_RECORD_UUID
的 UUID(20b); - 右边是基础表
METRICS_METADATA_UUID
的 UUID(16b); - Phoenix Join 时只能一位一位比对,直到前 16b 全部匹配为止:
# 4.3 Java 端解析 hostId
Collector 在 Java 端通常不会走复杂的 SQL Join,而是直接解析 UUID 的后 4 字节,快速得到 hostId
。
相比 SQL 中冗长的 GET_BYTE
逐位匹配,Java 解析的方式更直观高效,也便于后续做分组与聚合。
我们通过实际运行结果,分别从 按主机分组 和 按指标分组 两个角度来观察 UUID 的效果。
运行结果示例:
metric=dfs.datanode.DataNodeActiveXceiversCount (app=datanode), metaUuid=8C8A97EA31104CD70427BCB95FD50720, hostId=9CDC8F97, count=1198
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.SEQUENCE_metric_checkAndPutTime_mean (app=hbase), metaUuid=8C9E2D277CC4C1EAFCEFF8C908562F20, hostId=6ED2F093, count=1233
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC4A3D7D4F42479F7FE2968784, hostId=2D31224D, count=1211
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC4A3D7D4F42479F7FE2968784, hostId=6ED2F093, count=1203
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC4A3D7D4F42479F7FE2968784, hostId=9CDC8F97, count=1201
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.TASK_metric_deleteBatchTime_mean (app=hbase), metaUuid=8CC6B1BE74960BFE21E4185D67DA05B8, hostId=6ED2F093, count=1233
metric=regionserver.Server.Replay_min (app=ams-hbase), metaUuid=8CFB3174AB9BC6ABFCD6955B52DD91D0, hostId=6ED2F093, count=1163
metric=phoenix.PhoenixIndexer.PostOpenTime_98th_percentile (app=hbase), metaUuid=8D04CFF61638F8067AE2B00F5E785B7F, hostId=6ED2F093, count=1180
metric=regionserver.Server.blockCacheSize (app=hbase), metaUuid=8D089CB0CB2DE45450CEC5C1800DDBCB, hostId=6ED2F093, count=1189
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.CATALOG_metric_incrementTime_25th_percentile (app=hbase), metaUuid=8D39F4C1C42F08A1F4D9047EFEBD04F9, hostId=6ED2F093, count=1233
metric=regionserver.Server.Append_max (app=ams-hbase), metaUuid=8D5B6A674D3DCEBBE338790A79B0CADA, hostId=6ED2F093, count=1163
metric=regionserver.TableLatencies.Namespace_hbase_table_namespace_metric_scanTime_max (app=hbase), metaUuid=8D7FBF47E25AD6D2BC1D8358FEEC71B6, hostId=6ED2F093, count=1233
metric=master.Quotas.QuotaObserverChoreTime_99th_percentile (app=hbase), metaUuid=8D89DBFEC623FB1F1620D15208CD3226, hostId=6ED2F093, count=1188
metric=metricssystem.MetricsSystem.NumAllSinks (app=namenode), metaUuid=8D8DE4AE88EDB3AF6A6FBA38DA95A3D1, hostId=6ED2F093, count=1184
metric=yarn.PartitionQueueMetrics.AggregateVcoreSecondsPreempted (app=resourcemanager), metaUuid=8D955D8AB6C994198ADF34B73624F32B, hostId=6ED2F093, count=1194
metric=dfs.FSNamesystem.CapacityUsedNonDFS (app=namenode), metaUuid=8DAEB959CCD2BE3CA28BF81512F10AC7, hostId=6ED2F093, count=1180
metric=regionserver.RegionServer.RequestSize_75th_percentile (app=hbase), metaUuid=8DCEF9B4897F847BA5D4A20958851D5E, hostId=6ED2F093, count=1182
metric=ugi.UgiMetrics.RenewalFailuresTotal (app=datanode), metaUuid=8DCF5C725EBC0C9319B40737AD2F8911, hostId=2D31224D, count=1212
metric=ugi.UgiMetrics.RenewalFailuresTotal (app=datanode), metaUuid=8DCF5C725EBC0C9319B40737AD2F8911, hostId=6ED2F093, count=1212
metric=ugi.UgiMetrics.RenewalFailuresTotal (app=datanode), metaUuid=8DCF5C725EBC0C9319B40737AD2F8911, hostId=9CDC8F97, count=1214
metric=regionserver.Memory.IncreaseMemStoreSize_98th_percentile (app=hbase), metaUuid=8DD077F512E9C8F48805A2C003B27303, hostId=6ED2F093, count=1180
metric=yarn.QueueMetrics.Queue=root.default.AMResourceLimitVCores (app=resourcemanager), metaUuid=8DDFBC12B1BABF42434881873CA956ED, hostId=6ED2F093, count=1192
metric=phoenix.PhoenixIndexer.PreIndexUpdateFailureTime_95th_percentile (app=hbase), metaUuid=8DEBB338B13CC6FDD820FF4474AF099D, hostId=6ED2F093, count=1180
metric=rpc.rpc.client.NumDroppedConnections (app=namenode), metaUuid=8E156C74A6FE937E8DDB2FE600B3FA20, hostId=6ED2F093, count=1194
metric=jvm.JvmMetrics.ThreadsNew (app=datanode), metaUuid=8E1F69B81159897124FEDBFD01CFCAB8, hostId=2D31224D, count=1211
metric=jvm.JvmMetrics.ThreadsNew (app=datanode), metaUuid=8E1F69B81159897124FEDBFD01CFCAB8, hostId=6ED2F093, count=1204
metric=jvm.JvmMetrics.ThreadsNew (app=datanode), metaUuid=8E1F69B81159897124FEDBFD01CFCAB8, hostId=9CDC8F97, count=1204
metric=master.Master.numActiveHandler (app=hbase), metaUuid=8E21CFCD37DB0D2D50FFBD303FD07A90, hostId=6ED2F093, count=1196
metric=dfs.NNTopUserOpCounts.windowMs=60000.op=mkdirs.TotalCount (app=namenode), metaUuid=8E36FA66764338BDAF654605E1230D22, hostId=6ED2F093, count=117
metric=sdisk_sda2_write_count (app=HOST), metaUuid=8E45326A5DEA52D0637A34C848C4179A, hostId=2D31224D, count=1439
metric=sdisk_sda2_write_count (app=HOST), metaUuid=8E45326A5DEA52D0637A34C848C4179A, hostId=6ED2F093, count=1439
metric=sdisk_sda2_write_count (app=HOST), metaUuid=8E45326A5DEA52D0637A34C848C4179A, hostId=9CDC8F97, count=1439
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.CATALOG_metric_putTime_max (app=hbase), metaUuid=8E54BAF1FBD8DC9A5129C52420C8A8CE, hostId=6ED2F093, count=1233
metric=master.FileSystem.HlogSplitTime_75th_percentile (app=hbase), metaUuid=8E7CB80155BFD5D6F8A608D76F05AAD5, hostId=6ED2F093, count=1189
metric=thrift-one.Thrift.PauseTimeWithoutGc_99.9th_percentile (app=hbase), metaUuid=8E89C49C9537E4BB6B98452848B27AF4, hostId=6ED2F093, count=1197
metric=master.Quotas.SnapshotObserverSizeComputationTime_mean (app=hbase), metaUuid=8E9BBAB1173C348BDEE21697C62F3680, hostId=6ED2F093, count=1188
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.TASK_metric_appendTime_98th_percentile (app=hbase), metaUuid=8EA0348AFA823B4A97B889CF7C8484E5, hostId=6ED2F093, count=1233
metric=dfs.namenode.FilesRenamed (app=namenode), metaUuid=8EA2335848F98698EBDD6842EB520381, hostId=6ED2F093, count=1195
metric=phoenix.PhoenixIndexer.PostPutTime_75th_percentile (app=hbase), metaUuid=8EB422ECF212AF4852CB3526CEDA6A6E, hostId=6ED2F093, count=1180
metric=thrift-one.Thrift.TimeInQueue_max (app=hbase), metaUuid=8EB75D0FC721C1DF1D7990845E5D5B0B, hostId=6ED2F093, count=1197
metric=dfs.namenode.TransactionsBatchedInSync (app=namenode), metaUuid=8EC7390910605EB7F96A90BD7AF418AC, hostId=6ED2F093, count=1195
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.TASK_metric_checkAndPutTime_98th_percentile (app=hbase), metaUuid=8EEA2F5181FD70DA46B5CFDD7F115282, hostId=6ED2F093, count=1233
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.CATALOG_metric_getTime_25th_percentile (app=hbase), metaUuid=8EF9069C6F5E702FB4BC801E8BD10C58, hostId=6ED2F093, count=1233
metric=master.AssignmentManager.RitDuration_median (app=hbase), metaUuid=8F012B0361F7E9F5D1C016CD18269D03, hostId=6ED2F093, count=1186
metric=regionserver.TableLatencies.Namespace_hbase_table_namespace_metric_getTime_max (app=hbase), metaUuid=8F230CD08B98C9F5BACCCC919E08EF37, hostId=6ED2F093, count=1233
metric=master.AssignmentManager.SplitTime_99th_percentile (app=hbase), metaUuid=8F387A4935D1BFD8B70671A03574DA08, hostId=6ED2F093, count=1186
metric=dfs.namenode.CreateFileOps (app=namenode), metaUuid=8F4CB37CAF3D248D1B9E818A3A9A4DB9, hostId=6ED2F093, count=1195
metric=master.AssignmentManager.SplitTime_25th_percentile (app=hbase), metaUuid=8F5FE8D990752BB0FE5838716F8CF2A8, hostId=6ED2F093, count=1186
metric=regionserver.TableLatencies.Namespace_hbase_table_meta_metric_tableWriteQueryPerSecond_mean_rate (app=hbase), metaUuid=8F6026DF55E178E6003A14EB76F5FDE1, hostId=6ED2F093, count=1233
metric=Phoenix,sub=CLIENT.PHOENIX.COUNT_RPC_CALLS (app=hbase), metaUuid=8F67FABD8ED5925001451CE038CC737E, hostId=6ED2F093, count=1181
metric=jvm.JvmMetrics.MemNonHeapCommittedM (app=jobhistoryserver), metaUuid=8F9B3D1E8283A0B97314CCCC0F5E81E6, hostId=9CDC8F97, count=1201
metric=regionserver.Server.Get_median (app=hbase), metaUuid=8F9D64CAB70C7167F94C81F45C62D855, hostId=6ED2F093, count=1189
metric=regionserver.Server.Append_75th_percentile (app=hbase), metaUuid=8FC32CBF667B48B5EDF336EFA3CAD0A7, hostId=6ED2F093, count=1189
metric=regionserver.Replication.source.shippedKBs (app=hbase), metaUuid=8FFFF6592ABA165802547C415FCF0EF2, hostId=6ED2F093, count=1282
metric=dfs.datanode.WriteBlockOpAvgTime (app=datanode), metaUuid=902AE34E673D88EF6058F71C8B807283, hostId=2D31224D, count=1206
metric=dfs.datanode.WriteBlockOpAvgTime (app=datanode), metaUuid=902AE34E673D88EF6058F71C8B807283, hostId=6ED2F093, count=1200
metric=dfs.datanode.WriteBlockOpAvgTime (app=datanode), metaUuid=902AE34E673D88EF6058F71C8B807283, hostId=9CDC8F97, count=1198
metric=master.Quotas.SnapshotObserverSizeComputationTime_99th_percentile (app=hbase), metaUuid=902B2D799CE3A99664F540CD9BD0C166, hostId=6ED2F093, count=1188
metric=regionserver.Memory.UnblockedFlushes_75th_percentile (app=hbase), metaUuid=9045848B27281E7533E6619F37C4073A, hostId=6ED2F093, count=1180
metric=regionserver.TableLatencies.Namespace_hbase_table_namespace_metric_putTime_99th_percentile (app=hbase), metaUuid=9056CA638E1B1C16BA4C63B2DA9FA1D1, hostId=6ED2F093, count=1233
metric=phoenix.PhoenixIndexer.PreIndexUpdateFailureTime_min (app=hbase), metaUuid=907C47967137447E2A7378A9798E5E3B, hostId=6ED2F093, count=1180
metric=regionserver.RegionServer.RequestSize_95th_percentile (app=hbase), metaUuid=90B09D0918D9F253ECEF36D0A13C3EC4, hostId=6ED2F093, count=1182
metric=master.FileSystem.MetaHlogSplitSize_median (app=hbase), metaUuid=90D15E688DABE90DCF48BA352B99B1D5, hostId=6ED2F093, count=1189
metric=rpcdetailed.rpcdetailed.client.DeleteNumOps (app=namenode), metaUuid=910706EE8C42C053FE515374D3111073, hostId=6ED2F093, count=1197
metric=regionserver.RegionServer.authenticationSuccesses (app=hbase), metaUuid=917DF5CB20E7E390DB2C228595C7D70B, hostId=6ED2F093, count=1182
metric=metricssystem.MetricsSystem.Sink_timelineNumOps (app=namenode), metaUuid=9189EA9D6FF8DF2C54E55041A9F5BAAD, hostId=6ED2F093, count=1184
metric=default.StartupProgress.LoadingFsImageElapsedTime (app=namenode), metaUuid=91A71853173028B621AD0AC5D667641E, hostId=6ED2F093, count=1194
metric=thrift-one.Thrift.PauseTimeWithGc_25th_percentile (app=hbase), metaUuid=91B6289FC72894F529D073BA50B561BC, hostId=6ED2F093, count=1197
metric=regionserver.Server.CompactionOutputSize_median (app=hbase), metaUuid=91C34FCAF4C1ECE868FFB9B46515D488, hostId=6ED2F093, count=1189
metric=regionserver.TableLatencies.Namespace_hbase_table_namespace_metric_checkAndDeleteTime_99th_percentile (app=hbase), metaUuid=91C866A2A040465E233C9DF9B1125C37, hostId=6ED2F093, count=1233
metric=dfs.FSNamesystem.NumInServiceLiveDataNodes (app=namenode), metaUuid=91DBACACE69DB70033479CF0D625C2D4, hostId=6ED2F093, count=1180
metric=regionserver.WAL.SyncTime_95th_percentile (app=hbase), metaUuid=91E88EEEB234566CF69986D7ED8A6269, hostId=6ED2F093, count=2435
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.TASK_metric_scanTime_99.9th_percentile (app=hbase), metaUuid=91F64A35CFAEC3CB6EAA3EF9880D3EDB, hostId=6ED2F093, count=1233
metric=regionserver.TableLatencies.Namespace_hbase_table_namespace_metric_appendTime_mean (app=hbase), metaUuid=91F8367D711A164D11AA1F28CAEF91E5, hostId=6ED2F093, count=1233
metric=yarn.PartitionQueueMetrics.Queue=root.default.ActiveApplications (app=resourcemanager), metaUuid=920ED0E8A036792D70F4B75AE8D5CCDB, hostId=6ED2F093, count=1192
metric=jvm.JvmMetrics.ThreadsRunnable (app=hbase), metaUuid=9213810464DDC0D7B4A9205AB3EEC762, hostId=6ED2F093, count=3688
metric=regionserver.Memory.UnblockedFlushes_99th_percentile (app=hbase), metaUuid=92197BC9219F0091BBD4FECAED3AEB1B, hostId=6ED2F093, count=1180
metric=ugi.UgiMetrics.LoginSuccessAvgTime (app=hbase), metaUuid=922D24BF58C4859B5A7FEC87C2B6A0E8, hostId=6ED2F093, count=3579
metric=master.AssignmentManager.MergeTime_25th_percentile (app=hbase), metaUuid=9234FCAC86AADFBCA9A2AE282022DFC9, hostId=6ED2F093, count=1186
metric=sdisk_loop0_write_time (app=HOST), metaUuid=92430B7C874FF94C00480DB5B624482B, hostId=2D31224D, count=1439
metric=sdisk_loop0_write_time (app=HOST), metaUuid=92430B7C874FF94C00480DB5B624482B, hostId=6ED2F093, count=1439
metric=sdisk_loop0_write_time (app=HOST), metaUuid=92430B7C874FF94C00480DB5B624482B, hostId=9CDC8F97, count=1439
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# ① 按主机分组 —— 一台主机上的多个指标
以 hostId=6ED2F093
为例,这台主机同时运行了 HBase RegionServer 和 NameNode 相关组件。
同一个 hostId 下可以找到多个不同的指标:
metric=regionserver.Server.blockCacheSize (app=hbase), metaUuid=8D089CB0..., hostId=6ED2F093
metric=regionserver.Memory.IncreaseMemStoreSize_98th_percentile (app=hbase), metaUuid=8DD077F5..., hostId=6ED2F093
metric=regionserver.TableLatencies.Namespace_default_table_SYSTEM.SEQUENCE_metric_checkAndPutTime_mean (app=hbase), metaUuid=8C9E2D27..., hostId=6ED2F093
metric=dfs.FSNamesystem.CapacityUsedNonDFS (app=namenode), metaUuid=8DAEB959..., hostId=6ED2F093
metric=rpc.rpc.client.NumDroppedConnections (app=namenode), metaUuid=8E156C74..., hostId=6ED2F093
2
3
4
5
可以看到:
- RegionServer 部分关注表延迟、缓存大小、MemStore 内存;
- NameNode 部分则记录了存储用量、RPC 连接情况;
- 但它们共享同一个 hostId,说明都属于同一台物理/逻辑主机。
👉 这里体现了 “一个 hostId 对应多个 metaUuid” 的逻辑。
# ② 按指标分组 —— 一个指标跨多台主机
再看另一个场景:同一个指标在多台主机上都有采集。
以 dfs.FsVolume.TotalDataFileIos
为例:
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC..., hostId=2D31224D
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC..., hostId=6ED2F093
metric=dfs.FsVolume.TotalDataFileIos (app=datanode), metaUuid=8CA477CC..., hostId=9CDC8F97
2
3
这里:
- metaUuid 相同 → 说明是同一个指标定义(磁盘 IO 次数);
- hostId 不同 → 说明该指标在三台 DataNode 主机上都有上报;
- 最终形成了“一指标,多主机”的监控数据集合。
👉 这里体现了 “一个 metaUuid 对应多个 hostId” 的逻辑。
# ③ 更多典型组合
为了更直观,我们再看几个常见指标:
指标名称 | metaUuid | 主机分布 (hostId) | 说明 |
---|---|---|---|
jvm.JvmMetrics.ThreadsNew | 8E1F69B8... | 2D31224D / 6ED2F093 / 9CDC8F97 | JVM 新建线程数,三台 DataNode 都有 |
ugi.UgiMetrics.RenewalFailuresTotal | 8DCF5C72... | 2D31224D / 6ED2F093 / 9CDC8F97 | UGI 认证失败次数,分布在多台主机 |
regionserver.Server.blockCacheSize | 8D089CB0... | 6ED2F093 | HBase 缓存大小,仅出现在 RegionServer 节点 |
通过这些案例,我们能更清晰地看到:
- JVM 和 UGI 类指标,属于通用型 → 所有 DataNode 主机都会上报;
- RegionServer 缓存指标则只存在于 RegionServer 节点 → 因此只有单个 hostId。
- 01
- [/metrics/metadata] — 元数据查询和使用 GET09-12
- 02
- [/metrics/metadata] — 请求完整链路解读09-12
- 03
- [/metrics/metadata] — 缓存数据装载 Phoenix09-12