Files
sell/middlelayer/monitoring/metrics.ts

91 lines
2.2 KiB
TypeScript

import { Registry, Counter, Histogram, Gauge } from 'prom-client';
/**
* Prometheus Metrics Registry
* Sammelt Metriken für Monitoring und Alerting
*/
export const register = new Registry();
// Default Metrics (CPU, Memory, etc.)
register.setDefaultLabels({
app: 'graphql-middlelayer',
});
// Query Metrics
export const queryCounter = new Counter({
name: 'graphql_queries_total',
help: 'Total number of GraphQL queries',
labelNames: ['operation', 'status'],
registers: [register],
});
export const queryDuration = new Histogram({
name: 'graphql_query_duration_seconds',
help: 'Duration of GraphQL queries in seconds',
labelNames: ['operation'],
buckets: [0.01, 0.05, 0.1, 0.5, 1, 2, 5],
registers: [register],
});
// Cache Metrics
export const cacheHits = new Counter({
name: 'cache_hits_total',
help: 'Total number of cache hits',
labelNames: ['cache_type'],
registers: [register],
});
export const cacheMisses = new Counter({
name: 'cache_misses_total',
help: 'Total number of cache misses',
labelNames: ['cache_type'],
registers: [register],
});
// DataService Metrics
export const dataServiceCalls = new Counter({
name: 'dataservice_calls_total',
help: 'Total number of DataService calls',
labelNames: ['method', 'status'],
registers: [register],
});
export const dataServiceDuration = new Histogram({
name: 'dataservice_duration_seconds',
help: 'Duration of DataService calls in seconds',
labelNames: ['method'],
buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1],
registers: [register],
});
// Error Metrics
export const errorCounter = new Counter({
name: 'errors_total',
help: 'Total number of errors',
labelNames: ['type', 'operation'],
registers: [register],
});
// Active Connections
export const activeConnections = new Gauge({
name: 'active_connections',
help: 'Number of active connections',
registers: [register],
});
// Query Complexity
export const queryComplexityGauge = new Gauge({
name: 'graphql_query_complexity',
help: 'Complexity of GraphQL queries',
labelNames: ['operation'],
registers: [register],
});
/**
* Exportiert Metriken im Prometheus-Format
*/
export async function getMetrics(): Promise<string> {
return register.metrics();
}