All in on Modern Dashboards

All in on Modern Dashboards

SolarWinds introduced Modern Dashboards with the release of version 2020.2, and this feature greatly improves website performance and visibility. Modern Dashboards were intended to be used primarily for high-level summary displays of various flavors. Therefore, it cannot be considered a replacement for the current classic dashboard types, which support both summary and detail views.

In my opinion, modern dashboards are more suitable than classic dashboards for high-level summary views, especially for wallboards with their user-friendly widgets and adaptability to different screen resolutions. I can list my favorite modern dashboard features in comparison with classic dashboards as below:

  • Flexibility in Positioning and Sizing Widgets
  • Auto-sizing of the page width to fit any screen resolution
  • Auto-Refresh capability for each widget
  • Setting Visibility (Public/Private) and Owner for the dashboard
  • Out-of-the-box “Search” capability for each displayed column of the “Table” widget
  • Access to different pages from objects displayed in “KPI” and “Proportional” widgets
  • Filter option in URL level to limit data that can be displayed in all widgets of the dashboard

In Prosperon Networks, a partner company for SolarWinds, we work with customers every day to improve their experiences with the SolarWinds solutions. One of the key areas that we work on is dashboards, which is a fundamental function of any good monitoring application, to help our customers see and access details easily in the SolarWinds platform web interface.

With the continued improvements in the capabilities of the Modern Dashboards, we have adopted a Modern Dashboard first approach for all new dashboard requirements in order to implement new user-friendly pages in the SolarWinds Platform. I didn’t consider redefining existing out-of-the-box classic summary views as modern dashboards until I saw the new “Config Summary” modern dashboard released with 2022.3 version to replace the legacy classic view for Network Configuration Manager (NCM) product. This inspired me to try my hand at creating my own Modern Dashboard views for the Network (NPM) and Systems (SAM) classic dashboards. These two classic dashboards are familiar to anyone who has worked with the SolarWinds Platform for a reasonable amount of time. I would like to share the details of these modern dashboards that I configured in this post.

Networks Summary

I created this dashboard as a replacement for the classic “NPM Summary” view. As can be seen in the screenshot below, it has several KPI, Proportional and Table widgets to display data.

All Nodes Table Widget

I chose to display only “Network” devices in this view (which is different than the NPM Summary page on which it is based) because I was already planning to build a different view for Servers.  This necessitated that I determine if a device is a network device or not.

Base Query

An important note before I delve deeper: In Modern Dashboard creation we can utilize the SolarWinds Query Language (SWQL) to control the data in a more complete way than the drag-and-drop data selector method. SWQL queries in each widget for this view are defined to show data for network devices only, which in this case is achieved by checking if the category is set to “Network” for node objects. Let us look at the query for the “All Nodes” widget I have built for the dashboard to show this condition:

SELECT [N].Caption AS [Node Name]
     , [N].MachineType AS [Machine Type]
     , [N].IP_Address AS [IP Address]
     , [N].Vendor AS Vendor
     , [N].VendorIcon AS [Vendor Icon]
     , [N].Status
     , [N].DetailsURL AS [Details URL]
     , [C].Description
FROM Orion.Nodes AS [N]
INNER JOIN Orion.NodeCategories AS [C]
  ON [N].Category = [C].CategoryID
WHERE [C].Description = 'Network'

I didn’t have join to the NodeCategories entity in SWQL, but I wanted to use the description of the category instead of the arbitrary number (0 = Other, 1 = Network, 2 = Server).  The below query works just as well.

SELECT [N].Caption AS [Node Name]
     , [N].MachineType AS [Machine Type]
     , [N].IP_Address AS [IP Address]
     , [N].Vendor AS Vendor
     , [N].VendorIcon AS [Vendor Icon]
     , [N].Status
     , [N].DetailsURL AS [Details URL]
FROM Orion.Nodes AS [N]
WHERE [N].Category = 1

The primary reason I chose to work with the first query is it’s easier for me to read and return to if further changes need to be made.  I’ve used different formats depending on which type of widget I’m building in various widgets.  After you import the widgets, you can edit the data source to see the queries I'm using.

Quick Note About a Node’s Category

This condition is automatically detected to the best ability of the platform, but if a node needs to be flipped between Network, Server, or Other, you can edit the node manually and switch the categorization.

Enabling Search

All table widgets are “Search” enabled so users can easily filter data displayed in these tables as shown in “All Nodes” table widget as an example:

This is simply a checkbox you enable when building the table widget.

Advanced Filtering

Now for some of the clever stuff! For each KPI or Proportional widget, “Link Mapping” is configured to access another Modern Dashboard entity, which is built with a table widget showing only relevant data for the top-level summary widget it comes from. This allows us to build a navigation path to more details for the more graphical widgets such as a Pie chart.

As an example, “Critical” item in the legend can be clicked in “Hardware Health Overview” proportional widget to display details:

This action will open a new tab is to list “Critical Hardware Items” in a new dashboard:

Or if we click on the number value for “Up” hardware items in the same proportional widget; another tab is opened to list “Up Hardware Items” in a new dashboard:

In order to achieve this, I created another modern dashboard named “Networks Summary - Hardware Status” and I configured my query in Proportional Widget to apply the to display relevant data only.

So, when the “Critical” keyword is clicked, it is opening “Networks Summary - Hardware Status” modern dashboard with a URL parameter like this:

filters=0_Orion.HardwareHealth.HardwareInfo_Status:eq:14

In essence, this says, “filter the returned data to the dashboard by instance 0 (the default if you only have one server), in the Orion.HardwareHealth.HardwareHealthInfo entity that has the Status property value equal to 14.” Since, I've been working with the SolarWinds Query Language and the SolarWinds Platform data set for a while, I have many of these status ID numbers memorized, but you don't need to have them memorized.  I've recommended people use Default Colors/Icons for Orion Statuses Modern Dashboard to get a summary of the status conditions.

This functionality is outlined in the SolarWinds Support article Filter data on modern dashboards using global filters.  It’s an excellent starting point if you want to get into the advanced filtering on Modern Dashboards and Performance Analysis (PerfStack) charts.  PerfStack charts (until saved as a project) use a similar format to the URL parameterization and make it easier to comprehend using your own environment as an example.

As the default classic dashboard (Networks Summary) has KPI and Proportional widgets for “Nodes”, “Interfaces”, “Hardware Items” and “Alerts”, I defined the following dashboards in order to use drill-down capability from these widgets:

Using the Dashboards

This group of Modern Dashboards need to be imported all together to get the links between each to work as expected.

If you’d like to use them in your environment, jump to the Importing section below where I run you through the process.

Servers Summary

Similarly, to the Network Summary Modern Dashboard, I created this dashboard as a replacement for the classic “SAM Summary” view. Like before, this dashboard also has several KPI, Proportional and Table widgets:

This time we are simply changing the filter on the base SWQL query from “Network” to “Server” for node objects, so that only servers are now included. I did not apply this filter for Application and Component related widgets as those entities are focused towards server and application data only already and that these are displayed for all applications assigned to all nodes in a SolarWinds platform.

All table widgets are “Search” enabled so users can easily filter data displayed in these tables as shown in “All Applications” table as an example:

For each KPI or Proportional widget, “Link Mapping” is again configured to access a dashboard with table widget showing relevant data only. As demonstrated in the above example, the number value for “Down” applications in “All Applications by Status” KPI widget to display details:

This action will open a new tab is to list “Down Applications” in a new dashboard:

Similarly, were we to click on “Up”, the content is auto filtered for only applications matching that status:

To achieve this, I created another modern dashboard named “Servers Summary - Application Status”, and I configured the SWQL query in the KPI dashboard to append the URL parameters to the link to display relevant data only.

So, when the KPI number for “Up” applications is clicked, it is opening “Servers Summary - Application Status” modern dashboard with the following parameter in the URL:

filters=0_Orion.APM.Application_Status:eq:1

As the main dashboard (Servers Summary) has KPI and Proportional widgets for “Nodes”, “Applications”, “API Pollers” and “Alerts”, I defined the following dashboards in order to use drill-down capability from these widgets:

Importing

The Modern Dashboards are published in the Modern Dashboard Content Exchange and are freely available for download to anyone.  Once you download the files you want, save them in a folder on your computer.  Then you can follow the instructions KMSigma wrote about using the Import-ModernDashboard PowerShell function.  After you have the dashboards downloaded and saved in a folder on your computer, you can import them, in bulk, with one PowerShell command.

#Import all JSON Modern Dashboard JSON files from a folder
Import-ModernDashboard -SwisConnection $SwisConnection -FilePath "P:\ath\To\Saved\Dashboard\Folder\*.json"

Final Note

Savvy readers will notice that some devices will be missing from either dashboard.  Those are ones for devices with the category of “Other.”  Since the “Other” categorization is used differently by different people in different environments, I felt it was better to skip.  If you want to include the other category in either of your dashboards, you can simple append  OR [C].Description = 'Other' to the end of the base query or use the numerical equivalent.

Summation

I had a lot of fun putting this together and the feedback from our customers has been only positive, so I thought I would share this with the community. I’m always looking at ways to improve our display of good quality information. Please give me your feedback in the comments below. 

  • I'd love to be all in on modern dashboards, but while I love their look, a lot of things that seem to persist leave me baffled as to why they're still this way a couple years out now?

    I made a copy of this dashboard actually, wanting to customize it and make it a better display to put up on the wall in our NOC.  Mostly little things, like adjusting it so it is better for a display that nobody will interact with.  

    The first thing I wanted to do was change the "All Nodes" resource so that it lists down/warning nodes first.   Should be simple, right?  It's using a custom SWQL query, just change the sort order.   So, I duplicate the resource and change the  SWQL so it sorts by N.Status descending.   Nothing changes, still listing in alphabetical order.   In looking closer and I notice up top under "Presentation" there is a "Sorting" gadget that is set up to sort by Node Name, which I'm guessing conflicts with this.

    The only way I can think of accomplishing this is to make multiple widgets, one for "down" nodes, one for "warning" and another for "up" nodes, but that will probably take up a lot of realestate than it needs to...

    Problem #1:  You can't cancel that its sorting under this gadget, if you enable a sort here, you can change it, but not go back to it not sorting.

    So, I recreate the gadget which isn't nearly as straightforward as you might think.  Even with screenshots of the basic setup its still confusing.   Make sure to leave the "Sorting" not set, no problem.   Then, check to see how things are!   It seems to be ignoring my sorting by N.Status DESC, and still possibly sorting by the first field, "Node Name".   Pretty much everything I try makes me realize that its just ignoring everything I do in terms of sorting or grouping.    No idea why, you should be able to carry the sort from your SWQL query into this gadget?!

    Problem #2:  Ignores sorting in SWQL queries

    So, I decide to abandon that gadget and instead go for the "Top 10 interfaces by bandwidth".   First I realize that the name is a misnomer, its not by bandwidth, but by % utilization.   So if you have a 15Kb interface that is 100% utilized it will get on this list, but not a 10G interface that is 50% utilized.  But, that's ok, still a good idea.   The way it was sized is that it shows only about 5 lines though.   For a NOC display its silly to have a Top 10 resource that only shows 5 lines, so I tinker with the SWQL a bit to make it more to my liking and move things around a bit, removing some resources I don't need, in order to give this one about 2/3rds of the rightmost screen area.   I resize it to show all 10 for my desired screen size, but I can't.   Everything I try it either cuts me off a line or two short, or adds about 3-4 blank lines at the end, which looks horrid on a NOC display.  I tried everything I could think of, but no luck.

    Problem #3: Unable to resize to where we want and/or set a static size for a display with a known resolution.

    I'd love to have the ability to set the size of my windows better.   For screens that might be resized, the ability to do the widgets size as a proportion of the page (ie: 50% width or height?).   But for pages I want to be statically sized, such as for a NOC display, I'd love to be able to specify the actual size.  Maybe an alternative to this might be to size it to 100% of the content, so my top 10 list will always be fully displayed?

    I also noticed that although I didn't touch the top of the screen, that adding and deleting things below seemed to make these widgets shift on me, and I had to spend some time on at least a couple adjusting their horizontal and vertical positions.   Unfortunately I can't the problem with this out for sure, maybe I did accidentally drop a widget on top of it.   Which would make an "undo" function nice also?

    Anyone else have issues with the modern dashboards?   This was just from me trying to do a couple minor customizations on an existing dashboard, will probably come up with more as I continue to edit.  Either that or I might go back to classic ones...

  • I like the updated interface and expanded functionality. Also ensure website uptime and performance with Host-Tracker uptime checker tool, in combination with this toolkit I get everything I need. I'm not a fan of updates and innovations, but I really liked this update.

  • a Subquery/Subelement Formatter would be a beautiful thing

  • From what I can see there is no way currently of being able to click on the Down status, and it being able to display that information within the same dashboard without navigating away?

    Could you get it to display the results in a separate widget within the same dashboard, for example? 

    I don't see a way of doing that, as the filter is set at the URL level, which presumably is why you need it to link to a secondary dashboard to display that information. 

THWACK - Symbolize TM, R, and C