LogicMonitor Community logo
     
    • Product Hub
    • Product Forums
      • LM Envision Forum
      • Catchpoint (IPM) Forum
      • Edwin AI Forum
    • Product Updates
      • All Discussions
      • Blogs
      • Feature Requests
      • Product Power Hour
      • End of Life Updates
    • Advocacy
      • MVP Program
      • MSP Connection
    • Learn
      • Welcome to the LM Community
      • Customer Onboarding
      • LM Community News
      • LM Academy
      • Catchpoint Resource Library
      • Release Notes
      • Technical Documentation
    • Events
    • User Groups
    •      
    Discussions
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    Discussions
    LogicMonitor Community logo

    Prevent disruptions, resolve issues faster, and safeguard critical services with the unified observability platform built for predictive, AI-powered IT operations.

    Quick Links
    • Events
    • User Groups
    Social
    #LogicMonitor
    © 2026 LogicMonitor Community  All Rights Reserved.
    Powered byBevy logo
    • TagsChevronRightIcon
    Dashboard
    • Sky Donnell

      End of Life Updates

               
      Sky Donnell
      Posted 1 week ago
      Deprecation of UIv3 Dashboards
                       

      Following our earlier announcement about the deprecation of UIv3 Dashboards, we successfully completed the transition last night.  This marks another major milestone in our move to UIv4, bringing us closer to delivering a fully modernized experience for our customers. As of last night, UIv3 Dashboards is no longer accessible within the LogicMonitor platform. Dashboard functionality is fully supported in UIv4 , where all users now benefit from improved performance, greater flexibility, and a more intuitive experience . We’ve created a community blog post to help customers navigate the transition, covering key changes, what to expect, and tips to get the most value from the new dashboards. Please check out the videos, and we trust you will enjoy your new UIv4 Dashboard experience.

                                             
      0
               
    • Alec Greene

      Product Discussions

               
      Alec Greene
      Posted 3 months ago
      Public Dashboards Workaround (NOC, Wallboard, you name it)
               

      Hi All, Figured I'd put this here as I know a lot of folks would like this and don't want to mess with timeout = 0 or user settings. This process is pretty straight forward and requires minimal HTML knowledge and a way to host local HTML files to show on any screen. If you want a dashboard experience you can display on a NOC screen, wallboard, or shared monitor without logging into the LM UI , the simplest path is to use Shared Widgets and embed them into a single web page. 1) Choose what you want to show Start with an existing dashboard and decide which widgets should be visible externally OR build a purpose-made dashboard. 2) Generate the Widget Access / Embedded URL (per widget) For each widget: Edit / Configure widget Copy the Widget access URL / Embedded URL LogicMonitor docs (step-by-step): https://www.logicmonitor.com/support/dashboards-and-widgets/managing-widgets/sharing-widgets-via-embedded-urls LogicMonitor dashboards normally require authentication, but Shared Widgets generate a token-protected link that you can safely embed into an internal page. 3) Build one HTML “container” page (using iframes) Create a simple HTML page and embed each widget URL with an <iframe> (one iframe per widget). Example skeleton: <!doctype html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>LogicMonitor Kiosk</title> <style> body { margin: 0; background: #000; } .grid { display: grid; gap: 8px; padding: 8px; height: 100vh; grid-template-columns: 1fr 1fr; } iframe { width: 100%; height: 100%; border: 0; background: #111; } </style> </head> <body> <div class="grid"> <iframe src="PASTE_WIDGET_EMBED_URL_1"></iframe> <iframe src="PASTE_WIDGET_EMBED_URL_2"></iframe> <iframe src="PASTE_WIDGET_EMBED_URL_3"></iframe> <iframe src="PASTE_WIDGET_EMBED_URL_4"></iframe> </div> </body> </html> 4) Host the HTML page somewhere internal (so it has its own URL) Host that HTML file on: SharePoint (common choice) Any internal web server / intranet page you trust Once it’s hosted, you now have one stable URL to load in a kiosk browser. 5) Optional: rotate views like a slideshow LogicMonitor doesn’t currently provide a native “slideshow mode” for shared dashboards, but you can get the same effect with browser tooling. Two common options: Tab rotator : open multiple tabs and cycle through them automatically URL rotator : maintain a list of URLs and rotate on a timer (survives browser restarts better) Chrome Web Store and other browser web stores has several extensions that do this.

                                             
      0
               
    • Amankumarsingh

      LM Exchange

               
      Amankumarsingh
      Posted 5 months ago • Last reply 5 months ago
      How to Create a Dashboard Widget for “Sensitive” Windows Servers?
               

      Hi Community, I’m looking for best practices to create a dashboard widget that highlights Windows servers which are more “problematic” or sensitive —for example, servers that frequently trigger CPU, Memory, or Disk alerts . Goal: Identify servers with high alert frequency or severe resource issues. Display them in a widget so they stand out for quick troubleshooting.

                                             
      1
               
    • Kel L

      Product Discussions

               
      Kel L
      Posted 5 months ago • Last reply 5 months ago
      Can I create a dashboard that let's the user pick which groups of servers they want to see?
               

      Hi, We have servers in the US and in Canada.  We also have various types of servers such as App, Web, etc.  I have users who need to see the CPU and Memory for a certain group of servers together.  E.g. alll the US App servers or the Canada Web servers. Is there any way to do this with a single dashboard that would somehow allow the user to specify which servers or server group they want to see at the top and it would then update all the widgets on the dashboard to show those servers? I currently have a dashboard for US App, US Web, CA App, CA Web, etc.  They are all hard coded to the proper servers.  I was hoping for a way they coudl either: Pick from a dropdown list of which type of server they want, and the widgets would then update to show those predefined servers. type in their own filter like US-APP* and have the widgets update to reflect the proper servers. Is anything like that possible? Thanks.

                                             
      1
               
    • Gary Morley

      Feature Requests

               
      Gary Morley
      Posted 2 years ago • Last reply 7 months ago
      dashboard display user timeout override
                       

      We have several ( hundreds of ) dashboards which show pertinent data to the relevant teams here. Each set of teams sit in separate areas, and they all need to see their dashboards. As such, we have set up dashboard stations ( computers with a bunch of screens attached ) so they can put all their dashboards in their own areas on a specific wall etc.. The only portal which is timing out is the LogicMonitor portal. Is there any way to override a specific account to not be bound by the portal settings for idle logons? We need to keep our. timeout settings as 4 hrs for all other users, but these specific screens need to remain forever not being logged out ( as much as is possible )  Is it possible to have a per-account override for “user session timeout” ?

                                             
      7
               
    • Cole McDonald

      LM Exchange

               
      Cole McDonald
      Posted 2 years ago • Last reply 1 year ago
      NOC Rollup Status Dashboards for MSPs
                               

      LM doesn't come with it out of the box, so I built the NOC Dashboard I've wanted.  It provides high level, at-a-glance health indicators for each of our client environments we manage.  This makes a great "big board" for a NOC room or a second screen status board for work from home NOC/Support folks.  I do have three examples in this code for ways to filter for specific teams/purposes.  This all collapses for ease of reference correctly in Powershell ISE on windows. Line 282 references a dataSource I wrote that counts frequency of specific eventlog events to illustrate potential brute force attempts (CTM are my initials, we tag our scripts to make finding the best source of answers faster in the future - old habit from pen & paper change logs from a previous job). As any screenshots would contain client names, I'm unable to post any screen shots of the results of this, but my current settings for my Main dashboard are (This is the first Dashboard I've made that looks better in UIv4 than 3): ...   #!!! These two need to be changed. First is a string, second an integer #!!! See the comment block below for instructions # The first chunk of your company's logicmonitor URL $company = "yourCompanyNameHere" # ID of the group to be used as a source for the NOC widget items $parentGroupID = <parentGroupID> <# Netgain Technology, llc ( https://netgaincloud.com ) 2/26/2024 - Developed by Cole McDonald Disclaimer: Neither Netgain nor Cole McDonald are not responsible for any unexpected results this script may cause in your environment. To deploy this: - COLLECTOR: you will need a collector for scripting, this will be the single applies to target. You may need to increase the script timeout depending on the size of your device deployment. - DASHBOARD: you will need a Dashboard with a NOC widget on it. The name can be whatever you'd like, there will be a name change in the "name" property for the initial array. In the case of the first example here, "NOC - Master" - PARENT GROUP: you will need to identify the ID# of the group you wish to use as the source for the subgroup list and set the $parentGroupID to the appropriate ID# Purpose: Create an auto-updating high level NOC dashboard that can show - Rollup state for a list of client subgroups from our \Clients group - Group Indicators for a specific dataSource - Group indicators for a subset of devices within each group After the API region, there are three separate dashboards referenced to illustrate the 3 methods for using this dataSource. NOTE: my code uses backticks for line continuation. Where possible in my code, each line indicates a single piece of information about the script's algorithm and the first character in each line from a block indicates the line's relationship to the one above it. #> #region Rest API Initialization and Functions # Init variables used in the RESTApi functions $URLBase = "https://$company.logicmonitor.com/santaba/rest" $accessID = "##ApiAccessID.key##" $accessKey = "##ApiAccessKey.key##" #-------- The Functions ---------- function Send-Request { param ( $cred , $URL , $accessid = $null, $accesskey = $null, $data = $null, $version = '3' , $httpVerb = "GET" ) if ( $accessId -eq $null) { exit 1 } <# Use TLS 1.2 #> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 <# Get current time in milliseconds #> $epoch = [Math]::Round( ( New-TimeSpan ` -start (Get-Date -Date "1/1/1970") ` -end (Get-Date).ToUniversalTime()).TotalMilliseconds ) <# Concatenate Request Details #> $requestVars = $httpVerb + $epoch + $data + $resourcePath <# Construct Signature #> $hmac = New-Object System.Security.Cryptography.HMACSHA256 $hmac.Key = [Text.Encoding]::UTF8.GetBytes( $accessKey ) $signatureBytes = $hmac.ComputeHash( [Text.Encoding]::UTF8.GetBytes( $requestVars ) ) $signatureHex = [System.BitConverter]::ToString( $signatureBytes ) -replace '-' $signature = [System.Convert]::ToBase64String( [System.Text.Encoding]::UTF8.GetBytes( $signatureHex.ToLower() ) ) <# Construct Headers #> $auth = 'LMv1 ' + $accessId + ':' + $signature + ':' + $epoch $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add( "Authorization", $auth ) $headers.Add( "Content-Type" , 'application/json' ) # uses version 2 of the API $headers.Add( "X-version" , $version ) <# Make Request #> $response = Invoke-RestMethod ` -Uri $URL ` -Method $httpVerb ` -Body $data ` -Header $headers ` -erroraction SilentlyContinue ` -warningaction SilentlyContinue Return $response } function Get-LMRestAPIObjectListing { param ( $URLBase , $resourcePathRoot , # "/device/devices" $size = 1000 , $accessKey , $accessId , $version = '2' ) $output = @() $looping = $true $counter = 0 while ($looping) { #re-calc offset based on iteration $offset = $counter * $size $resourcePath = $resourcePathRoot $queryParam = "?size=$size&offset=$offset" $url = $URLBase + $resourcePath + $queryParam # Make Request $response = Send-Request ` -accesskey $accessKey ` -accessid $accessId ` -URL $url ` -version $version if ( $response.items.count -eq $size ) { # Return set is full, more items to retrieve $output += $response.items $counter++ } elseif ( $response.items.count -gt 0 ) { # Return set is not full, store date, end loop $output += $response.items $looping = $false } else { # Return set is empty, no data to store, end loop $looping = $false } } write-output $output } # Get Dashboards $resourcePath = "/dashboard/dashboards" $dashboards = Get-LMRestAPIObjectListing ` -resourcePathRoot $resourcePath ` -accessKey $accessKey ` -accessId $accessID ` -URLBase $URLBase # Get Widgets $resourcePath = "/dashboard/widgets" $widgets = Get-LMRestAPIObjectListing ` -resourcePathRoot $resourcePath ` -accessKey $accessKey ` -accessId $accessID ` -URLBase $URLBase # Get Groups $resourcePath = "/device/groups" $Groups = Get-LMRestAPIObjectListing ` -resourcePathRoot $resourcePath ` -accessKey $accessKey ` -accessId $accessID ` -URLBase $URLBase #endregion function generateJSON { param( $dashInfo, $clientnames, $deviceDisplayName = "*", $DSDisplayName = "*" ) $itemArray = @() foreach ($name in $clientnames) { $itemArray += @{ "type" = "device" "deviceGroupFullPath" = "Clients/$name" "deviceDisplayName" = $deviceDisplayName "dataSourceDisplayName" = $DSDisplayName "instanceName" = "*" "dataPointName" = "*" "groupBy" = "deviceGroup" "name" = "`#`#RESOURCEGROUP`#`#" } } # Write JSON back to the API for that widget $outputJSON = "`n`t{`n`t`t`"items`" : [`n" foreach ($item in $itemArray) { $elementJSON = @" { `"type`" : `"$($item.type)`", `"dataPointName`" : `"$($item.dataPointName)`", `"instanceName`" : `"$($item.instanceName)`", `"name`" : `"$($item.name)`", `"dataSourceDisplayName`" : `"$($item.dataSourceDisplayName)`", `"groupBy`" : `"$($item.groupBy)`", `"deviceGroupFullPath`" : `"$($item.deviceGroupFullPath)`", `"deviceDisplayName`" : `"$($item.deviceDisplayName)`" } "@ if ($item -ne $itemArray[-1]) { $outputJSON += "$elementJSON,`n" } else { # Last Item $outputJSON += "$elementJSON`n`t`t]`n`t}" } } write-output $outputJSON } # Get Client Names from groups $clientnames = ( $groups ` | where parentid -eq $parentGroupID ` | where name -notmatch "^\." ).name | sort #ID Master Dashboard # declare dashboard name and set default id and widgetid to use in the loop later $masterDash = @{ id=0; widgetid=0; name="NOC - Master" } $master = $dashboards | ? name -eq $masterDash.name if (($master.name).count -eq 1) { $masterDash.id = $master.id $masterDash.widgetid = $master.widgetsConfig[0].psobject.Properties.name $outputJSON = generateJSON ` -dashInfo $masterDash ` -clientnames $clientnames $resourcePath = "/dashboard/widgets/$($masterDash.widgetid)" $url = $URLBase + $resourcePath $widget = Send-Request ` -accessKey $accessKey ` -accessId $accessID ` -data $outputJSON ` -URL $URL ` -httpVerb "PATCH" } #ID Network Dashboard # declare dashboard name and set default id and widgetid to use in the loop later $networkDash = @{ id=0; widgetid=0; name="NOC - Network" } # preset filters for specific dashboard targeting by device $networkDeviceDisplayNameString = "*(meraki|kemp)*" $network = $dashboards | ? name -eq $networkDash.name if (($network.name).count -eq 1) { $networkDash.id = $network.id $networkDash.widgetid = $network.widgetsConfig[0].psobject.Properties.name $outputJSON = generateJSON ` -dashInfo $networkDash ` -clientnames $clientnames ` -deviceDisplayName $networkDeviceDisplayNameString $resourcePath = "/dashboard/widgets/$($networkDash.widgetid)" $url = $URLBase + $resourcePath $widget = Send-Request ` -accessKey $accessKey ` -accessId $accessID ` -data $outputJSON ` -URL $URL ` -httpVerb "PATCH" } #ID Security Dashboard # declare dashboard name and set default id and widgetid to use in the loop later $securityDash = @{ id=0; widgetid=0; name="NOC - Security" } # preset filters for specific dashboard targeting by datasource $securityDataSourceDisplayNameString = "Event Frequency Sec:4625 CTM" $security = $dashboards | ? name -eq $securityDash.name if (($security.name).count -eq 1) { $securityDash.id = $security.id $securityDash.widgetid = $security.widgetsConfig[0].psobject.Properties.name $outputJSON = generateJSON ` -dashInfo $securityDash ` -clientnames $clientnames ` -DSDisplayName $securityDataSourceDisplayNameString $resourcePath = "/dashboard/widgets/$($securityDash.widgetid)" $url = $URLBase + $resourcePath $widget = Send-Request ` -accessKey $accessKey ` -accessId $accessID ` -data $outputJSON ` -URL $URL ` -httpVerb "PATCH" }  

                                             
      5
               
    • Kevin Ford

      Product Discussions

               
      Kevin Ford
      Posted 5 years ago • Last reply 1 year ago
      Adding Weather to Map Widgets
               

      LogicMonitor's Map widgets are a great and easy way to plot resources/groups geographically, including their status. A question that comes up occasionally is if it's possible to show weather information on top of these maps. While there's currently not a native option to show weather on a Map widget, it is possible to inject a weather layer onto an existing map with a bit of JavaScript. Below is a link to a sample dashboard that can insert various types of weather info onto Map widgets.  Simply save the linked JSON file to your local workstation, then in your LogicMonitor portal go to Dashboards and click Add > From File.   Dynamic_Weather_Overlay.json The magic happens in JavaScript embedded in the source of the Text widget. Feel free to explore the source code by entering the Text widget's Configure dialog and clicking the 'Source' button. In typical overkill fashion, I included the option for several different types of weather information. The script looks for the following text (regardless of case) in the Map widget's title and adds the appropriate weather/info layer: "Radar" or "Precip" "NEXRAD Base" "NEXRAD Echo Tops" "MRMS" "Temperature" (OpenWeatherMap.org API key required) "Wind Speed" (OpenWeatherMap.org API key required) "Cloud Cover" or "Satellite" (OpenWeatherMap.org API key required) "fire"  (for including perimeters of active wildfires) Prerequisites If you want to use one of the map types noted above as needing an API key (the other types use free APIs that don't require a key), you'll need to register for a free account on OpenWeatherMap.org . Once you've obtained an API key, just add a new dashboard token named 'OpenWeatherAPIKey' and paste your key into its value field. Alternatively, you can also hard-code the key directly in the 'openWeatherMapsAPIKey' variable near the top of the script. The weather overlays should auto-update when the widgets perform their regular timed refresh. For instance, new radar imagery is made available every 10 minutes and will update automatically. Weather sources currently defined within this script: RainViewer.com  - Excellent source of global weather imaging data. Updates approx. every 10 minutes. Used by the script for radar/precipitation maps. Open Geospatial Consortium  - Hosted by Iowa State University, an excellent free source of weather data. Since it sources data from the US National Weather Service, its data is local just US and Canada. Used by the script for NEXRAD and MRMS data. OpenWeatherMap.org  - Good source for some weather data such as wind speed, temperature, and cloud cover. Requires use of an API key, which is available for free. National Interagency Fire Center - For data about active US wildfires.   Known Issues: When switching to a different dashboard containing a Map widget, it's possible weather may still be visible on the new dashboard. If that happens just refresh the page.

                                             
      3
               
    • ldoodle

      Product Discussions

               
      ldoodle
      Posted 2 years ago • Last reply 2 years ago
      Alert List Dashboard, not a Widget on a Dashboard
                       

      Does anyone else have a Dashboard that contains just a single widget, an Alert List widget, so show every alert? It’s really annoying having the double scrollbar:

      We should have a special Dashboard that  is  an Alert List to avoid this problem.

                                             
      10
               
    • Cole McDonald

      Product Discussions

               
      Cole McDonald
      Posted 2 years ago • Last reply 2 years ago
      Access to Group or Device properties from a text widget
               

      I’m looking for a way to display custom properties from an arbitrary group.  We have a dashboard that shows widgets from a specific client group using the group/device pulldown text widget built by @Kevin Ford :  Dynamic Dashboards | Community (logicmonitor.com) . I’m trying to figure out how to get to custom properties set at the group to display info about that particular client for our staff to have easy reference to. Something like ##defaultResourceGroup##/##example.property## We have our client’s groups tagged with specific contact and support links (KB, Azure Portal, etc...) that would be useful to have direct access to.

                                             
      1
               
    • David Bond

      Open Beta UIv4

               
      David Bond
      Posted 2 years ago • Last reply 2 years ago
      UIv4 breaks SVG Text Widgets
               

      When a UIv4 Dashboard Widget is pure SVG content, it works fine in UIv3, but is broken in UIv4.  This breaks our smart widgets for network diagrams.  Simple example: UIv3:

      UIv4:

                                             
      6