Relic Solution: Synthetics Dashboard!

Do you want a nice dashboard for drilling down into some of the finer points of your Synthetics checks?

I have had this dashboard running in my account for a while now, and realised, this may be a great resource for others too!

Below is the JSON you’ll need to push this to your accounts using the Dashboard Create API endpoint: New Relic API Explorer

Update!

The original version of this post utilised a JSON format supported by New Relic’s older Dashboards API. Current best practice is to either use the UI Import Dashboard button. Optionally you can use our GraphQL API. Note that the GraphQL API will require restructuring the JSON into the GQL Schema detailed in the linked doc.

The JSON below has been updated to meet the format required for importing via the Dashboards UI.

NOTE: You will need to take the JSON into a text editor first, where you will run a Find & Replace search on the account ID.


By default all widgets are targeting the SINCE TODAY timeframe, but you are free to alter this either in the widgets themselves, or in the global dashboard timeframe settings.

Here’s a screenshot from one of my PING type monitors (this is why there’s only HEAD requests, other monitor types will have more verbose data)

{
  "name": "NR Synthetics Requests",
  "description": "",
  "permissions": "PUBLIC_READ_ONLY",
  "pages": [
    {
      "name": "NR Synthetics Requests",
      "description": null,
      "widgets": [
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 1,
            "height": 3,
            "width": 4
          },
          "title": "* FROM PageView",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT * FROM PageView since this week "
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 5,
            "row": 1,
            "height": 3,
            "width": 4
          },
          "title": "Average duration (ms) by Location",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT average(durationDNS) as 'DNS', average(durationSSL) as 'SSL', average(durationConnect) as 'Connect' , average(durationSend) as 'Send',  average(durationWait) as 'Wait', average(durationBlocked) as 'Blocked', average(durationReceive) as 'Receive',     average(duration) as 'Duration' from SyntheticRequest  since today  facet locationLabel"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.line"
          },
          "layout": {
            "column": 9,
            "row": 1,
            "height": 3,
            "width": 4
          },
          "title": "AVG Job Duration - 1 DAY",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT average(duration) FROM SyntheticCheck WHERE monitorName in ('Simple Monitor', 'Slack Sign Up - PING') SINCE today facet monitorName limit 10 TIMESERIES auto"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 4,
            "height": 3,
            "width": 4
          },
          "title": "Availability by hour of day",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT percentage(count(*), where result = 'SUCCESS') as 'Availability%', average(duration) AS 'response time ms' FROM SyntheticCheck SINCE today FACET hourOf(timestamp)"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.bar"
          },
          "layout": {
            "column": 5,
            "row": 4,
            "height": 3,
            "width": 4
          },
          "title": "Requests by URL",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest where URL not like '%veitch%' SINCE today FACET URL LIMIT 10"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 9,
            "row": 4,
            "height": 3,
            "width": 4
          },
          "title": "Location",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET locationLabel LIMIT 10"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 7,
            "height": 3,
            "width": 4
          },
          "title": "Average duration (ms) by URL",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT average(durationDNS) as 'DNS', average(durationSSL) as 'SSL', average(durationConnect) as 'Connect' , average(durationSend) as 'Send',  average(durationWait) as 'Wait', average(durationBlocked) as 'Blocked', average(durationReceive) as 'Receive',     average(duration) as 'Duration' from SyntheticRequest  since today  facet URL"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 5,
            "row": 7,
            "height": 3,
            "width": 4
          },
          "title": "Domain",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest WHERE URL not like '%veitch%' SINCE today FACET domain LIMIT 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 9,
            "row": 7,
            "height": 3,
            "width": 4
          },
          "title": "Content Category",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET contentCategory LIMIT 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 10,
            "height": 3,
            "width": 4
          },
          "title": "Maximum duration (ms) by Location",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT max(durationDNS) as 'DNS', max(durationSSL) as 'SSL', max(durationConnect) as 'Connect' , max(durationSend) as 'Send',  max(durationWait) as 'Wait', max(durationBlocked) as 'Blocked', max(durationReceive) as 'Receive',  max(duration) as 'Duration' from SyntheticRequest  since today  facet locationLabel"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 5,
            "row": 10,
            "height": 3,
            "width": 4
          },
          "title": "Hosts",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today  FACET host LIMIT 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 9,
            "row": 10,
            "height": 3,
            "width": 4
          },
          "title": "Average Request and Response size",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT average(requestBodySize) , average(requestHeaderSize), average(responseBodySize), average(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 1,
            "row": 13,
            "height": 3,
            "width": 4
          },
          "title": "Request type",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET verb LIMIT 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 5,
            "row": 13,
            "height": 3,
            "width": 4
          },
          "title": "Response Status",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET responseStatus LIMIT 10"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.bar"
          },
          "layout": {
            "column": 9,
            "row": 13,
            "height": 3,
            "width": 4
          },
          "title": "Non HTTP 200 by URL",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today where  responseCode !=200 FACET URL limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 16,
            "height": 3,
            "width": 4
          },
          "title": "Maximum duration (ms) by URL",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT max(durationDNS) as 'DNS', max(durationSSL) as 'SSL', max(durationConnect) as 'Connect' , max(durationSend) as 'Send',  max(durationWait) as 'Wait', max(durationBlocked) as 'Blocked', max(durationReceive) as 'Receive',  max(duration) as 'Duration' from SyntheticRequest  since today  facet URL"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 5,
            "row": 16,
            "height": 3,
            "width": 4
          },
          "title": "Average Request and Response size by Domain",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT average(requestBodySize) , average(requestHeaderSize), average(responseBodySize), average(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.pie"
          },
          "layout": {
            "column": 9,
            "row": 16,
            "height": 3,
            "width": 4
          },
          "title": "Response codes",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET  responseCode limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.bar"
          },
          "layout": {
            "column": 1,
            "row": 19,
            "height": 3,
            "width": 4
          },
          "title": "Content Type",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today FACET contentType LIMIT 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 5,
            "row": 19,
            "height": 3,
            "width": 4
          },
          "title": "Max Request and Response size",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT max(requestBodySize) , max(requestHeaderSize), max(responseBodySize), max(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.bar"
          },
          "layout": {
            "column": 9,
            "row": 19,
            "height": 3,
            "width": 4
          },
          "title": "Non HTTP 200 by Domain",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT count(*) FROM SyntheticRequest SINCE today where  responseCode !=200 FACET domain limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        },
        {
          "visualization": {
            "id": "viz.table"
          },
          "layout": {
            "column": 1,
            "row": 22,
            "height": 3,
            "width": 4
          },
          "title": "Max Request and Response size by Domain",
          "rawConfiguration": {
            "nrqlQueries": [
              {
                "accountId": 0,
                "query": "SELECT max(requestBodySize) , max(requestHeaderSize), max(responseBodySize), max(responseHeaderSize) from SyntheticRequest  since today FACET domain limit 100"
              }
            ]
          },
          "linkedEntityGuids": null
        }
      ]
    }
  ]
}

Let me know what you think, and if this dashboard is useful for you :smiley:

6 Likes

Thank you! The dashboards are super helpful

3 Likes

Thanks @priyadarshini.r.kolw - Glad you’re finding it useful :smiley:

Hello, I am trying to use this .json in my account. I have changed the account_id but it doesn’t work. Can someone help me? What more things i would have to change?
Thanks.

1 Like

Hi there @alvaro.saavedradelap -

First - thank you! You helped us review this content and we realized that there are a couple of things out of date in the post. Hang tight, and our team will get it updated and let you know what’s different now.

3 Likes

Hey @hross & @alvaro.saavedradelap

I have updated this post with new JSON, and new instructions :slight_smile:

Check out the Update section above and let me know if you run into any trouble with it.

4 Likes