Recent Discussions
Website Data in Table Widget
I have a number of websites that are being monitored. I would like to create a dashboard with a table of response times from the Washington LogicMonitor site. However the Table widget does not have an option to include Website data - only resources which seem to exclude data from Website monitoring. I can add graphs and alerts of website data but cant seem to find a way to access the raw website polling data in the Table widget. Is this a known limitation?bleclair8 hours agoNeophyte61Views1like5CommentsBMC Remedy Integration
Hi all I'm looking to do an ITSM integration with BMC Helix/Remedy, which isn't natively supported. It looks as though we can create a new incident by making a POST request to their API. But, if we want to do an update, it seems their API requires that you first query the API for an internal ID for the Incident, then make a second call with the update referring to that internal ID. Apparently this behaviour in the API cannot be altered. I don't see any way to achieve this in LogicMonitor. Has anyone successfully integrated LM and BMC Helix/Remedy? I think we will likely need to build something to sit between and receive the updates from LM and then call the Helix API. Interested in hearing what others may have done to achieve this. DaveDave_Lee12 hours agoAdvisor216Views0likes2CommentsLM API Auth - Bearer or LMv1 Token
Hi all I've been using the Logic Monitor API for a while and tend to use the LMv1 token auth method. You have to calculate a base64 signature for each request, which is fine, I've written a function to handle that for me. But, given that Bearer tokens are available, I wonder if I'm just making this all a bit too difficult on myself 🤣 As I understand it, if the API call was intercepted somehow, exposing the signature calculated from an LMv1 token would be less problematic because it's not the token itself, it has a limited lifetime and is valid just for the endpoint that was being used on that API call. Am I thinking along the rights lines security wise, or should I just make my life a little easier and switch to using Bearer tokens? DaveDave_Lee12 hours agoAdvisor218Views1like1Commentexception: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.SteveBamford20 hours agoNeophyte185Views0likes4CommentsAPI v3: Alert ServiceNow field
Sarah_Terry​ The V4 API can view/modify the ServiceNow link. Please add this to APIv3 (or permit system integration access to APIv4)? { "alertExternalTicketUrl" : { "servicenowIncidentLinks" : { "INC0010101" : "https://acme.service-now.com/now/nav/ui/classic/params/target/incident.do%3Fsys_id%3D1234211bda7ad090a6c7feaac8915678" } } }David_Bond4 days agoProfessor266Views0likes3CommentsMonitoring Azure Application Registrations
Does anyone know if LogicMonitor can monitor Application Registrations in Azure? It does not appear on the list of services when configuring Azure cloud integration. It is quite important as we have had various integrations break because of the lack of visibility when application registrations expire.Gareth_Evans4 days agoNeophyte48Views0likes2CommentsLM / ServiceNow Integration
I'm working on some API commands for ServiceNow from LogicMonitor and am trying to see if there's a way to see further information from the return payload from ServiceNow when a ticket is generated via the integration. In particular, I'm trying to capture the sys_id field from ServiceNow so that I can use this to access the ticket in an escalation step using a custom HTTPS API command. I can see the payload includes sys_id in the integration logs, and indeed LogicMonitor uses it to generate the link to the ticket on the alert screens. Does anyone know if there's a token or such that can be used to access this info, or if there would be a way of storing it for access?Jason_Clemons4 days agoNeophyte60Views0likes1CommentHow do you organize your resources? Folder structure...
Hi, We are looking into our LM system and trying to figure out if we are using it the most efficient way. I'm wondering if others might share how you lay out your devices in folders to make it easier to handle alerting and assign tickets to the right departments and things like that. We have top-level folders like: Data Center Hardware & Network Hardware which send tickets to two different teams. We then have folders broken up by Tier like: Prod Database Servers Prod Kubernetes Servers Prod AIX Servers Prod Servers We then have UAT versions of the above and Non-Prod versions of the above. They all have various subfolders underneath them based on product or client. All the alerts for any of the Database Server groups go to our DBA team, the Kub alerts go a different team, etc. That's all fine. Under the more general "Prod Servers" group, most alerts go to one team, but there are some specialized ones that go to other teams. We handle this by having a bunch of Alert Rules to pull out those custom ones before they get to the make Rule that sends everything to the main team. We also send alerts to different teams based on the severity of the alert. Anything that is an Error alert generally goes to the team that will resolve the issue. However, all Critical alerts go to a 24/7 team specifically so they can alert someone and then send them the ticket. This is done by having even more alert rules to handle the alerts based on the severity. The ticket routing is done by having a ton of Integrations with the ticketing system that are all hard-coded to send tickets to each individual team. Anyway, just curious how everyone else organizes things, how you handle alerts, how you route tickets, etc. Out system was setup many years ago, and I'm sure there are improvements we can make, so just looking for other thoughts. Thanks.Kelemvor4 days agoExpert33Views1like2CommentsAlert Severity in LM vs Priority in ServiceNow
I know that LogicMonitor deals with Alert Severity. In ServiceNow, Incidents also have the concept of Priority. I'm wondering, does LogicMonitor have an equivalent of Priority that can be leveraged in the product innately? I am not referring to Alert Rules and Priority, I mean SNOW's P1, P2, P3, P4 style of concept, used in Incidents. I don't see anything right off in the product, and I've been using it for a few years, but sometimes I miss features in the busy day-to-day. I'm not even sure I have a business need. But we do send some alerts from LM to SNOW and I wanted to make sure there isn't some other "Priority" metric or equivalent? Occasionally I get asked about it. Thanks!SolvedLewis_Beard4 days agoProfessor85Views1like3CommentsI'm getting a bit bored with this ....
Can you create a default collector escalation chain setting .....Andy_C5 days agoNeophyte259Views0likes1Comment