v1
Serve
Features
Monitoring/Tracing
Prometheus

Prometheus

Prometheus is a platform for scraping metrics from services and utilities. You can use @graphql-mesh/plugin-prometheus plugin to expose and collect metrics from all phases of your GraphQL execution including internal query planning and outgoing HTTP requests.

This plugin tracks the complete gateway execution flow and exposes the following metrics:

  • Successful requests (requestCount)
  • Request summary (requestSummary)
  • errors (categorized by phase)
  • resolvers tracing and runtime
  • deprecated fields usage
  • count of graphql operations
  • parse execution time
  • validate execution time
  • contextBuilding execution time
  • execute execution time
  • Latency of outgoing HTTP request
  • Latency of the delegation to the individual sources

Getting Started

npm i @graphql-mesh/plugin-prometheus prom-client

Example Configuration

mesh.config.ts
import usePrometheus from '@graphql-mesh/plugin-prometheus'
import { defineConfig as defineServeConfig } from '@graphql-mesh/serve-cli'
 
export const serveConfig = defineServeConfig({
  plugins: pluginCtx => [
    usePrometheus({
      ...pluginCtx,
 
      // all optional, and by default, all set to false, please opt-in to the metrics you wish to get
 
      // requires `execute` to be true
      requestCount: true,
      // requires `execute` to be true
      requestSummary: true,
      parse: true,
      validate: true,
      contextBuilding: true,
      execute: true,
      errors: true,
 
      // reports metrics for the delegation to the individual sources
      delegation: true,
 
      // reports metrics for the outgoing HTTP requests
      fetchMetrics: true,
      // Adds the request headers to the metrics
      fetchRequestHeaders: true,
      // Adds the response headers to the metrics
      fetchResponseHeaders: true,
 
      // Reports metrics for the incoming HTTP requests (this sets a custom name for http)
      // If you pass a string instead of boolean, it will be used as the name of the metric
      http: 'my-http-duration-metric',
      // Adds the request headers to the metrics
      httpRequestHeaders: true,
      // Adds the response headers to the metrics
      httpResponseHeaders: true,
 
      // by default all fields are reported
      deprecatedFields: true,
      // the path of the endpoint to expose the metrics, default is /metrics
      endpoint: '/metrics'
    })
  ]
})

Custom Registry

You can customize the client’s registry by passing a custom registry to the registry option.

mesh.config.ts
import { Registry } from 'prom-client'
import usePrometheus from '@graphql-mesh/plugin-prometheus'
import { defineConfig as defineServeConfig } from '@graphql-mesh/serve-cli'
 
const myRegistry = new Registry()
 
export const serveConfig = defineServeConfig({
  plugins: pluginCtx => [
    usePrometheus({
      ...pluginCtx,
      registry: myRegistry
    })
  ]
})