Metrics Logging API
You can get analytics and observability metrics through the Stellate dashboard, through our plugins, or through our Metrics Logging API. This Metrics Request Logging API allows you to identify your cacheable traffic using any of the following options:
- Create requests to the logging API from the Dashboard UI using a convenient fetch call that you can copy and paste into your GraphQL environment.
- Build your own manual
fetch
call using the information in this topic. - Use any of the convienient Stellate plugins for your server or framework or specific language. Read Metrics Plugins for more information.
The Request Logging API allows you to identify your cacheable traffic using plugins or through the aforementioned manual fetch
call.
Before you begin
In addition to using the Metrics Logging API, Stellate also provides an number of convenient plugins to help collect metrics for specific servers or languages. Before you construct your own 'fetch' call or create your own plugin, check out the following resources to see if we have you covered.
-
To get an overview of our GraphQL metrics, read About GraphQL Metrics and follow the Get Started with GraphQL Metrics topic to go through step-by-step instructions on getting metrics using the Stellate Dashboard UI.
-
To find out how to use the built-in metrics for our edge caching product,, read Get Metrics with the Edge Proxy
-
To get a high-level view of all of our metrics plugins, read Metrics Plugins and About Integrations.
We provide plugins for multiple servers and frameworks, such as:
We also provide language specific plugins, such as: Java, Ruby, and Strawberry.
Logging Requests to GraphQL Metrics
You can easily use Stellate GraphQL Metrics without proxying all your requests through Stellate. To achieve that you can push data about your GraphQL requests to our logging endpoint directly from your origin server. Stellate provides two options for collecting GraphQL metrics, a convenient fetch call that you can copy and paste into your GraphQL environment or you can build your own fetch call.
Build a Manual fetch Call for Metrics
An alternate method for getting Stellate GraphQL Metrics is to do a manual request. You can manually construct your own fetch
call to use the Stellate API for logging requests to collect and send metrics. To create a manual logging request to get Stellate GraphQL Metrics, you need to do some preliminary set up as described in the following sections.
Obtain a Token to Authorize
To authorize the logging request, you need to send a token with the request using the Stellate-Logging-Token
header. You can generate these tokens in the service-settings
.
To generate and include the logging-token
in the Stellate-Logging-Token
header:
- Navigate to Stellate > Services and click your service.
- Click Config > Tokens > Create a Token > Logging API.
- Click Create Token and copy the token to a secure location.
- Include this token in your
Stellate-Logging-Token
header. For example:token: '${loggingToken}',
You then need to specify the endpoint with the properties that you want to be part of your request.
Specify the Endpoint
Send a POST
request to https://<service-name>.stellate.sh/log
. The following properties can be sent in the request body.
Property | Expected type | Is required | Description |
---|---|---|---|
operation | string | true | The GraphQL query handled by the origin |
method | string | true | The HTTP method used to send the GraphQL request |
responseSize | number | true | The length of the stringified response body |
responseHash | number | true | A blake3 hash of the JSON-stringified execution result |
elapsed | number | true | The time (in ms) it took to handle the GraphQL request |
operationName | string | false | The name of the operation that has been executed |
variables | object | false | The variables sent with the GraphQL requests (stored as hash to count distinct variables for the given GraphQL operation) |
variablesHash | number | false | A blake3 hash of the JSON-stringified variables object (takes precendence over the variables property) |
ip | string | false | The IP that send the GraphQL request (will be hashed with SHA-256 before storing it) |
errors | object[] | false | The list of GraphQL errors that are part of the execution result |
statusCode | number | true | The HTTP status code of the response |
statusText | string | false | The text sent with the above HTTP status code (by default we use the standardized status texts) |
userAgent | string | false | The value of the user-agent header sent with the HTTP request |
referer | string | false | The value of the referer header sent with the HTTP request |
hasSetCookie | boolean | false | The value of the set-cookie header sent with the HTTP response |
Response
For a successful log intake, the above endpoint will respond with a 204 status code. If there was an error, it'll respond with a 400 status code.
How to hash values
When generating an integer hash you can do so with the following function, this is needed
for the responseBodyHash
function createIntHash(str) {
let val = 0
const strlen = str.length
if (strlen === 0) {
return val
}
for (let i = 0; i < strlen; ++i) {
const code = str.charCodeAt(i)
val = (val << 5) - val + code
val &= val // Int32
}
return val >>> 0 // uInt32
}
Metrics Plugins
All of the Stellate server and framework plugins take a fetch
function as an argument, this enables using these plugins in any JavaScript environment. If you are running NodeJS you can use the node-fetch
package, and in an edge environment (e.g. Cloudflare Workers) pass the global fetch function.
List of Metrics Plugins
For full documentation on each specific plugin see the Integrations topics on:
- Apollo Server Plugiin
- Envelop Plugin
- Mesh Plugin
- Yoga Plugin
- Java-based Plugin
- Ruby-based Plugin
- Strawberry-based Plugin