Recent Discussions
Dark Theme?
Hello, We have recently bought the LM license and we set it up. Out monitoring screen is giant and the old system had a nice dark theme. Now the room is brighter than the sun. Is there any Dark theme planned or available? I don't want, and I can't, use an exernal, pesky, browser extension that we don't know for obvious reasons. Is there any valid reason why LM does not have a dark theme in 2025? This is not a cheap software, so I was expecting more? We are already considering another monitoring solution.Massi12 hours agoNeophyte121Views0likes4CommentsNo instances on API response
Hello everyone, Sorry if this is a repeat topic here, but I'm having some trouble polling data from our new LogicMonitor setup via API. As I understand it, I'll need device ID, device datasource ID, instance ID, all together to get graph data over a specific time period. I can successfully pull the first two (device id and datasource id), but when I pull the instances resource, I'm not getting any response. Example resource path: /device/devices/{device id}/devicedatasources/{datasourceid}/instances The response I get is: { "total": 0, "items": [], "searchId": null, "isMin": false } indicating that there's no instances. This is where I seem to get stuck, I don't seem to be able to move on any further. Has anybody run into this, and can give me a direction for next steps? Anything is appreciated!juramir17 hours agoNeophyte88Views0likes1Commentexception:groovy.lang.MissingMethodException: No signature of method:
Working on my NetScan script for our Arista AP's still and when trying to execute a http [DELETE] I get the above error when following the Delete documentation here which suggests I can just call the URL and header. Currently this is just using the collector debug !groovy command If I then try with blank payload I get a different error: exception:java.lang.NullPointerException First Error with no payload in call: exception:groovy.lang.MissingMethodException: No signature of method: com.santaba.agent.groovyapi.http.Client.delete() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [https://awm14001-c4.srv.wifi.arista.com/wifi/api/session, [Content-Type:application/json, ...]] Possible solutions: delete(java.lang.String, java.lang.String, java.util.Map), release(), release(), close(), every(), get(java.lang.String) java.lang.RuntimeException: groovy.lang.MissingMethodException: No signature of method: com.santaba.agent.groovyapi.http.Client.delete() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [https://awm14001-c4.srv.wifi.arista.com/wifi/api/session, [Content-Type:application/json, ...]] Possible solutions: delete(java.lang.String, java.lang.String, java.util.Map), release(), release(), close(), every(), get(java.lang.String) at com.logicmonitor.groovy.objects.BaseWrapper.invoke(BaseWrapper.java:124) at com.logicmonitor.groovy.objects.lang.ScriptWrapper.run(ScriptWrapper.java:31) at com.santaba.agent.groovy.executor.GroovyScriptShell.execute(GroovyScriptShell.java:71) at com.santaba.agent.util.GroovyScriptExecutor.execute(GroovyScriptExecutor.java:148) at com.santaba.agent.debugger.GroovyTask._executeInAgent(GroovyTask.java:210) at com.santaba.agent.debugger.GroovyTask._handle(GroovyTask.java:189) at com.santaba.agent.debugger.DebugTask.run(DebugTask.java:176) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: groovy.lang.MissingMethodException: No signature of method: com.santaba.agent.groovyapi.http.Client.delete() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [https://awm14001-c4.srv.wifi.arista.com/wifi/api/session, [Content-Type:application/json, ...]] Possible solutions: delete(java.lang.String, java.lang.String, java.util.Map), release(), release(), close(), every(), get(java.lang.String) at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:71) at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:48) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136) at Script85.run(Script85.groovy:76) at jdk.internal.reflect.GeneratedMethodAccessor68.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.logicmonitor.groovy.objects.BaseWrapper.invoke(BaseWrapper.java:118) ... 9 more Second Error with Blank Payload: exception:java.lang.NullPointerException java.lang.RuntimeException: java.lang.NullPointerException at com.logicmonitor.groovy.objects.BaseWrapper.invoke(BaseWrapper.java:124) at com.logicmonitor.groovy.objects.lang.ScriptWrapper.run(ScriptWrapper.java:31) at com.santaba.agent.groovy.executor.GroovyScriptShell.execute(GroovyScriptShell.java:71) at com.santaba.agent.util.GroovyScriptExecutor.execute(GroovyScriptExecutor.java:148) at com.santaba.agent.debugger.GroovyTask._executeInAgent(GroovyTask.java:210) at com.santaba.agent.debugger.GroovyTask._handle(GroovyTask.java:189) at com.santaba.agent.debugger.DebugTask.run(DebugTask.java:176) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.NullPointerException at com.santaba.agent.groovyapi.http.Client._processResponse(Client.java:580) at com.santaba.agent.groovyapi.http.Client.request(Client.java:429) at com.santaba.agent.groovyapi.http.Client.delete(Client.java:409) at com.santaba.agent.groovyapi.http.Client$delete$4.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:144) at Script91.run(Script91.groovy:76) at jdk.internal.reflect.GeneratedMethodAccessor68.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.logicmonitor.groovy.objects.BaseWrapper.invoke(BaseWrapper.java:118) ... 9 more The Code: /******************************************************************************* * Arista WIFI Integration with CUE for discovery of the AP's ******************************************************************************/ import com.santaba.agent.groovyapi.http.* import com.santaba.agent.groovy.utils.GroovyScriptHelper as GSH import com.logicmonitor.mod.Snippets import com.santaba.agent.AgentVersion import java.text.DecimalFormat import groovy.json.JsonOutput import groovy.json.JsonSlurper // To run in debug mode, set to true Boolean debug = false // To enable logging, set to true Boolean log = false // Set props object based on whether or not we are running inside a netscan or debug console def props try { hostProps.get("system.hostname") props = hostProps debug = true // set debug to true so that we can ensure we do not print sensitive properties } catch (MissingPropertyException) { props = netscanProps } //String key = props.get("AristaWIFI.api.key") //String token = props.get("AristaWIFI.api.token") //String clientId = props.get("AristaWIFI.api.clientId") String key = [REMOVED] String token = [REMOVED] String clientId = "logicmonitor" //if (!key) { // throw new Exception("Must provide AristaWIFI.api.key to run this script. Verify necessary credentials have been provided in Netscan properties.") //} //if (!token) { // throw new Exception("Must provide AristaWIFI.api.token credentials to run this script. Verify necessary credentials have been provided in Netscan properties.") //} //if (!clientId) { // throw new Exception("Must provide AristaWIFI.api.clientId credentials to run this script. Verify necessary credentials have been provided in Netscan properties.") //} //def logCacheContext = "${org}::arista-wifi-cloud" //Boolean skipDeviceDedupe = props.get("skip.device.dedupe", "false").toBoolean() //String hostnameSource = props.get("hostname.source", "")?.toLowerCase()?.trim() Integer collectorVersion = AgentVersion.AGENT_VERSION.toInteger() // Bail out early if we don't have the correct minimum collector version to ensure netscan runs properly if (collectorVersion < 32400) { def formattedVer = new DecimalFormat("00.000").format(collectorVersion / 1000) throw new Exception("Upgrade collector running netscan to 32.400 or higher to run full featured enhanced netscan. Currently running version ${formattedVer}.") } externalHost= "awm14001-c4.srv.wifi.arista.com"; httpClient = HTTP.open(externalHost,443); httpClient.setHTTPProxy('proxy.iggroup.local',8080); // Log in to arista loginurl = "https://awm14001-c4.srv.wifi.arista.com/wifi/api/session" payloadstring = '{"type":"apiKeycredentials","keyId":"'+key+'","keyValue":"'+token+'","timeout":3600,"clientIdentifier": "'+clientId+'"}'; def payload = payloadstring; println payload; def loginResponse = httpClient.post(loginurl,payload,["Content-Type":"application/json"]); if ( !(httpClient.getStatusCode() =~ /20/) ) { // Error has occured println "Authentication Failure"; println httpClient.getStatusCode(); println loginResponse; return(1); } String RawCookie = httpClient.getHeader("Set-Cookie") //Have Kept but as yet not needed will remove if not needed.. String httpResponseBody = httpClient.getResponseBody() //Retrieve the Cookie to use from the header. AristaCookie = RawCookie.split(';')[0] println httpClient.getStatusCode() String cookieString = '"'+AristaCookie+'"' def logoutheaders = ["Content-Type":"application/json","Cookie":cookieString] //println logoutheaders def logoutResponse = httpClient.delete(loginurl,logoutheaders) <- With No payload def logoutResponse = httpClient.delete(loginurl,'{}'logoutheaders) <- With blank payload I have just tried "" as the payload as well. logoutResult = httpClient.getStatusCode() if ( !(httpClient.getStatusCode() =~ /20/) ) { //Error has occured println "Logout Failure"; println httpClient.getStatusCode(); println loginResponse; return(1); } println AristaCookie; println httpResponseBody; println logoutResponse; def LMDebugPrint(message) { if (debug) { println(message.toString()) } } The Same URL and the same header with no payload works if I work in python obviously appreciate they are different languages, just confirming that the formatting is correct.SteveBamford18 hours agoNeophyte146Views0likes2CommentsServiceNow Integration - Auto closing alerts
Greetings! Our ServiceNow/LogicMoitor integration has been in place close to 2 years now. Recently, one of our Infrastructure Engineers asked if it were possible to delay the auto-resolving of a ticket if it's actually being worked by someone. We have run into scenarios where a ticket gets created, an Engineer gets assigned the ticket, they are actively investigating the issue, the alert clears, and the ticket gets auto resolved, and the Engineer doesn't get credit for working the ticket. Is there any way to prevent auto-resolving a ticket if a user is actively working the ticket?SolvedRickRod21 hours agoNeophyte155Views0likes2CommentsCould you please guide me on how I can manage the usage of LM logs?
It appears that our current usage of LogicMonitor logs storage has exceeded the allocated limit of 180GB. How could we address this over usage issue? Do you have ideas on how to prevent this from happening in the future?tuco2 days agoNeophyte36Views0likes1CommentUIv4 Dashboards Page - alert widget
In the UIv3 dashboards page, the Alerts widget contains a "Began" column which contains the time the alert triggered, and if the alert has cleared it also contains the DURATION of the alert. In UIv4, the column was renamed to "Reported At" and no longer shows the duration of cleared alerts. Instead it shows how long ago they triggered, which isn't useful at all since the column already shows the date/time that the alert triggered. It was much more useful when the Cleared alerts showed the Duration in the Began column. Please change it back and remove the "X minutes ago" which shows currently. Below screenshot shows the difference between the columns in UIv3 (top) vs UIv4 (bottom). The way it displays in UIv3 is much better.Matt_Whitney2 days agoExpert46Views2likes1CommentIPMI service on host _hostname is reporting an error exit code of 139.0
Hi LM users! We have an alert for IPMI service status monitoring saying: IPMI service on host _myhostname is reporting an exit code of 139.0, which puts it in a state of warn. See section 7 of http://ipmiutil.sourceforge.net/docs/UserGuide for error code details. - However, there is no such exit code in the given documentation. When trying Pool Now option for our Dell server (iDRAC 6 - latest firmware and BIOS version) it says following error - *attempting ipmi driver auto-negotiation * auto-negotiation failed (139): * attempting ipmi with lan2 driver forced * lan2 driver failed (139): ipmi_status: 139 However, when running impitool from LogicMonitor collector the ipmitool commands work fine. Have you ever experienced similar issue?Clark_Kent2 days agoNeophyte92Views0likes0CommentsCustom Config Collection
Has anyone created custom modules to collect configs without having to log in and out of a switch/router as much? Right now, when I have configs getting collected from a switch via SSH, it logs in and out twice for each type of thing I'm collecting. We have it collecting configs and a few other commands the NOC folks asked if it could grab, so there are eight entries every time a collection is done. We also have these devices set up to log all sign ins and outs, so this fills the logs quite a bit every time it is run and makes it difficult to read other activity being logged. The active discovery and collection scripts on these config sources (for example SSH_Interactive_Dynamic) seem very similar so I don't understand why there is a need to have both. Ideally, one script would login, collect the four things I want it to collect, and sign out. I'm looking through the developer documentation a bit now, it's been a long time since I've written any code at this level though so any help would be appreciated Thank you!pgordon2 days agoExpert113Views1like0CommentsAll my collectors are going down every 24 hours.
Hi, Starting last week Thursday, all my collectors, across two different LM portals, are going down approximately every 24 hours. Apparently the Watchdog is telling the Agent to reset itself which causes everything to die for 5-10 minutes. It's happening on almost every collector we have. Some do it every day, some skip a day here and there. They ALL started this last week Thursday. We didn't make any global changes and have no idea what the heck happened. Is anyone else dealing with this? There are entries like this that show the Watchdog service told the main Agent server to restart itself. [2025-05-06 20:05:47.876 GMT] [MSG] [CRITICAL] [statusmonitor:::] [StatusListener$1.run:135] Peer request to shutdown, CONTEXT=CAUSE=shutdown cmd, ACTION=quit [2025-05-06 20:05:47.876 GMT] [MSG] [CRITICAL] [statusmonitor:::] [StatusListener$1.run:151] Shutting self down by quit with 0, CONTEXT=MSG=all sockets closed, System.exit(0) now [2025-05-06 20:05:47.882 GMT] [MSG] [INFO] [statusmonitor:::] [RestartUtil._reportEvent:236] Reported restart reason successfully, CONTEXT=type=ReceivedShutdown, reason=Collector receives shutdown command from watchdog. Agent will restart. [2025-05-06 20:05:47.883 GMT] [MSG] [INFO] [statusmonitor:::] [RestartUtil._saveRestartReason:292] Save restart reason successfully, CONTEXT=file=C:\Program Files (x86)\LogicMonitor\Agent\conf\restart.conf [ These are the tickets that they generated showing that it delays a few minutes each day, but is happening almost by clockwork. I opened a ticket via Chat but was told that something is overload the agent and we need to up the collectors sizes. This doesn't really tell what happened last Thursday that started causing the problem so I'm posting here wondering if anyone is having the same issue. Thanks.Kelemvor3 days agoExpert157Views0likes1Comment