pinpoint-apm/pinpoint · error · RuntimeException

No Such Metric

Error message

No Such Metric

What it means

Sentinel RuntimeException in SystemMetricDataServiceImpl.selectAll: a metric field's data type is neither the recognized counter (Long) nor gauge (Double) type, so no DAO branch applies — an unregistered/unsupported metric data type in the basic group definition.

Solutions

  1. Extend SystemMetricDataTypeService to map the metric's field type
  2. Fix the metric definition YML so field types match supported types
  3. Add a new DAO branch for the missing data type
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/SystemMetricDataServiceImpl.java:133 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/7d38956c98019152. Report an issue: GitHub.

Appendix: source

Thrown at metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/SystemMetricDataServiceImpl.java:133

            return metricValueList;
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
    }

    private List<QueryResult<Number>> selectAll(MetricDataSearchKey metricDataSearchKey, Metric elementOfBasicGroupList, List<Tag> tags) {
        List<QueryResult<? extends Number>> invokeList = new ArrayList<>();
        for (Field field : elementOfBasicGroupList.getFields()) {
            MetricDataName metricDataName = new MetricDataName(metricDataSearchKey.getMetricName(), field.getName());
            MetricDataType metricDataType = systemMetricDataTypeService.getMetricDataType(metricDataName);
            List<MetricTag> metricTagList = systemMetricHostInfoService.getTag(metricDataSearchKey, field, tags);

            for (MetricTag metricTag : metricTagList) {
                if (MetricDataType.DOUBLE == metricDataType) {
                    CompletableFuture<List<DataPoint<Double>>> doubleFuture = systemMetricDoubleDao.getAsyncSampledSystemMetricData(metricDataSearchKey, metricTag);
                    invokeList.add(new QueryResult<>(metricDataType, doubleFuture, metricTag));
                } else {
                    throw new RuntimeException("No Such Metric");
                }
            }
        }
        return (List<QueryResult<Number>>)(List<?>) invokeList;
    }

    private record QueryResult<T extends Number>(MetricDataType type, CompletableFuture<List<DataPoint<T>>> future, MetricTag tag) {
    }


    private List<MetricValueGroup<? extends Number>> groupingMetricValue(List<MetricValue<?>> metricValueList, GroupingRule groupingRule) {
        if (GroupingRule.TAG == groupingRule) {
            return groupingByTag(metricValueList);
        }
        throw new UnsupportedOperationException("unsupported groupingRule :" + groupingRule);
    }

    private List<MetricValueGroup<? extends Number>> groupingByTag(List<MetricValue<? extends Number>> metricValueList) {

View on GitHub (pinned to 744c3d3075)