Set up observability for Miro REST API v2 integrations with Prometheus metrics,
OpenTelemetry traces, structured logging, and Grafana dashboards.
Trigger with phrases like "miro monitoring", "miro metrics",
"miro observability", "monitor miro", "miro alerts", "miro tracing".
Comprehensive monitoring for Miro REST API v2 integrations: Prometheus metrics for request rates and latency, OpenTelemetry traces for request flow, structured logging, and alerting for rate limit and error conditions.
Key Metrics
Metric
Type
Labels
Purpose
miro_requests_total
Counter
method, endpoint, status
Request volume
miro_request_duration_seconds
Histogram
method, endpoint
Latency distribution
miro_errors_total
Counter
error_type, endpoint
Error tracking
miro_rate_limit_remaining
Gauge
—
Credit headroom
miro_rate_limit_credits_used
Gauge
—
Credit consumption
相关技能
miro_webhook_events_total
Counter
event_type, item_type
Webhook volume
miro_token_refresh_total
Counter
status
OAuth health
Prometheus Metrics
import { Registry, Counter, Histogram, Gauge } from 'prom-client';
const registry = new Registry();
registry.setDefaultLabels({ app: 'miro-integration' });
const requestCounter = new Counter({
name: 'miro_requests_total',
help: 'Total Miro REST API v2 requests',
labelNames: ['method', 'endpoint', 'status'] as const,
registers: [registry],
});
const requestDuration = new Histogram({
name: 'miro_request_duration_seconds',
help: 'Miro API request latency',
labelNames: ['method', 'endpoint'] as const,
buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
registers: [registry],
});
const errorCounter = new Counter({
name: 'miro_errors_total',
help: 'Miro API errors by type',
labelNames: ['error_type', 'endpoint'] as const,
registers: [registry],
});
const rateLimitRemaining = new Gauge({
name: 'miro_rate_limit_remaining',
help: 'Miro rate limit credits remaining',
registers: [registry],
});
const rateLimitUsed = new Gauge({
name: 'miro_rate_limit_credits_used',
help: 'Miro rate limit credits used in current window',
registers: [registry],
});
const webhookCounter = new Counter({
name: 'miro_webhook_events_total',
help: 'Miro webhook events received',
labelNames: ['event_type', 'item_type'] as const,
registers: [registry],
});