Apollo GraphQL App Insights Configuration
(~7 minutes) Instructions for adding Azure Monitor - App Insights logging to Apollo GraphQL
Initialize App Insights and Import Types
Add App Insights to the data-access project:
In terminal go to azure-quickstart/data-access
and issue the following command:
npm install applicationinsights
Add "APPINSIGHTS_INSTRUMENTATIONKEY" to your localsettings.json with the Instrumentation Key from application insights
Instrumentation Key: In Azure: Go to the Application Insights resource named sharethrift. The Instrumental key will be under essentials.
{
...
"Values": {
...
"APPINSIGHTS_INSTRUMENTATIONKEY": "<<Your Key Here>>"
...
}
...
}
Add the following to the top of the index.ts
to initialize the App Insights client as early as possible and to import the types needed for the plugin. Note in the configuration we've defined a custom property of "functionArea" to help organize our logs and make them easier to query.
let appInsights = require("applicationinsights");
appInsights.setup().start();
appInsights.defaultClient.commonProperties = {
environment: process.env.WEBSITE_HOSTNAME,
functionArea: "graphql"
};
let appInsightsClient = appInsights.defaultClient;
import {
ApolloServerPlugin,
GraphQLRequestContext,
GraphQLRequestListener,
} from 'apollo-server-plugin-base';
Define the Apollo Plugin
This plugin logs some valuable information:
Metrics: apollo-query / apollo-error
Quickly see the volume of queries / errors in Azure Monitor
Exceptions:
Track down details of errors through Azure Log Analytics
// referenced from https://jeffmagnusson.com/post/graphql-apollo-server-plugins-in-typescript
const appInsightsPlugin = <ApolloServerPlugin & GraphQLRequestListener>{
// Fires whenever a GraphQL request is received from a client.
requestDidStart(requestContext:GraphQLRequestContext): GraphQLRequestListener | void{
appInsightsClient.trackMetric({name: "apollo-query", value: 1});
return this;
},
// Fires for graph exceptions
didEncounterErrors: function(requestContext:GraphQLRequestContext) {
appInsightsClient.trackMetric({name: "apollo-error", value: 1});
appInsightsClient.trackException({exception: new Error("Apollo Error")});
appInsightsClient.trackException({exception: {category:"Apollo Error", details: requestContext.errors}});
}
}
Add the plugin to Apollo Server
const server = new ApolloServer({
...
plugins: [
appInsightsPlugin
],
...
});
Resources:
Principled GraphQL - Structured Logging
Last updated
Was this helpful?