@marinade.finance/nestjs-apollo-prometheus
v1.0.0
Published
Prometheus metrics plugin for Apollo GraphQL in NestJS
Readme
@marinade.finance/nestjs-apollo-prometheus
Prometheus metrics plugin for Apollo Server 4 in NestJS applications.
Separate package due to @apollo/server and prom-client peer dependencies.
Installation
pnpm add @marinade.finance/nestjs-apollo-prometheusPeer Dependencies
pnpm add @nestjs/common @nestjs/apollo @apollo/server prom-clientUsage
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo'
import { ApolloPrometheusModule } from '@marinade.finance/nestjs-apollo-prometheus'
@Module({
imports: [
ApolloPrometheusModule.forRoot(() => ({
prefix: 'graphql',
})),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: true,
}),
],
})
export class AppModule {}Async Configuration
ApolloPrometheusModule.forRoot(async () => {
const prefix = await loadPrefix()
return { prefix }
})Configuration
interface ApolloPrometheusConfig {
// Metric name prefix (default: 'graphql')
prefix?: string
// Custom metric names
metrics?: {
operationsTotal?: string // default: 'operations_total'
operationDuration?: string // default: 'operation_duration_seconds'
}
// Duration histogram buckets in seconds
// default: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]
durationBuckets?: number[]
// Skip tracking introspection queries (default: true)
skipIntrospection?: boolean
}Metrics
Operations Counter
{prefix}_operations_total (default: graphql_operations_total)
Labels: operation_name, operation_type, status
Duration Histogram
{prefix}_operation_duration_seconds (default: graphql_operation_duration_seconds)
Labels: operation_name, operation_type
Querying
# Total operations by type
sum by (operation_type) (graphql_operations_total)
# Error rate
rate(graphql_operations_total{status="error"}[5m])
# 95th percentile latency
histogram_quantile(0.95, rate(graphql_operation_duration_seconds_bucket[5m]))License
See repository root for license information.
