Querying Workers Metrics with GraphQL
In this example, we are going to use the GraphQL Analytics API to query for Workers Metrics over a specified time period. We can query up to one month of data for dates up to three months ago.
The following API call will request a Worker script's metrics over a one day period, and output the requested fields. Be sure to replace <CLOUDFLARE_ACCOUNT_TAG>
and <API_TOKEN>
1 with your API credentials, and adjust the datetimeStart
, datetimeEnd
, and scriptName
variables as needed.
echo '{ "query": "query GetWorkersAnalytics($accountTag: string, $datetimeStart: string, $datetimeEnd: string, $scriptName: string) { viewer { accounts(filter: {accountTag: $accountTag}) { workersInvocationsAdaptive(limit: 100, filter: { scriptName: $scriptName, datetime_geq: $datetimeStart, datetime_leq: $datetimeEnd }) { sum { subrequests requests errors } quantiles { cpuTimeP50 cpuTimeP99 } dimensions{ datetime scriptName status } } } } }", "variables": { "accountTag": "<CLOUDFLARE_ACCOUNT_TAG>", "datetimeStart": "2022-08-04T00:00:00.000Z", "datetimeEnd": "2022-08-04T01:00:00.000Z", "scriptName": "worker-subrequest-test-client" }}' | tr -d '\n' | curl --silent \https://api.cloudflare.com/client/v4/graphql \--header "Authorization: Bearer <API_TOKEN>" \--header "Accept: application/json" \--header "Content-Type: application/json" \--data @-
The results returned will be in JSON (as requested), so piping the output to jq
will make them easier to read, like in the following example:
... | curl --silent \https://api.cloudflare.com/client/v4/graphql \--header "Authorization: Bearer <API_TOKEN>" \--header "Accept: application/json" \--header "Content-Type: application/json" \--data @- | jq .
#=> {#=> "data": {#=> "viewer": {#=> "accounts": [#=> {#=> "workersInvocationsAdaptive": [#=> {#=> "dimensions": {#=> "datetime": "2020-05-04T18:10:35Z",#=> "scriptName": "worker-subrequest-test-client",#=> "status": "success"#=> },#=> "quantiles": {#=> "cpuTimeP50": 206,#=> "cpuTimeP99": 206#=> },#=> "sum": {#=> "errors": 0,#=> "requests": 1,#=> "subrequests": 0#=> }#=> },#=> {#=> "dimensions": {#=> "datetime": "2020-05-04T18:10:34Z",#=> "scriptName": "worker-subrequest-test-client",#=> "status": "success"#=> },#=> "quantiles": {#=> "cpuTimeP50": 291,#=> "cpuTimeP99": 291#=> },#=> "sum": {#=> "errors": 0,#=> "requests": 1,#=> "subrequests": 0#=> }#=> },#=> {#=> "dimensions": {#=> "datetime": "2020-05-04T18:10:49Z",#=> "scriptName": "worker-subrequest-test-client",#=> "status": "success"#=> },#=> "quantiles": {#=> "cpuTimeP50": 212.5,#=> "cpuTimeP99": 261.19#=> },#=> "sum": {#=> "errors": 0,#=> "requests": 4,#=> "subrequests": 0#=> }#=> }#=> ]#=> }#=> ]#=> }#=> },#=> "errors": null#=> }
-
Refer to Configure an Analytics API token for more information on configuration and permissions. ↩