Popular Content

Showing content with the highest reputation since 04/28/2018 in all areas

  1. 3 points
    As we move towards a DevOps model, we increasingly have a need for small teams to have full admin access to the tools they use to manage their IT services. When it comes to LogicMonitor, this has proven difficult with the existing role permission model. DevOps pods would like to be able to manage their own datasources, alerts, and escalation chains but this isn't possible unless we give them broad access rights to those areas, which could cause significant harm to other groups of monitoring users. For example, an inexperienced DevOps user could inadvertently modify a datasource that applies to all Windows devices or they could create an alert rule that causes alerts not to be delivered to other users. To solve this problem, I'd propose that LogicMonitor offer alert groups, escalation chain groups, along with the existing datasource groups. Then, LogicMonitor could provide the ability to restrict roles to manage these specific groups. DevOps pods could be given the ability to manage their own custom subset of datasources and set up their own alerts in a rule range after the main set of rules.
  2. 2 points
    After spending some time trying to display instance level auto properties on an Alert widget on a dashboard, it has just been confirmed to me by Dave Lee that it is not possible and there is currently no way to display instance level properties on a dashboard. Since auto properties can hold very useful descriptive information detected during active discovery it would be nice to be able to include this on dashboards as additional information.
  3. 2 points
    We've recently run into issues with users accidentally changing a setting or deleting a device and would like the ability to allow users to Create new devices, but not be able to delete anything or change alert settings. I'd like to either split Manage into Write/Delete groups or add a deny action role that would allow me to give users manage access with a deny delete:*
  4. 1 point
    Kerry, these are awesome. Keep them coming! Would love to see for Cisco switches, CheckPoint FW's, Citrix XA/XD, Citrix NetScaler, and more! Much appreciated, these really do help a lot.
  5. 1 point
    We have a use case to show "Response Times" from a subset of configured Websites. Ideally I'd like this to be in the Big Number widget. We also want to able to chart a subset of my Websites' response times over time in the Chart widget. Anyone found a useful workaround to achieve this? Would LM consider "upgrading" widgets to allow the presentation of Website data? Currently only the SLA widget seems capable of handling Website data.
  6. 1 point
    I would like to see capabilities added to logicmodules so that custom properties leveraged (device or instance) could be presented as not only possible in the corresponding property definition sections, but ideally presented in a meaningful way. A very good example of this is the awesome work @Steve Francis did recently for the interfaces module. Unfortunately, if someone wants to leverage ActualSpeed and such, an ironclad memory or a dive into the LM technical notes and/or source code is necessary. How cool would it be to indicate the additional custom properties as fields in the UI along with the type of data (fillin field, checkbox, radio buttons, etc.) and some hover text or similar explaining the purpose of those. If nothing else, additional custom properties available in a scope should be included with the autocompletion -- right now autocompletion for properties is a hardcoded subset of what is actually possible.
  7. 1 point
    T4WZC3 Initially I created this to monitor the status of DFS shares, but can be used on any Windows share. Monitors for the status as indicated by Microsoft's MSDN site here https://msdn.microsoft.com/en-us/library/aa394435(v=vs.85).aspx Graphs allow you to easily see the status over time.
  8. 1 point
    Please apply a mono space font to the Query field when the data source is using JDBC. This would hugely improve readability and editing of the SQL.
  9. 1 point
    I solved this with the REST API -- I have a script that pulls all the config instances, then commits them into a git repo (one per device group in my case). I use GitLab with an email push trigger, so I get reports on updates more or less as they occur, but obviously that could be handled other ways. I find this beneficial for many reasons, including: * keep a separate copy out of LM so some errant action in LM does not destroy config data and history * enable searching for configuration elements across multiple files (impossible within the UI) * build tools to validate configs against baseline templates or other sorts of analysis * generate way better diff results (the current UI diff viewer REALLY needs a rewrite) * I get to find out all the times LMConfig flakes out, like when it zeroes out config instances if NVRAM is temporarily unavailable I would like to post those here, but you can't post text files it seems. Will see if I can get those into github....
  10. 1 point
    @Joe Williams you shouldn't need the blank $data variable. the $requestVars should just have the $data removed when you're doing a GET. There's two different script samples, one is for a GET and one is for a POST. The issue it looks like what you have above is your $queryParams, this needs to be the way it is in your second example. The auth fails because you're including them in the resourcePath information and that's breaking the authentication hash. In the code you posted second, it should look like this. Hope this helps! <# request details #> $httpVerb = 'GET' $resourcePath = '/setting/collectors' $queryParams = '?fields=id,description,hostname' <# Construct URL #> $url = 'https://' + $company + '.logicmonitor.com/santaba/rest' + $resourcePath + $queryVars <# 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 + $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') <# Make Request #> $response = Invoke-RestMethod -Uri $url -Method $httpVerb -Header $headers <# Print status and body of response #> $status = $response.status $body = $response.data
  11. 1 point
    Are you using PowerShell for this? If so, something like this should work $logfileExists=0 if(test-path D:\path\to\logfile.txt) { $logfileExists=1 } elseif(test-path E:\path\to\logfile.txt) { $logfileExists=1 } else { $logfileExists=0 } $outString="logfileExists="+$logfileExists write-host $outString Otherwise - you can run a command like this $drives = GET-WMIOBJECT win32_logicaldisk | select DeviceID foreach($drive in $drives) { #do a test-path to the path on each drive } Hope that helps.
  12. 1 point
    Any update on this? - April 2018?
  13. 1 point
    Hello LM Team, It would be great if the NOC widget in the Dashboards have the possibility to filter out inactive devices and show only the ones that actually have alerting enabled. For example we have VCenter that have 1500 virtual machines, but only about 10% of them are to be monitored at all times, so by default alerting is disabled for all VM machines from VCenter but these we actually need. Unfortunately the NOC widget will show us everything from that Datasource and it's problematic. Thank you.
  14. 1 point
    P2HEZR - Public IP property source Kind regards, Matthew Kerfoot
  15. 1 point
    Treating all events equally is a very bad policy. A dropped ping, is very different from a syslog message about parity failure in a RAID or DBReplication failure alert. Note in MOST (if not all) situations where we use Syslog....the effects reported would NEVER clear....at all without a tech going in and doing work. the software sending a "cleared" email is the opposite of crying-wolf.....it's crying "all clear" when the wolf is right there chewing on your leg. I'm very frustrated that I have to explain this twice....the customer that suggested it doesn't understand what syslog "is". The engineers that honored the flawed request did that customer...and the rest of us...a grave disservice. You've forced me to train my people to ignore certain messages. The work around we have now is to filter all your Cleared messages: Still, not sure why you didn't lead with that advisement. You can't convince me to change my opinion on this topic : it was a poor design decision you've made here. In time, I am very certain you will see why I am right.
  16. 1 point
    Yeah the data source we built used the same Get-ChildItem method with the recurse modifier. Worked great when we were looking at small number of folders. Attached the xml if anyone may be looking to do something similar. AD script gets all sub folders one tier down and passes them as wild values. Collection script uses the Get-ChildItem -recurse method to report the size in MB. Again this works great for monitoring a directory with a limited number of sub-directories, but has issues when monitoring a directory with a ton of sub-directories. <?xml version="1.0" encoding="UTF-8" ?> <feed version="1.0" hasPendingRequests="false" > <company></company> <status>200</status> <errmsg>OK</errmsg> <interval>0</interval> <entry type="predatasource"> <version>1478878984</version> <name>FolderSizeTest</name> <displayedas>FolderSizeTest</displayedas> <description></description> <collector>script</collector> <hasMultiInstances>true</hasMultiInstances> <schedule>600</schedule> <appliesTo>false()</appliesTo> <wildcardauto>true</wildcardauto> <wildcardpersist>true</wildcardpersist> <wildcardlinuxscript>ad_script</wildcardlinuxscript> <wildcardlinuxcmdline>type=&#34;powerShell&#34; </wildcardlinuxcmdline> <wildcardwinscript>ad_script</wildcardwinscript> <wildcardwincmdline>type=&#34;powerShell&#34; </wildcardwincmdline> <wildcardgroovyscript># Pass credentials and hostname as arguments $hostname = &#34;##HOSTNAME##&#34; $user = &#34;##wmi.USER##&#34; $pass = &#34;##wmi.PASS##&#34; # Change the password into a secure string to be used in the credentials $remotepass= ConvertTo-SecureString -String $pass -AsPlainText -Force # Build the credential $remotecredential= new-object -typename System.Management.Automation.PSCredential -argumentlist $user,$remotepass # Invoke command to run command remotely on host Invoke-Command -ComputerName $hostname -ScriptBlock { #Folder to get sub-directories hardcoded here (C:\) but could also be set to reference a system property $colItems = (Get-ChildItem C:\ | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) foreach ($i in $colItems){Write-Host &#34;$($i.FullName)##$($i.Name)&#34;} } -credential $remotecredential</wildcardgroovyscript> <wildcardschedule>1440</wildcardschedule> <wildcarddisable>false</wildcarddisable> <agdmethod>none</agdmethod> <agdparams></agdparams> <group></group> <tags></tags> <technology></technology> <adlist><![CDATA[{"agdmethod":"none","method":"ad_script","agdparams":"","id":0,"filters":[],"params":{"type":"powerShell","groovyscript":"# Pass credentials and hostname as arguments\n$hostname = \"##HOSTNAME##\"\n$user = \"##wmi.USER##\"\n$pass = \"##wmi.PASS##\"\n \n# Change the password into a secure string to be used in the credentials\n$remotepass= ConvertTo-SecureString -String $pass -AsPlainText -Force\n \n# Build the credential \n$remotecredential= new-object -typename System.Management.Automation.PSCredential -argumentlist $user,$remotepass\n\n# Invoke command to run command remotely on host\nInvoke-Command -ComputerName $hostname -ScriptBlock {\n\n#Folder to get sub-directories hardcoded here (C:\\) but could also be set to reference a system property\n$colItems = (Get-ChildItem C:\\ | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)\nforeach ($i in $colItems){Write-Host \"$($i.FullName)##$($i.Name)\"}\n\n} -credential $remotecredential"}}]]></adlist> <schemaVersion>1</schemaVersion> <dataSourceType>1</dataSourceType> <attributes> <attribute> <name>scripttype</name> <value>powerShell</value> <comment></comment> </attribute> <attribute> <name>scriptgroovy</name> <value># Pass credentials and hostname as arguments $hostname = &#34;##HOSTNAME##&#34; $user = &#34;##wmi.USER##&#34; $pass = &#34;##wmi.PASS##&#34; $wildvalue = &#34;##WILDVALUE##&#34; # Change the password into a secure string to be used in the credentials $remotepass= ConvertTo-SecureString -String $pass -AsPlainText -Force # Build the credential $remotecredential= new-object -typename System.Management.Automation.PSCredential -argumentlist $user,$remotepass Invoke-Command -ComputerName $hostname -ScriptBlock { param ($wild) $colItems = (Get-ChildItem $wild -recurse | Measure-Object -property length -sum) &#34;{0:f2}&#34; -f ($colItems.sum / 1MB) } -credential $remotecredential -ArgumentList $wildvalue</value> <comment></comment> </attribute> <attribute> <name>windowsscript</name> <value>Collect_Veeam_V_Folder5.ps1</value> <comment></comment> </attribute> <attribute> <name>linuxscript</name> <value></value> <comment></comment> </attribute> <attribute> <name>windowscmdline</name> <value>##ps.hostname## ##ps.user## ##ps.pass## ##wildvalue##</value> <comment></comment> </attribute> <attribute> <name>linuxcmdline</name> <value></value> <comment></comment> </attribute> </attributes> <datapoints> <datapoint> <name>size</name> <dataType>7</dataType> <type>2</type> <postprocessormethod>none</postprocessormethod> <postprocessorparam></postprocessorparam> <usevalue>output</usevalue> <alertexpr></alertexpr> <alertmissing>1</alertmissing> <alertsubject></alertsubject> <alertbody></alertbody> <description>size in MB of folder</description> <maxvalue></maxvalue> <minvalue></minvalue> <userparam1></userparam1> <userparam2></userparam2> <userparam3></userparam3> <iscomposite>false</iscomposite> <rpn></rpn> <alertTransitionIval>0</alertTransitionIval> <alertClearTransitionIval>0</alertClearTransitionIval> </datapoint> </datapoints> <graphs> <graph> <name>Size</name> <title>Size</title> <verticallabel>TB</verticallabel> <rigid>false</rigid> <maxvalue>NaN</maxvalue> <minvalue>0.0</minvalue> <displayprio>1</displayprio> <timescale>1day</timescale> <base1024>false</base1024> <graphdatapoints> <graphdatapoint> <name>size</name> <datapointname>size</datapointname> <cf>1</cf> </graphdatapoint> </graphdatapoints> <graphvirtualdatapoints> <graphvirtualdatapoint> <name>sizeTB</name> <rpn>(size/1024/1024)</rpn> </graphvirtualdatapoint> </graphvirtualdatapoints> <graphdatas> <graphdata> <type>2</type> <legend>Used</legend> <color>blue</color> <datapointname>sizeTB</datapointname> <isvirtualdatapoint>true</isvirtualdatapoint> </graphdata> </graphdatas> </graph> </graphs> <overviewgraphs> <overviewgraph> <name>Overview</name> <title>Overview</title> <verticallabel>TB</verticallabel> <rigid>false</rigid> <maxvalue>NaN</maxvalue> <minvalue>0.0</minvalue> <displayprio>1</displayprio> <timescale>1day</timescale> <base1024>false</base1024> <aggregated>false</aggregated> <datapoints> <overviewgraphdatapoint> <name>size</name> <datapointname>size</datapointname> <cf>1</cf> <aggregateMethod>SUM</aggregateMethod> </overviewgraphdatapoint> </datapoints> <virtualdatapoints> <overviewgraphvirtualdatapoint> <name>sizeTB</name> <rpn>size/1024/1024</rpn> </overviewgraphvirtualdatapoint> </virtualdatapoints> <lines> <overviewgraphline> <type>1</type> <legend>##INSTANCE##</legend> <datapointname>sizeTB</datapointname> <isvirtualdatapoint>true</isvirtualdatapoint> <color>blue</color> </overviewgraphline> </lines> </overviewgraph> </overviewgraphs> <scripts> </scripts> </entry> </feed>