Docs
Launch GraphOS Studio
Apollo Server 3 is officially deprecated, with end-of-life scheduled for 22 October 2024. Learn more about upgrading to a supported Apollo Server version.

Metrics and logging

How to monitor Apollo Server's performance


integrates seamlessly with Apollo Studio to help you monitor the execution of your . It also provides configurable mechanisms for logging each phase of a GraphQL operation.

Using Federation? Check out the documentation for

.

Sending metrics to Apollo Studio

provides an integrated hub for all of your performance data. It
aggregates and displays information
for your schema, queries, requests, and errors. You can also configure alerts that support
Slack
and
Datadog
integrations.

Connecting to Apollo Studio

To connect to Apollo Studio, first

. To provide this key to , assign it to the APOLLO_KEY environment variable in your server's environment.

Then associate your server instance with a particular ID and

by setting the APOLLO_GRAPH_REF environment variable.

You can set environment variable values on the command line as seen below, or with the

(or similar).

# Replace the example values below with values specific to your use case.
# This example associates your server with the `my-variant` variant of
# the `my-graph` graph.
$ APOLLO_KEY=YOUR_API_KEY APOLLO_GRAPH_REF=my-graph@my-variant \
node start-server.js

Communicating with Studio

By default, aggregates your traces and sends them in batches to Studio every minute. This behavior is highly configurable, and you can change the parameters in the

.

Identifying distinct clients

Apollo Studio's

enables you to view metrics for distinct versions of your clients. To enable this, your clients need to include some or all of the following identifying information in the headers of requests they send to :

IdentifierHeader Name (default)Example Value
Client nameapollographql-client-nameiOS Native
Client versionapollographql-client-version1.0.1

Each of these can have any string value that's useful for your application. To simplify the browsing and sorting of your client data in Studio, a three-part version number (such as 1.0.1) is recommended for client versions.

Client version is not tied to your current version of (or any other client library). You define this value and are responsible for updating it whenever meaningful changes are made to your client.

Setting client awareness headers in Apollo Client

If you're using , you can set default values for client name and version in the

. All requests to will automatically include these values in the appropriate headers.

Using custom headers

For more advanced cases, or to use headers other than the default headers, pass a generateClientInfo function into the

:

const { ApolloServer } = require("apollo-server");
const {
ApolloServerPluginUsageReporting,
ApolloServerPluginLandingPageLocalDefault,
} = require('apollo-server-core');
const server = new ApolloServer({
typeDefs,
resolvers,
csrfPrevention: true,
cache: "bounded",
plugins: [
ApolloServerPluginUsageReporting({
generateClientInfo: ({
request
}) => {
const headers = request.http && request.http.headers;
if(headers) {
return {
clientName: headers["apollographql-client-name"],
clientVersion: headers["apollographql-client-version"],
};
} else {
return {
clientName: "Unknown Client",
clientVersion: "Unversioned",
};
}
},
}),
ApolloServerPluginLandingPageLocalDefault({ embed: true }),
],
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});

Logging

You can set up fine-grained logging in by defining a custom plugin. plugins enable you to perform actions in response to individual phases of the request lifecycle, such as whenever a GraphQL request is received from a client.

The example below defines a plugin that responds to three different events. As it shows, you provide an array of your defined plugins to the ApolloServer constructor.

For a list of available lifecycle events and their descriptions, see

.

const myPlugin = {
// Fires whenever a GraphQL request is received from a client.
async requestDidStart(requestContext) {
console.log('Request started! Query:\n' +
requestContext.request.query);
return {
// Fires whenever Apollo Server will parse a GraphQL
// request to create its associated document AST.
async parsingDidStart(requestContext) {
console.log('Parsing started!');
},
// Fires whenever Apollo Server will validate a
// request's document AST against your GraphQL schema.
async validationDidStart(requestContext) {
console.log('Validation started!');
},
}
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
csrfPrevention: true,
cache: 'bounded',
plugins: [
myPlugin,
ApolloServerPluginLandingPageLocalDefault({ embed: true }),
]
});

OpenTelemetry support

See

.

Previous
Google Cloud Functions
Next
Health checks
Edit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company