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

Customer Dashboard: Overview Dashboard (APM/Synthetics)

rfb
shared-dashboards

#1

Quick introduction

Our web application provides an easy and safe way for our healthcare partners to redirect patients of lower priority in order to reduce wait time, risk and costs in emergency rooms. Our process involves following a proven algorithm, where at each step you “leave” the process if the criteria aren’t matched.

We are in production since only a few weeks, so this is our quick first try of an overview dashboard :D. Data bellow has been anonymized with generic names and values, but enough to give you an idea!

Overview dashboard

As you can see, we can find the following informations (based on last 7 days data):

  • Total requests received

  • Amount of appointments taken

  • Availability (Synthetics healthcheck success rate)

  • Custom version of a funnel for our algorithm

  • Call duration for specific schedule loads

  • SLA and Request satisfaction

Details on some queries

1. Availability

We use our Synthetics healthcheck call’s success rate to display a gauge here.

NRQL:

SELECT percentage(count(*), WHERE result = 'SUCCESS') FROM SyntheticCheck 
WHERE monitorName = 'Healthcheck - Prod' SINCE 7 days ago

Useful to bring the value into a dashboard without having to check it elsewhere!

2. Algorithm funnel

This result is similar to a “conversion rate” in usual store sites, but applied to our reality. Since we do not use the Browser or Mobile features, we made our own homemade version of a funnel graph based on server requests at each steps.

NRQL:

SELECT count(*) FROM Transaction facet
cases(
  WHERE(name = 'WebTransaction/***/***Step1/**') as 'Step 1 - ***',
  WHERE(name = 'WebTransaction/***/***Step2/**:someId' AND `request.headers.referer` LIKE '%/***Step1/**') as 'Step 2 - ***',
  WHERE(name = 'WebTransaction/***/***Step3/**:someId' AND `request.headers.referer` LIKE '%/***/***Step2/%') as 'Step 3 - ***',
  WHERE(name = 'WebTransaction/***/***Step4/**:someId' AND `request.headers.referer` LIKE '%/***/***Step3/%') as 'Step 4 - Appointment confirmation'
)

SINCE 7 days ago

As you can see, we make sure that at each step, the call count only consider ones made (referred) from previous step.

-> Same principle (with same WHERE statement) is applied in the widget bellow to represent the % of users remaining after each step, similar to this:

NRQL:

SELECT
filter(count(*), WHERE(name = 'WebTransaction/***/***Step2/**:someId' AND `request.headers.referer` LIKE '%/***Step1/**'))
/ filter(count(*), WHERE(name = 'WebTransaction/***/***Step1/**')) * 100 as '% Step 2',

3. Important transactions duration percentiles

In order to monitor closely each schedule type’s load times (a heavy and important call in our API), we display the duration with this query:

NRQL:

SELECT percentile(duration, 50, 90) FROM Transaction WHERE `request.uri` LIKE '/scheduleTypeA/%' SINCE 7 days ago FACET `request.uri`

We can then view each variants and its matching values. The table filter function then allows us to see worst ones first. We actually caught a bug for a specific schedule load last week, as we could see high duration spikes for one of them!

TIP: As used in the previous request, the LIKE operator with a % at the end of URIs ensure it will match any query string parameters. A cool trick!

4. SLA and Apdex preview

As we display only this particular dashboard on a TV near our work area, we wanted to bring back the SLA and request satisfaction based on our Apdex value in our overview.

This query was highly inspired by a few posts in the Explorers hub! I don’t have the sources at hand, but we built it based on our findings here, so Kudos to you guys!

NRQL:

SELECT
count(*) / 1000 AS 'Requests thousands',
average(duration) * 1000 AS 'Resp. time ms',
apdex(duration, 0.5),
percentage(count(*), WHERE duration <= 0.5) AS '% Satisfied',
percentage(count(*), WHERE duration > 0.5 AND duration <= 2) AS '% Tolerating',
percentage(count(*), WHERE duration > 2) AS '% Frustrated'
FROM Transaction
WHERE appName = 'OurAppName-prod' SINCE 7 days ago

As you can see, our Apdex value is still the default one (500ms), which is hardcoded in this query. If someone figures out how to pull it from our actual apdex value instead, let us know :)!

Conclusion

We only just started exploring Insights. It’s a pretty cool module! We proved to our stakeholders that we could quickly mix performance, “technical” metrics with real business observations, which is great! Thank you NewRelic!

We will enhance our dashboards in the future.

PS: Hopefully there will be clear and affordable pricing options soon, in order to explore with a bit more than ~8 days data retention!