Your data. Anywhere you go.

New Relic for iOS or Android


Download on the App Store    Android App on Google play


New Relic Insights App for iOS


Download on the App Store


Learn more

Close icon

Relic Solution: Synthetics Dashboard!

levelup

#1

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! So, below is the JSON you’ll need to push this to your accounts using the Dashboard Create API endpoint: https://rpm.newrelic.com/api/explore/dashboards/create

The dashboard comes with 2 filter options out of the box, Monitor Name, and Monitor ID - simply apply one of those filters to target all widgets in the dashboard to a single monitor.

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.

NOTE: All queries in this dashboard are targeting default Events and Attributes from both SyntheticCheck and SyntheticRequest event types.

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)

{
    "dashboard": {
      "title": "NR Synthetics Requests",
      "description": "",
      "icon": "bar-chart",
      "created_at": "2019-04-27T20:45:10Z",
      "updated_at": "2020-02-20T10:32:11Z",
      "visibility": "all",
      "editable": "editable_by_all",
      "metadata": {
        "version": 1
      },
      "widgets": [
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 1,
            "column": 1
          },
          "widget_id": 9812210,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT percentage(count(*), where result = 'SUCCESS') as 'Availability%', average(duration) AS 'response time ms' FROM SyntheticCheck SINCE today FACET hourOf(timestamp)"
            }
          ],
          "presentation": {
            "title": "Availability by hour of day",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 1,
            "column": 2
          },
          "widget_id": 9812212,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "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"
            }
          ],
          "presentation": {
            "title": "Average duration (ms) by Location",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "faceted_line_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 1,
            "column": 3
          },
          "widget_id": 9812211,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT average(duration) FROM SyntheticCheck SINCE today facet monitorName limit 10 TIMESERIES auto"
            }
          ],
          "presentation": {
            "title": "AVG Job Duration - 1 DAY",
            "notes": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 2,
            "column": 1
          },
          "widget_id": 9812215,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "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"
            }
          ],
          "presentation": {
            "title": "Average duration (ms) by URL",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_bar_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 2,
            "column": 2
          },
          "widget_id": 9812214,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET URL LIMIT 10"
            }
          ],
          "presentation": {
            "title": "Requests by URL",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 2,
            "column": 3
          },
          "widget_id": 9812221,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET locationLabel LIMIT 10"
            }
          ],
          "presentation": {
            "title": "Location",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 3,
            "column": 1
          },
          "widget_id": 9812213,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "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"
            }
          ],
          "presentation": {
            "title": "Maximum duration (ms) by Location",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 3,
            "column": 2
          },
          "widget_id": 9812218,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET domain LIMIT 100"
            }
          ],
          "presentation": {
            "title": "Domain",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 3,
            "column": 3
          },
          "widget_id": 9812217,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET contentCategory LIMIT 100"
            }
          ],
          "presentation": {
            "title": "Content Category",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 4,
            "column": 1
          },
          "widget_id": 9812224,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET verb LIMIT 100"
            }
          ],
          "presentation": {
            "title": "Request type",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 4,
            "column": 2
          },
          "widget_id": 9812220,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today  FACET host LIMIT 100"
            }
          ],
          "presentation": {
            "title": "Hosts",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 4,
            "column": 3
          },
          "widget_id": 9812227,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT average(requestBodySize) , average(requestHeaderSize), average(responseBodySize), average(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
            }
          ],
          "presentation": {
            "title": "Average Request and Response size",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 5,
            "column": 1
          },
          "widget_id": 9812216,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "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"
            }
          ],
          "presentation": {
            "title": "Maximum duration (ms) by URL",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 5,
            "column": 2
          },
          "widget_id": 9812223,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET responseStatus LIMIT 10"
            }
          ],
          "presentation": {
            "title": "Response Status",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_bar_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 5,
            "column": 3
          },
          "widget_id": 9812230,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today where  responseCode !=200 FACET URL limit 100"
            }
          ],
          "presentation": {
            "title": "Non HTTP 200 by URL",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_bar_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 6,
            "column": 1
          },
          "widget_id": 9812219,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET contentType LIMIT 100"
            }
          ],
          "presentation": {
            "title": "Content Type",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 6,
            "column": 2
          },
          "widget_id": 9812226,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT average(requestBodySize) , average(requestHeaderSize), average(responseBodySize), average(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
            }
          ],
          "presentation": {
            "title": "Average Request and Response size by Domain",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_pie_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 6,
            "column": 3
          },
          "widget_id": 9812225,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today FACET  responseCode limit 100"
            }
          ],
          "presentation": {
            "title": "Response codes",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 7,
            "column": 1
          },
          "widget_id": 9812228,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT max(requestBodySize) , max(requestHeaderSize), max(responseBodySize), max(responseHeaderSize) from SyntheticRequest  since today FACET domain limit 100"
            }
          ],
          "presentation": {
            "title": "Max Request and Response size by Domain",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_table",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 7,
            "column": 2
          },
          "widget_id": 9812222,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT max(requestBodySize) , max(requestHeaderSize), max(responseBodySize), max(responseHeaderSize) from SyntheticRequest  since today FACET URL limit 100"
            }
          ],
          "presentation": {
            "title": "Max Request and Response size",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        },
        {
          "visualization": "facet_bar_chart",
          "layout": {
            "width": 1,
            "height": 1,
            "row": 7,
            "column": 3
          },
          "widget_id": 9812229,
          "account_id": 1133910,
          "data": [
            {
              "nrql": "SELECT count(*) FROM SyntheticRequest SINCE today where  responseCode !=200 FACET domain limit 100"
            }
          ],
          "presentation": {
            "title": "Non HTTP 200 by Domain",
            "notes": null,
            "drilldown_dashboard_id": null
          }
        }
      ],
      "filter": {
        "event_types": [
          "SyntheticCheck",
          "SyntheticRequest"
        ],
        "attributes": [
          "monitorId",
          "monitorName"
        ]
      }
    }
  }

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


Creating Separated Reports