mastra-ai/mastra · warning · MastraError

OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED

OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED

Error message

This storage provider does not support metric label key discovery

What it means

MastraError OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED. The base observability storage class provides no default getMetricLabelKeys implementation, so any provider that has not overridden it throws this error. It signals that label key discovery for metrics is an unimplemented capability in the configured storage backend.

Source

Thrown at packages/core/src/storage/domains/observability/base.ts:499

      text: 'This storage provider does not support metric percentiles',
    });
  }

  // ============================================================================
  // Discovery / Metadata Methods
  // ============================================================================

  async getMetricNames(_args: GetMetricNamesArgs): Promise<GetMetricNamesResponse> {
    throw new MastraError({
      id: 'OBSERVABILITY_STORAGE_GET_METRIC_NAMES_NOT_IMPLEMENTED',
      domain: ErrorDomain.MASTRA_OBSERVABILITY,
      category: ErrorCategory.SYSTEM,
      text: 'This storage provider does not support metric name discovery',
    });
  }

  async getMetricLabelKeys(_args: GetMetricLabelKeysArgs): Promise<GetMetricLabelKeysResponse> {
    throw new MastraError({
      id: 'OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED',
      domain: ErrorDomain.MASTRA_OBSERVABILITY,
      category: ErrorCategory.SYSTEM,
      text: 'This storage provider does not support metric label key discovery',
    });
  }

  async getMetricLabelValues(_args: GetMetricLabelValuesArgs): Promise<GetMetricLabelValuesResponse> {
    throw new MastraError({
      id: 'OBSERVABILITY_STORAGE_GET_LABEL_VALUES_NOT_IMPLEMENTED',
      domain: ErrorDomain.MASTRA_OBSERVABILITY,
      category: ErrorCategory.SYSTEM,
      text: 'This storage provider does not support label value discovery',
    });
  }

  async getEntityTypes(_args: GetEntityTypesArgs): Promise<GetEntityTypesResponse> {
    throw new MastraError({

View on GitHub (pinned to 75dd419e61)

Solutions

  1. Use a storage provider that implements getMetricLabelKeys
  2. Override getMetricLabelKeys in your storage domain class to return persisted label keys
  3. Catch this error and fall back to hardcoded or empty label-key lists in the UI

Example fix

// before
const keys = await storage.getMetricLabelKeys({ metricName });
// after
let keys = [];
try {
  keys = (await storage.getMetricLabelKeys({ metricName })).labelKeys ?? [];
} catch (e) {
  if (e.id !== 'OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED') throw e;
}
Defensive patterns

Strategy: fallback

Validate before calling

async function supportsLabelKeys(storage) {
  try { await storage.getMetricLabelKeys({}); return true; }
  catch (e) { return e?.id === 'OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED' ? false : true; }
}

Type guard

function isNotImplementedError(e: unknown): e is MastraError {
  return e instanceof MastraError && e.id === 'OBSERVABILITY_STORAGE_GET_METRIC_LABEL_KEYS_NOT_IMPLEMENTED';
}

Try / catch

try {
  const res = await storage.getMetricLabelKeys(args);
} catch (e) {
  if (isNotImplementedError(e)) return { labelKeys: [] };
  throw e;
}

Prevention

When it happens

Trigger: Calling getMetricLabelKeys(args) on a storage instance that extends MastraObservabilityStorage without overriding the method.

Common situations: Custom or lightweight storage adapters used with observability metrics; older storage provider versions that shipped before label-key discovery was added; frontend metric explorers fetching label keys from a backend without the capability.

Related errors


AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30). Data as JSON: /api/errors/25d3a31e16944ab8. Report an issue: GitHub.