apache/seatunnel · warning

Found unassigned metric entries for table ' ' metric ' '…

Error message

Found {} unassigned metric entries for table '{}' metric '{}', using table name key only for these entries

What it means

During per-table metric aggregation, some raw metric entries could not be mapped to any known vertex identifier (unassignedMetrics). processMetric() logs this warning with the count, table, and metric name, and stores these entries under the plain table-name key so the data is not lost, at the cost of losing per-vertex attribution.

Solutions

  1. Compare the unassigned metric identifiers in raw job metrics against the vertexIdentifiers the REST service derives to spot naming drift.
  2. Ensure all nodes run the same SeaTunnel version (metric identifier formats changed across versions).
  3. Check for leftover metrics from a previous run of the same job ID and clean/ignore stale metrics.
  4. Accept the fallback if table-level totals suffice; data is preserved under the table-name key.
Defensive patterns

Strategy: fallback

Validate before calling

// reconcile raw metric identifiers against derived vertex identifiers
Set<String> unknown = rawIds.stream().filter(id -> !vertexIdentifiers.contains(id)).collect(toSet());
if (!unknown.isEmpty()) { handle or log before aggregation; }

Prevention

When it happens

Trigger: Metric payload contains entries whose identifiers don't match the computed vertexIdentifiers for the table — e.g. identifiers from vertices not in the current DAG config, or naming/format drift between the metrics store and the service's identifier construction.

Common situations: Engine version mismatch between the node writing metrics and the REST service parsing them; job restarted with different parallelism so old identifier entries remain; dynamic table/vertex naming changes.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/f0157234c7bf1eb8. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/BaseService.java:879

                                        metricName,
                                        identifier + "." + tableName,
                                        metricsByIdentifier.get(identifier),
                                        tableMetricsMaps);
                            });

            if (vertexIdentifiers.size() > 1
                    && metricsByIdentifier.size() < vertexIdentifiers.size()) {
                log.warn(
                        "Some vertices may not be reporting metrics yet for table '{}': expected {} vertices {}, but only received metrics for {} vertices {}",
                        tableName,
                        vertexIdentifiers.size(),
                        vertexIdentifiers,
                        metricsByIdentifier.size(),
                        metricsByIdentifier.keySet());
            }

            if (unassignedMetrics != null && unassignedMetrics.size() > 0) {
                log.warn(
                        "Found {} unassigned metric entries for table '{}' metric '{}', using table name key only for these entries",
                        unassignedMetrics.size(),
                        tableName,
                        metricName);
                putMetricToMap(metricName, tableName, unassignedMetrics, tableMetricsMaps);
            }
            return;
        }

        // Fallback for legacy/simplified metric nodes without tags (mainly in tests or older
        // outputs).
        int arraySize = metricNode.size();
        if (vertexIdentifiers.size() > 1) {
            if (arraySize == vertexIdentifiers.size()) {
                for (int i = 0; i < arraySize; i++) {
                    String identifier = vertexIdentifiers.get(i);
                    String metricKey = identifier + "." + tableName;
                    JsonNode element = metricNode.get(i);

View on GitHub (pinned to cf67b549a7)