MATIH Platform is in active MVP development. Documentation reflects current implementation status.
8. Platform Services
Custom Metrics

Custom Metrics

The CustomMetricsController allows tenants to define, register, and query custom metrics beyond the platform's built-in metrics. Custom metrics enable application-level observability for business KPIs, feature usage, and domain-specific measurements.


Register a Custom Metric

Endpoint: POST /api/v1/observability/custom-metrics

curl -X POST http://localhost:8088/api/v1/observability/custom-metrics \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "X-Tenant-ID: 550e8400" \
  -d '{
    "name": "conversation_satisfaction_score",
    "type": "gauge",
    "description": "Average user satisfaction score for AI conversations",
    "unit": "score",
    "labels": ["service", "model"],
    "aggregation": "average"
  }'

CustomMetric Structure

FieldTypeDescription
idStringMetric identifier
nameStringMetric name (Prometheus-compatible)
typeStringcounter, gauge, histogram, summary
descriptionStringHuman-readable description
unitStringUnit of measurement
labelsListLabel names for the metric
aggregationStringDefault aggregation method
retentionDaysintHow long to retain the metric data

Metric Types

TypeDescriptionUse Case
counterMonotonically increasing valueTotal requests, errors, events
gaugeValue that can go up or downCurrent temperature, queue depth
histogramDistribution of values in bucketsRequest duration, payload sizes
summaryQuantile calculationsResponse time percentiles

Record Metric Data

Endpoint: POST /api/v1/observability/custom-metrics/:metricName/data

curl -X POST http://localhost:8088/api/v1/observability/custom-metrics/conversation_satisfaction_score/data \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "X-Tenant-ID: 550e8400" \
  -d '{
    "value": 4.5,
    "labels": {
      "service": "ai-service",
      "model": "gpt-4"
    },
    "timestamp": "2026-02-12T10:30:00Z"
  }'

Query Custom Metrics

Endpoint: GET /api/v1/observability/custom-metrics/:metricName/query

ParameterTypeDefaultDescription
startInstant1 hour agoQuery start time
endInstantnowQuery end time
stepString1mStep interval
aggregationStringmetric defaultAggregation function
labelsMapnoneLabel filters

Custom Metric Management

MethodPathDescription
POST/api/v1/observability/custom-metricsRegister custom metric
GET/api/v1/observability/custom-metricsList custom metrics
GET/api/v1/observability/custom-metrics/:metricNameGet metric definition
DELETE/api/v1/observability/custom-metrics/:metricNameDelete custom metric
POST/api/v1/observability/custom-metrics/:metricName/dataRecord metric data
GET/api/v1/observability/custom-metrics/:metricName/queryQuery metric data

Naming Conventions

Custom metrics should follow Prometheus naming conventions:

  • Use snake_case
  • Include a unit suffix (e.g., _seconds, _bytes, _total)
  • Prefix with a namespace (e.g., matih_custom_)
  • Avoid high-cardinality labels (keep label values bounded)