93. A Step-By-Step Guide to Building Modern Dashboards

Turning data into information and information into decisions are some of the most common challenges facing any monitoring professional. A clean, easy-to-interpret dashboard can go a long way in turning those raw numbers into actionable decisions. In this heavily requested follow-up episode, Kevin M. Sparenberg, technical content manager for THWACK®, presents a step-by-step build for modern dashboards. This live and in-depth working session builds on lessons learned from previous SolarWinds Lab episodes (#85, #86, and #91). To get the most from this session, we strongly encourage you to review those episodes, and come prepared with your questions.

At the end of this SolarWinds Lab, you'll have the skills necessary to:

  • Craft a dashboard for your or another team
  • Explain the difference and benefits of the four widget types
  • Use your SWQL skills to craft custom data needed by your teams

Additional Resources:

SolarWinds Lab Episode #85 - How Well Do You Know the Orion Platform? Tips, Tricks, and How-Tos

SolarWinds Lab Episode #86 - Orion ASK 101: Intro to PowerShell and Orion API

SolarWinds Lab Episode #91 - Customizing the Orion Platform With the SolarWinds API and SWQL

Query examples from the episode are attached below.

  • How to use custom property to filter out application status on these widget? Lets say I have custom property name as "server list" which includes further values like A,B,C. Each value(A,B,C) contains their own servers. Now I would like to create KPI widget which gives the status of application running on "A" with their name.  server name----Application running/template name----status(down/critical/warning etc)

  • Thanks! 
    And, yes I am a firm believer in plagiarism.  o7

  • I'd pose this question in the Orion Platform forum.  My gut says, if you save it you should be able to display in in a Modern Dashboard as it's been saved.  That said, I haven't tested this one yet.

  • Is it possible when using Perfstack to save the "Display Transforms"? Reason: I need to show an API Poller result as "Difference".

  •  Very nice examples 

    One thought to the use of the new API Pollers together with the new dashboards. I got the error that the value I used for my widget is 'nvarchar'?! After a while I figured out that the number was to big (8GB in byte) so I used the ABS() SWQL function  and some '/1024' divisors to come to an integer (from byte to megabyte). 

    Here is the result it also changes the color when the free value below 80% maybe it helps others:

    -- SWQL query for getting used and free Heap memory (in byte) for a propotional widget
    -- Challenge: 
    --   1. No Free but a "Total" value given
    --   2. Values to big and stored as string but ABS() helps :)
    -- Using a join to the same table to get total and used value for caclculationg free
    -- Also set some colors depending on how much memory is used
    -- Notice:
    --   'Heap Memory Usage Max' is the total amount of heap memory for the JVM
    --   'Heap Memory Usage' is the used memory
    -- Both names set as 'Display Name' for the metric when the API poller was created
    SELECT 
        -- Set Values
        CASE 
            -- turning value max into free value
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage Max' THEN ((ABS(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)-(ABS(AP2.RequestDetails.ValueToMonitors.Metric)/1024/1024)) 
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage' THEN (ABS(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)
        END AS Value,
        -- Set Names
        CASE 
            -- turning Name max into free Name
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage Max' THEN 'Free Heap Memory (MB)' 
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage' THEN 'Used Heap Memory (MB)'
        END AS Name,
        -- Set Colors
        CASE 
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage Max' THEN 
                -- Change 'Free' color from green to red if it is under 80%
                    WHEN (((abs(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)-(abs(AP2.RequestDetails.ValueToMonitors.Metric)/1024/1024))/(abs(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)*100) < 20 THEN '#FCA01D'
                    -- Setting to nice green color
                    WHEN (((abs(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)-(abs(AP2.RequestDetails.ValueToMonitors.Metric)/1024/1024))/(abs(AP.RequestDetails.ValueToMonitors.Metric)/1024/1024)*100) > 20 THEN '#1caa23'
                END
            WHEN AP.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage' THEN '#0079AA'
        END AS Color
    FROM Orion.APIPoller.ApiPoller AP
    JOIN Orion.APIPoller.ApiPoller AP2 on AP2.ID=AP.ID
    -- The Api Poller Name
    WHERE AP.Name = '[Your API Poller Name]' 
    -- First: Both values, Total and used (for me it's the values starting with  'Heap Memory Usage'
    AND AP.RequestDetails.ValueToMonitors.DisplayName like 'Heap Memory Usage%'
    -- Second: Only the value of used Memory
    AND AP2.RequestDetails.ValueToMonitors.DisplayName = 'Heap Memory Usage'

     If you put that to a Donut you my get something like that:

    Donut_Example.png