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

DevOps Dashboard - Domain Knowledge

apm
synthetics
infrastructure
shared-dashboards

#1

Dashboard of the Day - Domain Knowledge: DevOps

Motivation

This dashboard provides you with the knowledge you need to understand your overall Account Health with a focus on DevOps. Digging a bit deeper, this dashboard provides insight into SLA, MTTR, and even revenue costs affected by errors in your application!


Screenshot


Dashboard Details

Required Products: APM, Synthetics, SystemSample
Level of Effort: Medium
This dashboard will work on the standard New Relic data models. Only one chart on this dashboard will require a custom attribute. We included the “Revenue affected by errors” which includes custom attributes to highlight the business value can bring to your Insights Dashboards.

Some queries will also need to be adjusted to suit your specific needs. For example, the first query has some hard coded multiplication and division that will need to be adjusted to your specific Unit Test requirements.


Chart Details

In this section, we’ll go into the details on the purpose of each of the charts. We’ll also show you the query (NRQL) that you can cut/paste into your Insights query bar.

Unit Tests

Attribute Sheet

SELECT count(*) * 30 as 'Passing', count(*) / 2 as 'Failing' FROM SyntheticCheck SINCE 30 MINUTES AGO

Using some simple math, this dashboard looks measures unit tests

Request Status

Stacked Area

SELECT count(*) FROM SyntheticCheck SINCE 30 MINUTES AGO facet cases(where result = 'SUCCESS' AS 'Success', where result = 'FAILED' as 'Failed')

Facets on transaction error request methods to calculate deploy status over time

Downtime by Monitor

Bar Chart

from SyntheticCheck select 100 - percentage(count(*), WHERE result = 'SUCCESS') as 'Downtime (%)' facet monitorName since 1 day ago

Facets downtime percentage bymonitorName

Uptime by Location

Bar Chart

from SyntheticCheck SELECT percentage(count(*), WHERE result = 'SUCCESS') facet locationLabel since 1 day ago

Facets uptime percentage by locationLabel

Location Status

Attribute Sheet

from SyntheticCheck select latest(result) as 'Status' facet monitorName

Displays the most recent status from your Synthetics Monitors

###1 Month SLA
Gauge Chart

SELECT percentage(count(*), WHERE result = 'SUCCESS') FROM SyntheticCheck since 1 month ago

Calculates the SLA for your apps in the last month

MTTR

Billboard Chart

SELECT average(duration) * 100 AS 'Minutes' FROM Transaction since 1 day ago compare with 1 week ago

Calculates the average transaction duration compared to last week

Response time Percentiles

Line Chart

from Transaction select percentile(duration , 50, 95, 99) as 'Response Time' TIMESERIES since 1 day ago

Calculates the percentiles of your transaction’s duration

Errors by App

Line Chart

SELECT count(*) from TransactionError facet appName TIMESERIES auto since 1 day ago

Displays number of areas faceted by appName over time

Revenue affected by errors

Chart Type

SELECT sum(PurchasedCartGrandTotal) AS 'Dollars Lost' FROM Transaction WHERE httpResponseCode LIKE '%5%' SINCE today

Calculates the number of $$ lost due to a certain error (the exact error code will need to be adjusted for your environment)

Add a custom attributes for extra functionality!

This chart collects a custom attribute in the Transaction event type. This specific attribute captures the dollar amount spent in the shopping transaction. Click here for more info on how APM collects custom attributes to enable this type of dashboard!](https://docs.newrelic.com/docs/insights/insights-data-sources/custom-data/add-custom-attributes-apm-data)

Throughput by Host

Line Chart

from Transaction select count(*) facet host TIMESERIES since 1 day ago limit 5

Calculates the total throughput faceted by host

Database Performance

Heatmap

SELECT histogram(databaseDuration*300, width: 50, buckets: 20) FROM Transaction FACET name SINCE 1 hour ago LIMIT 10

Displays the database performance in a heatmap

Average Response Time

Area Chart

SELECT average(duration) FROM PageView TIMESERIES facet appName

Calculates the average duration of a page load

CPU Usage

Gauge Chart

SELECT average(cpuUserPercent) as 'Percent' from SystemSample since 1 hour ago

Calculates the average CPU percent

Memory Usage

Gauge Chart

SELECT average(memoryUsedBytes) / (average(memoryUsedBytes) + average(memoryFreeBytes)) * 100 as 'Percent' FROM SystemSample since 1 hour ago

Calculates the average percentage of used memory

Disk Storage

Gauge Chart

SELECT average(diskUsedPercent) as 'Percent' from StorageSample since 1 hour ago

Calculates the average used disk storage


Extra Credit - Share your dashboard with the community!

Want to be a super “NeRD” (New Relic Developer)?
Use the API Explorer (or our Postman collection) to load the dashboard definition below into Insights or share the definition of your dashboard and increase your international NeRD cred! (And you’ll earn a cool badge for your community profile!)
Here’s some quick tips on how to do this.

Dashboard Definition

{
  "dashboard": {
    "title": "DevOps Dashboard: Domain Knowledge",
    "description": null,
    "icon": "bar-chart",
    "visibility": "all",
    "editable": "editable_by_all",
    "metadata": {
      "version": 1
    },
    "widgets": [
      {
        "visualization": "markdown",
        "layout": {
          "width": 3,
          "height": 1,
          "row": 1,
          "column": 1
        },
        "data": [
          {
            "source": "# Motivation\n---\n\nThis dashboard provides you with the knowledge you need to understand your overall Account Health with a focus on DevOps. Digging a bit deeper, this dashboard provides insight into SLA, MTTR, and even revenue costs affected by errors in your application!\n\nhttps://discuss.newrelic.com/t/devops-dashboard-domain-knowledge/61717"
          }
        ],
        "presentation": {
          "title": "",
          "notes": null
        }
      },
      {
        "visualization": "attribute_sheet",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 2,
          "column": 1
        },
        "data": [
          {
            "nrql": "SELECT count(*) * 30 as 'Passing', count(*) / 2 as 'Failing' FROM SyntheticCheck SINCE 30 MINUTES AGO"
          }
        ],
        "presentation": {
          "title": "Unit Tests",
          "notes": "Using some simple math, this dashboard looks measures unit tests"
        }
      },
      {
        "visualization": "faceted_area_chart",
        "layout": {
          "width": 2,
          "height": 1,
          "row": 2,
          "column": 2
        },
        "data": [
          {
            "nrql": "Facets on  transaction error request methods to calculate deploy status over time"
          }
        ],
        "presentation": {
          "title": "Deploy Status",
          "notes": "Facets on  transaction error request methods to calculate deploy status over time"
        }
      },
      {
        "visualization": "facet_bar_chart",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 3,
          "column": 1
        },
        "data": [
          {
            "nrql": "from SyntheticCheck select 100 - percentage(count(*), WHERE result = 'SUCCESS') as 'Downtime (%)' facet monitorName since 1 day ago"
          }
        ],
        "presentation": {
          "title": "Downtime by Monitor",
          "notes": "Facets downtime percentage by` monitorName`",
          "drilldown_dashboard_id": null
        }
      },
      {
        "visualization": "facet_bar_chart",
        "layout": {
          "width": 2,
          "height": 1,
          "row": 3,
          "column": 2
        },
        "data": [
          {
            "nrql": "from SyntheticCheck SELECT percentage(count(*), WHERE result = 'SUCCESS') facet locationLabel since 1 day ago"
          }
        ],
        "presentation": {
          "title": "Uptime by Location",
          "notes": "Facets uptime percentage by `locationLabel`",
          "drilldown_dashboard_id": null
        }
      },
      {
        "visualization": "facet_table",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 4,
          "column": 1
        },
        "data": [
          {
            "nrql": "from SyntheticCheck select latest(result) as 'Status' facet monitorName"
          }
        ],
        "presentation": {
          "title": "Latest Status",
          "notes": "Displays the most recent status from your Synthetics Monitors",
          "drilldown_dashboard_id": null
        }
      },
      {
        "visualization": "gauge",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 4,
          "column": 2
        },
        "data": [
          {
            "nrql": "SELECT percentage(count(*), WHERE result = 'SUCCESS') FROM SyntheticCheck since 1 month ago"
          }
        ],
        "presentation": {
          "title": "1 Month SLA",
          "notes": "Calculates the SLA for your apps in the last month",
          "threshold": {
            "red": 100
          }
        }
      },
      {
        "visualization": "billboard_comparison",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 4,
          "column": 3
        },
        "data": [
          {
            "nrql": "SELECT average(duration) * 100 AS 'Minutes' FROM Transaction since 1 day ago compare with 1 week ago"
          }
        ],
        "presentation": {
          "title": "MTTR",
          "notes": "Calculates the average transaction duration compared to last week"
        }
      },
      {
        "visualization": "line_chart",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 5,
          "column": 1
        },
        "data": [
          {
            "nrql": "from Transaction select percentile(duration , 50, 95, 99) as 'Response Time' TIMESERIES since 1 day ago"
          }
        ],
        "presentation": {
          "title": "Response Time Percentiles (APM)",
          "notes": "Calculates the percentiles of your transaction's `duration`"
        }
      },
      {
        "visualization": "faceted_line_chart",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 5,
          "column": 2
        },
        "data": [
          {
            "nrql": "SELECT count(*) from TransactionError facet appName TIMESERIES auto since 1 day ago"
          }
        ],
        "presentation": {
          "title": "Errors by App",
          "notes": "Displays number of areas faceted by `appName` over time"
        }
      },
      {
        "visualization": "billboard",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 5,
          "column": 3
        },
        "data": [
          {
            "nrql": "SELECT sum(PurchasedCartGrandTotal) AS '' FROM Transaction WHERE httpResponseCode LIKE '%5%' SINCE  today"
          }
        ],
        "presentation": {
          "title": "Revenue affected by errors",
          "notes": "Calculates the number of $$ lost due to a certain error (the exact error code will need to be adjusted for your environment)",
          "threshold": {
            "red": null,
            "yellow": 3000
          }
        }
      },
      {
        "visualization": "faceted_line_chart",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 6,
          "column": 1
        },
        "data": [
          {
            "nrql": "from Transaction select count(*) facet host TIMESERIES since 1 day ago limit 5"
          }
        ],
        "presentation": {
          "title": "Throughput by Host",
          "notes": "Calculates the total throughput faceted by host"
        }
      },
      {
        "visualization": "heatmap",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 6,
          "column": 2
        },
        "data": [
          {
            "nrql": "SELECT histogram(databaseDuration*300, width: 50, buckets: 20) FROM Transaction FACET name SINCE 1 hour ago LIMIT 10"
          }
        ],
        "presentation": {
          "title": "Database Performance",
          "notes": "Displays the database performance in a heatmap",
          "drilldown_dashboard_id": null
        }
      },
      {
        "visualization": "faceted_line_chart",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 6,
          "column": 3
        },
        "data": [
          {
            "nrql": "SELECT average(duration) FROM PageView TIMESERIES facet appName"
          }
        ],
        "presentation": {
          "title": "Average Response Time by App (Browser)",
          "notes": "Calculates the average duration of a page load"
        }
      },
      {
        "visualization": "gauge",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 7,
          "column": 1
        },
        "data": [
          {
            "nrql": "SELECT average(cpuUserPercent) as 'Percent' from SystemSample since 1 hour ago"
          }
        ],
        "presentation": {
          "title": "CPU Usage",
          "notes": "Calculates the average CPU percent",
          "threshold": {
            "red": 100
          }
        }
      },
      {
        "visualization": "gauge",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 7,
          "column": 2
        },
        "data": [
          {
            "nrql": "SELECT average(memoryUsedBytes) / (average(memoryUsedBytes) + average(memoryFreeBytes)) * 100 as 'Percent' FROM SystemSample since 1 hour ago"
          }
        ],
        "presentation": {
          "title": "Memory Usage",
          "notes": "Calculates the average percentage of used memory",
          "threshold": {
            "red": 100
          }
        }
      },
      {
        "visualization": "gauge",
        "layout": {
          "width": 1,
          "height": 1,
          "row": 7,
          "column": 3
        },
        "data": [
          {
            "nrql": "SELECT average(diskUsedPercent) as 'Percent' from StorageSample since 1 hour ago"
          }
        ],
        "presentation": {
          "title": "Disk Storage",
          "notes": "Calculates the average used disk storage",
          "threshold": {
            "red": 100
          }
        }
      }
    ],
    "filter": null
  }
}