This is an automated email from the ASF dual-hosted git repository.
jinsongzhou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push:
new 702e94321 [AMORO-3707] Add group tag to table metrics (#3708)
702e94321 is described below
commit 702e9432183ad7406150ee5172c8c2b206827a2b
Author: Marig_Weizhi <[email protected]>
AuthorDate: Tue Aug 5 19:36:48 2025 +0800
[AMORO-3707] Add group tag to table metrics (#3708)
* Add group tag to table metrics
* add group tag for TableOptimizingMetrics
---
.../amoro/server/table/DefaultOptimizingState.java | 5 +-
.../amoro/server/table/TableOptimizingMetrics.java | 84 +++++++++++++++-------
.../table/TableOrphanFilesCleaningMetrics.java | 2 +-
docs/user-guides/metrics.md | 46 ++++++------
4 files changed, 87 insertions(+), 50 deletions(-)
diff --git
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultOptimizingState.java
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultOptimizingState.java
index 1953049a6..c4b2993fd 100644
---
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultOptimizingState.java
+++
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultOptimizingState.java
@@ -113,7 +113,7 @@ public class DefaultOptimizingState extends
StatedPersistentBase implements Proc
this.tableConfiguration = TableConfigurations.parseTableConfig(properties);
this.optimizerGroup =
tableConfiguration.getOptimizingConfig().getOptimizerGroup();
persistTableRuntime();
- optimizingMetrics = new TableOptimizingMetrics(tableIdentifier);
+ optimizingMetrics = new TableOptimizingMetrics(tableIdentifier,
optimizerGroup);
orphanFilesCleaningMetrics = new
TableOrphanFilesCleaningMetrics(tableIdentifier);
tableSummaryMetrics = new TableSummaryMetrics(tableIdentifier);
}
@@ -151,7 +151,7 @@ public class DefaultOptimizingState extends
StatedPersistentBase implements Proc
: tableRuntimeMeta.getTableStatus();
this.pendingInput = tableRuntimeMeta.getPendingInput();
this.tableSummary = tableRuntimeMeta.getTableSummary();
- optimizingMetrics = new TableOptimizingMetrics(tableIdentifier);
+ optimizingMetrics = new TableOptimizingMetrics(tableIdentifier,
optimizerGroup);
optimizingMetrics.statusChanged(optimizingStatus,
this.currentStatusStartTime);
optimizingMetrics.lastOptimizingTime(OptimizingType.MINOR,
this.lastMinorOptimizingTime);
optimizingMetrics.lastOptimizingTime(OptimizingType.MAJOR,
this.lastMajorOptimizingTime);
@@ -439,6 +439,7 @@ public class DefaultOptimizingState extends
StatedPersistentBase implements Proc
optimizingProcess.close();
}
this.optimizerGroup =
newTableConfig.getOptimizingConfig().getOptimizerGroup();
+ this.optimizingMetrics.optimizerGroupChanged(optimizerGroup);
}
this.tableConfiguration = newTableConfig;
return true;
diff --git
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
index 4e4452eba..e92685e07 100644
---
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
+++
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
@@ -24,12 +24,15 @@ import static
org.apache.amoro.metrics.MetricDefine.defineGauge;
import org.apache.amoro.ServerTableIdentifier;
import org.apache.amoro.metrics.Counter;
import org.apache.amoro.metrics.Gauge;
+import org.apache.amoro.metrics.Metric;
import org.apache.amoro.metrics.MetricDefine;
+import org.apache.amoro.metrics.MetricKey;
import org.apache.amoro.optimizing.OptimizingType;
import org.apache.amoro.server.AmoroServiceConstants;
import org.apache.amoro.server.metrics.MetricRegistry;
import org.apache.amoro.server.optimizing.OptimizingStatus;
import org.apache.amoro.server.optimizing.maintainer.IcebergTableMaintainer;
+import org.apache.amoro.shade.guava32.com.google.common.collect.ImmutableMap;
import org.apache.amoro.shade.guava32.com.google.common.primitives.Longs;
import org.apache.iceberg.Snapshot;
import org.apache.iceberg.SnapshotSummary;
@@ -55,142 +58,142 @@ public class TableOptimizingMetrics extends
AbstractTableMetrics {
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IDLE_DURATION =
defineGauge("table_optimizing_status_idle_duration_mills")
.withDescription("Duration in milliseconds after table be in idle
status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_PENDING_DURATION =
defineGauge("table_optimizing_status_pending_duration_mills")
.withDescription("Duration in milliseconds after table be in pending
status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_PLANNING_DURATION =
defineGauge("table_optimizing_status_planning_duration_mills")
.withDescription("Duration in milliseconds after table be in
planning status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_EXECUTING_DURATION =
defineGauge("table_optimizing_status_executing_duration_mills")
.withDescription("Duration in milliseconds after table be in
executing status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_COMMITTING_DURATION
=
defineGauge("table_optimizing_status_committing_duration_mills")
.withDescription("Duration in milliseconds after table be in
committing status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
// table optimizing process count metrics
public static final MetricDefine TABLE_OPTIMIZING_PROCESS_TOTAL_COUNT =
defineCounter("table_optimizing_process_total_count")
.withDescription("Count of all optimizing process since ams started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_PROCESS_FAILED_COUNT =
defineCounter("table_optimizing_process_failed_count")
.withDescription("Count of failed optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_MINOR_TOTAL_COUNT =
defineCounter("table_optimizing_minor_total_count")
.withDescription("Count of minor optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_MINOR_FAILED_COUNT =
defineCounter("table_optimizing_minor_failed_count")
.withDescription("Count of failed minor optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_MAJOR_TOTAL_COUNT =
defineCounter("table_optimizing_major_total_count")
.withDescription("Count of major optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_MAJOR_FAILED_COUNT =
defineCounter("table_optimizing_major_failed_count")
.withDescription("Count of failed major optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_FULL_TOTAL_COUNT =
defineCounter("table_optimizing_full_total_count")
.withDescription("Count of full optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_FULL_FAILED_COUNT =
defineCounter("table_optimizing_full_failed_count")
.withDescription("Count of failed full optimizing process since ams
started")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
// table optimizing process status metrics
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IN_IDLE =
defineGauge("table_optimizing_status_in_idle")
.withDescription("If currently table is in idle status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IN_PENDING =
defineGauge("table_optimizing_status_in_pending")
.withDescription("If currently table is in pending status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IN_PLANNING =
defineGauge("table_optimizing_status_in_planning")
.withDescription("If currently table is in planning status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IN_EXECUTING =
defineGauge("table_optimizing_status_in_executing")
.withDescription("If currently table is in executing status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_STATUS_IN_COMMITTING =
defineGauge("table_optimizing_status_in_committing")
.withDescription("If currently table is in committing status")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine
TABLE_OPTIMIZING_SINCE_LAST_MINOR_OPTIMIZATION =
defineGauge("table_optimizing_since_last_minor_optimization_mills")
.withDescription("Duration in milliseconds since last successful
minor optimization")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine
TABLE_OPTIMIZING_SINCE_LAST_MAJOR_OPTIMIZATION =
defineGauge("table_optimizing_since_last_major_optimization_mills")
.withDescription("Duration in milliseconds since last successful
major optimization")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine
TABLE_OPTIMIZING_SINCE_LAST_FULL_OPTIMIZATION =
defineGauge("table_optimizing_since_last_full_optimization_mills")
.withDescription("Duration in milliseconds since last successful
full optimization")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_SINCE_LAST_OPTIMIZATION =
defineGauge("table_optimizing_since_last_optimization_mills")
.withDescription("Duration in milliseconds since last successful
optimization")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
public static final MetricDefine TABLE_OPTIMIZING_LAG_DURATION =
defineGauge("table_optimizing_lag_duration_mills")
.withDescription(
"Duration in milliseconds between last self-optimizing snapshot
and refreshed snapshot")
- .withTags("catalog", "database", "table")
+ .withTags("catalog", "database", "table", "group")
.build();
private final Counter processTotalCount = new Counter();
@@ -208,8 +211,29 @@ public class TableOptimizingMetrics extends
AbstractTableMetrics {
private long lastNonMaintainedTime = AmoroServiceConstants.INVALID_TIME;
private long lastOptimizingTime = AmoroServiceConstants.INVALID_TIME;
- public TableOptimizingMetrics(ServerTableIdentifier identifier) {
+ private String optimizerGroup;
+
+ public TableOptimizingMetrics(ServerTableIdentifier identifier, String
optimizerGroup) {
super(identifier);
+ this.optimizerGroup = optimizerGroup;
+ }
+
+ @Override
+ protected void registerMetric(MetricRegistry registry, MetricDefine define,
Metric metric) {
+ MetricKey key =
+ registry.register(
+ define,
+ ImmutableMap.of(
+ "catalog",
+ identifier.getCatalog(),
+ "database",
+ identifier.getDatabase(),
+ "table",
+ identifier.getTableName(),
+ "group",
+ optimizerGroup),
+ metric);
+ registeredMetricKeys.add(key);
}
@Override
@@ -288,6 +312,18 @@ public class TableOptimizingMetrics extends
AbstractTableMetrics {
this.statusSetTimestamp = statusSetTimestamp;
}
+ /**
+ * Handle table optimizer group change event.
+ *
+ * @param optimizerGroup new optimizer group name
+ */
+ public void optimizerGroupChanged(String optimizerGroup) {
+ MetricRegistry metricRegistry = globalRegistry;
+ unregister();
+ this.optimizerGroup = optimizerGroup;
+ register(metricRegistry);
+ }
+
/**
* Handle table self optimizing process complete event.
*
diff --git
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
index cc6b0894b..a307eff68 100644
---
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
+++
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
@@ -81,7 +81,7 @@ public class TableOrphanFilesCleaningMetrics extends
AbstractTableMetrics {
}
public void completeOrphanDataFiles(int expected, int cleaned) {
- expectedOrphanMetadataFilesCount.inc(expected);
+ expectedOrphanDataFilesCount.inc(expected);
orphanDataFilesCount.inc(cleaned);
}
diff --git a/docs/user-guides/metrics.md b/docs/user-guides/metrics.md
index 22855f947..ee6c11e21 100644
--- a/docs/user-guides/metrics.md
+++ b/docs/user-guides/metrics.md
@@ -39,29 +39,29 @@ Amoro has supported built-in metrics to measure status of
table self-optimizing
| Metric Name | Type | Tags
| Description
|
|------------------------------------------------------|---------|--------------------------|----------------------------------------------------------------------------------------|
-| table_optimizing_status_idle_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds after table be in idle status
|
-| table_optimizing_status_pending_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds after table be in pending status
|
-| table_optimizing_status_planning_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds after table be in planning status
|
-| table_optimizing_status_executing_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds after table be in executing status
|
-| table_optimizing_status_committing_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds after table be in committing status
|
-| table_optimizing_process_total_count | Counter | catalog,
database, table | Count of all optimizing process since ams started
|
-| table_optimizing_process_failed_count | Counter | catalog,
database, table | Count of failed optimizing process since ams started
|
-| table_optimizing_minor_total_count | Counter | catalog,
database, table | Count of minor optimizing process since ams started
|
-| table_optimizing_minor_failed_count | Counter | catalog,
database, table | Count of failed minor optimizing process since ams started
|
-| table_optimizing_major_total_count | Counter | catalog,
database, table | Count of major optimizing process since ams started
|
-| table_optimizing_major_failed_count | Counter | catalog,
database, table | Count of failed major optimizing process since ams started
|
-| table_optimizing_full_total_count | Counter | catalog,
database, table | Count of full optimizing process since ams started
|
-| table_optimizing_full_failed_count | Counter | catalog,
database, table | Count of failed full optimizing process since ams started
|
-| table_optimizing_status_in_idle | Gauge | catalog,
database, table | If currently table is in idle status
|
-| table_optimizing_status_in_pending | Gauge | catalog,
database, table | If currently table is in pending status
|
-| table_optimizing_status_in_planning | Gauge | catalog,
database, table | If currently table is in planning status
|
-| table_optimizing_status_in_executing | Gauge | catalog,
database, table | If currently table is in executing status
|
-| table_optimizing_status_in_committing | Gauge | catalog,
database, table | If currently table is in committing status
|
-| table_optimizing_since_last_minor_optimization_mills | Gauge | catalog,
database, table | Duration in milliseconds since last successful minor
optimization |
-| table_optimizing_since_last_major_optimization_mills | Gauge | catalog,
database, table | Duration in milliseconds since last successful major
optimization |
-| table_optimizing_since_last_full_optimization_mills | Gauge | catalog,
database, table | Duration in milliseconds since last successful full
optimization |
-| table_optimizing_since_last_optimization_mills | Gauge | catalog,
database, table | Duration in milliseconds since last successful optimization
|
-| table_optimizing_lag_duration_mills | Gauge | catalog,
database, table | Duration in milliseconds between last self-optimizing
snapshot and refreshed snapshot |
+| table_optimizing_status_idle_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds after table be in idle status
|
+| table_optimizing_status_pending_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds after table be in pending
status |
+| table_optimizing_status_planning_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds after table be in planning
status |
+| table_optimizing_status_executing_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds after table be in executing
status |
+| table_optimizing_status_committing_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds after table be in committing
status |
+| table_optimizing_process_total_count | Counter | catalog,
database, table, group | Count of all optimizing process since ams started
|
+| table_optimizing_process_failed_count | Counter | catalog,
database, table, group | Count of failed optimizing process since ams started
|
+| table_optimizing_minor_total_count | Counter | catalog,
database, table, group | Count of minor optimizing process since ams started
|
+| table_optimizing_minor_failed_count | Counter | catalog,
database, table, group | Count of failed minor optimizing process since ams
started |
+| table_optimizing_major_total_count | Counter | catalog,
database, table, group | Count of major optimizing process since ams started
|
+| table_optimizing_major_failed_count | Counter | catalog,
database, table, group | Count of failed major optimizing process since ams
started |
+| table_optimizing_full_total_count | Counter | catalog,
database, table, group | Count of full optimizing process since ams started
|
+| table_optimizing_full_failed_count | Counter | catalog,
database, table, group | Count of failed full optimizing process since ams
started |
+| table_optimizing_status_in_idle | Gauge | catalog,
database, table, group | If currently table is in idle status
|
+| table_optimizing_status_in_pending | Gauge | catalog,
database, table, group | If currently table is in pending status
|
+| table_optimizing_status_in_planning | Gauge | catalog,
database, table, group | If currently table is in planning status
|
+| table_optimizing_status_in_executing | Gauge | catalog,
database, table, group | If currently table is in executing status
|
+| table_optimizing_status_in_committing | Gauge | catalog,
database, table, group | If currently table is in committing status
|
+| table_optimizing_since_last_minor_optimization_mills | Gauge | catalog,
database, table, group | Duration in milliseconds since last successful minor
optimization |
+| table_optimizing_since_last_major_optimization_mills | Gauge | catalog,
database, table, group | Duration in milliseconds since last successful major
optimization |
+| table_optimizing_since_last_full_optimization_mills | Gauge | catalog,
database, table, group | Duration in milliseconds since last successful full
optimization |
+| table_optimizing_since_last_optimization_mills | Gauge | catalog,
database, table, group | Duration in milliseconds since last successful
optimization |
+| table_optimizing_lag_duration_mills | Gauge | catalog,
database, table, group | Duration in milliseconds between last self-optimizing
snapshot and refreshed snapshot |
## Optimizer Group metrics