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.
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.
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.
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.
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.
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.
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:
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:
- Networks Summary [Parent]
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.
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:
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:
- Servers Summary [Parent]
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"
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.
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.