Using Your Custom HTML Resource To Properly Display SWQL Query Results
Time Zone Clocks using javascript
Last X Days Node Outage Tracker
Just wanted to post this in case it would be useful for any one here.
This is a SWQL query that can be used for a dashboard to have all node outages listed with start and end times as well as total downtime.
SELECT ST.Nodes.Caption AS [Device], --Device Name '/Orion/images/StatusIcons/Small-' + ST.Nodes.StatusIcon AS [_IconFor_Device], --Status Icon for device ST.nodes.detailsurl as [_linkfor_Device], --Link for Device TOLOCAL(ST.EventTime) AS [Down Event], --Time Device went Down TOLOCAL(ET.EventTime) AS [Up Event], --Time Device went Up CONCAT(--Downtime formatted (CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60/60/24) >= 1 --Days THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60/60/24, 'd ') ELSE '' END), (CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60/60) >= 1 --Hours THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60/60%24, 'h ') ELSE '' END), (CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60) >= 1 --Minutes THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60%60, 'm ') ELSE '' END), (CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))) >= 1 --Seconds THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))%60, 's ') ELSE '' END)) AS [Downtime] FROM Orion.Events AS ST --Get StartTime on Events LEFT JOIN Orion.Events AS ET ON ET.NetObjectID = ST.NetObjectID --Match Events with the next UP event after the DOWN event AND ET.EventTime = (SELECT TOP 1 x.EventTime FROM Orion.Events AS [x] WHERE x.EventTime >= ST.EventTime AND x.EventType = 5 AND x.NetObjectType = 'N' AND x.NetObjectID = ST.NetObjectID ORDER BY x.EventTime) --SubQuery to get the next UP Event for the current device WHERE ST.EventType = 1 --DownEvent AND ST.NetObjectType = 'N' --Node Events AND DAYDIFF(ST.eventtime,GETUTCDATE()) < 30 --Get Last X days AND ST.Nodes.CustomProperties._DeviceType = 'Branch Router' --Branch routers only AND ST.Nodes.Status <> 9 --Status is not unamanaged --AND ST.Nodes.caption like '%${SEARCH_STRING}%' --Used if search enabled ORDER BY [Down Event] DESC --Sort by most recent down event
If there are any questions or any improvements I could make please feel free to share.
Cisco ARP Table
Viptela_CPU&Memory
Network Monitoring: Everything you need to know
Most networks are monitored, but it seems that many people don’t understand the full value and importance of network monitoring software. Below are a few tips that will help you make the most out of your network monitoring efforts.
Monitor as much as you can
Most network devices are monitored by SNMP, which makes it easier to retrieve data from a network device if your monitoring systems is capable of SNMP polling. If you add in as many network devices as possible, you’ll have the ability to start building up a large awareness of how your network is doing, providing a complete view of capacity or any hot spots in your network.
Graph all the interfaces, alert on some and value your alerts
It’s important to monitor everything, but let’s be sensible here, no one wants to see a SMS every time a user reboots their PC. Add some value to your alerting by customizing alerts to only highlight issues when it is relevant. Some strategies to consider include alerting when an uplink fails on a switch or look at supressing alerts when a larger failure happens to avoid your phone receiving 200 SMS’s.
Do it once, do it right
One of the best ways you can save time in your day is by standardization. Try using templates to standardize your monitoring roll out, making sure that each host is monitored with the same series of checks. This will also make it a lot easier to roll out new checks and metrics when required.
More than just utilization and events
Most enterprise grade switches offer some form of flow collection. Don’t miss out on this capability. Look at using those flows with some form of network analyzer package to give you a clear view of what traffic is crossing your network in a way that port counters just don’t provide. The value of any flow based monitoring will pay off tenfold when you have a slowdown or a DDoS, and you can see exactly where the problem lies.
Download monitoring software and demonstrate your success though reporting
If you take advantage of the above advice, this final tip will allow you to show off a bit. Start collecting uptime statistics and present the data to your managerial team. Stakeholders are always happy to see a report that says 100% availability this month, as it means that the IT operations teams are doing their jobs well.
Cisco Hardware report with Serial Numbers
NPM 2019.4 IS NOW GENERALLY AVAILABLE!
It is my pleasure to announce that Network Performance Monitor (NPM) 2019.4 is now available and can be downloaded from the Customer Portal.
Note that we've changed the version numbering with this release. This and future releases will follow a "year.quarter" numbering system instead of the previous (12.5) system.
What's New in NPM 2019.4?
- Device View - Visually display your network switches on Cisco 2960 and Juniper devices to check port status, utilization, and position from the Orion Web Console.
- Real-time Charts - Display real-time data with new dashboard widgets:
- CPU Load and Memory Utilization on Node Details.
- Percent Utilization on Interface Details.
- Performance Improvements - Check out the improved load times for widgets.
- Updated Localization - Improved support for German and Japanese languages.
- Improved Port-type Mapping - Discover port types with more accuracy.
Device View
Device View allows you to see the physical layout of your network switch's interfaces (except management or console) in order to check port status, utilization, and position from the Orion Web Console. It is being released in NPM 2019.4 as a "technical preview", meaning we haven't added enough functionality to deem it a full-fledged feature. In this case, the limiting factor comes in the form of vendor support.
NPM 2019.4 includes Device View support for the majority of switches in the following families (provided they're not in a "stacked" configuration):
- Cisco Catalyst 2960
- Cisco Catalyst 2960L
- Cisco Catalyst 2960S
- Cisco Catalyst 2960X
- Cisco Catalyst 2960XR
- Juniper EX2200
- Juniper EX3300
In order for Device View to be available in the web console, the supported switch will need to be monitored as an SNMP node.
Once monitored, you'll be able to access the new subview from the Node Details page.
Device View can be filtered using the filter list on the left side of the page. Currently, you can filter the interfaces based on status. Interfaces that do not match the selected filters become opaque.
Device View also provides a side panel with additional interface details. This is not visible by default. To view the side panel, click on any interface in the Device View stencil. The side panel displays the caption of the interface, it's IP address, MAC address, duplex mode, and more.
Real-Time Charts
With NPM 2019.4, we're also releasing our first set of widgets that provide real-time data!
Real-time CPU Load & Memory Usage will now appear by default in the top-right position of the Node Details→Vital Stats page.
Real-time interface Percent Utilization will similarly appear in the top-right position of the Interface Details→Summary page.
These charts can also be added via the Add Widget panel on other appropriate views.
The Chart Refresh Time update interval for real-time data charts is set to 2 seconds by default. This can be changed in two ways:
- Via the Web Console Settings page:
- Via the Advanced Configuration page:
The polling settings are tied to PerfStack, and can be adjusted on the Advanced Configuration page in PerfStack settings.
Improved Port Type Mapping
This feature provides information which can be used for filtering interfaces by port type during the discovery process. The changes we've made are primarily on the backend, but you may notice some minor UI tweaks.
Performance Improvements
NPM 2019.4 includes many improvements to web performance. We think you'll notice a difference in how fast the pages load.
Updated Localization
NPM 2019.4 includes improved support for the Japanese and German languages.
What now?
Looking for more information on what we'll be working on now that 2019.4 is out the door? Take a look at What We're Working On. Don't see what you're looking for? Advocate your needs with a Feature Request.
Custom resource SWQL/SQL extraction (sql)
There was a situation where I needed to extract the swql/sql from pages which didn't load.
It look a bit of doing, but it was a simple matter of searching for the name of the view/resource and dump the data.
I tried to do in SWQL, but could find the "ResourceProperties" in SWQL.
SELECT v.ViewGroupName, v.ViewTitle
,r.ResourceTitle, rp.PropertyName, rp.PropertyValue
FROMViews v
join Resources r on r.ViewID = v.ViewID
join ResourceProperties rp on rp.ResourceID=r.ResourceID
where rp.PropertyName in('sql','swql')and ViewGroupName like'%LookAtMe%'
--where rp.PropertyName in('sql','swql') and r.ResourceTitle like '%Cleanup%'
This is just something useful to have in the toolbox.
Amit
Using Your Custom HTML Resource To Properly Display SWQL Query Results
Volume Usage Spike Detection Alert
Node Downtime with Duration and Minimum Length Filtering
**REQUIRES ORION PLATFORM 2018.2 OR ABOVE**
I had assembled this based on a much older SQL report, and then updated it to SWQL, then added some more intelligence to it so you can filter it based on the duration of the outage, search by the device names, and it has a method of letting you know when nodes have been down so long they aged out of the events table.
Based on popular requests I figured it was time to put it out here to make it easier for the Thwackers to find and use. This is intended to be used inside the Custom Query Resource
select n.caption as [Device] -- shows the current status icon , '/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Device] -- makes a clickable link to the node details , n.DetailsUrl as [_linkfor_Device] -- shows the timestamp of the down event, if there is no timestamp then is says the event was greater than the number of days in your event retention settings , isnull(tostring(t2.[Down Event]),concat('Greater than ',(SELECT CurrentValue FROM Orion.Settings where settingid='SWNetPerfMon-Settings-Retain Events'),' days ago')) as [Down Event] -- shows the timestamp of the up event, unless the object is still down , isnull(tostring(t2.[Up Event]),'Still Down') as [Up Event] -- figures out the minutes between the down and up events, if the object is still down it counts from the down event to now, displays 99999 if we cannot accurately determine the original downtime, and , isnull(MINUTEDIFF(t2.[Down Event], isnull(t2.[Up Event],GETDATE())),99999) as Minutes from orion.nodes n left join (SELECT -- Device nodeid used for our join StartTime.Nodes.NodeID -- Down Event time stamp in local time zone ,ToLocal(StartTime.EventTime) AS [Down Event] -- Up Event time stamp in local time zone ,(SELECT TOP 1 ToLocal(EventTime) AS [EventTime] FROM Orion.Events AS [EndTime] -- picks the first up event that is newer than the down event for this node WHERE EndTime.EventTime >= StartTime.EventTime -- EventType 5 is a node up AND EndTime.EventType = 5 AND EndTime.NetObjectID = StartTime.NetObjectID AND EventTime IS NOT NULL ORDER BY EndTime.EventTime ) AS [Up Event] -- This is the table we are querying FROM Orion.Events StartTime -- EventType 1 is a node down WHERE StartTime.EventType = 1 ) t2 on n.NodeID = t2.nodeid -- this is how I catch nodes that are down but have aged out of the events table where (n.status = 2 or t2.nodeid is not null) -- If you want to filter the results to only show outages of a minimum duration uncomment the below line --and MINUTEDIFF(isnull(t2.[Down Event],(GETUTCDATE()-30)), isnull(t2.[Up Event],GETUTCDATE())) > 60 -- if you want to use this query in a search box of the Custom Query resource uncomment the below line --and n.Caption like '%${SEARCH_STRING}%' order by t2.[down event] desc
Loop1 Systems: SolarWinds Training and Professional Services
- LinkedIN: Loop1 Systems
- Facebook: Loop1 Systems
- Twitter: @Loop1Systems
How to create a report displaying the Last Time Data was Transmitted or Received on a Switch Port
First off, there's a great thread with XML language that creates a new Report for this that can be imported into your SW here: How to find ports which have not been used for a long time ?
Also, check this search out for other threads containing "Last & Transmitted": https://thwack.solarwinds.com/search.jspa?q=last+transmitted
The process below is what I built for my team's use, since the above XML report provided information for too many kinds of ports and systems. The method I use allows you to focus on a specific switch, and it eliminates reporting on some ports that I know will always be out of scope for discovering patched copper ports for reuse (like fiber uplink ports and port-channels or local Fa0 ports).
Start off in Settings, Admin > Alerts & Reports, Create New Report
Click the small blue "Edit" just to the right of Datasource 1 and make it look like this:
Adjust the items above to match your specific needs and then click Add to Layout.
What the filtered options mean:
- As you can see from the first entry (Caption contains "Insert Switch Name") this particular report will focus solely on a specific switch. You don't have to include this if you don't want, and you could change it to identify a switch by whatever method you prefer--or drop it entirely.
- Solarwinds NPM may discover Cisco interfaces that are "Controlled" and "Uncontrolled" for security options (depending on IOS release and hardware platform); since these interfaces are duplicates to the physical interfaces, I don't want them included in the report, so I had it filter any interface with "ontrol" in its name.
- I'm not interested in Port-channels, therefore that's filtered out.
- I don't want any port whose status is "Up".
- It must be a Physical Interface, not a virtual or logical one.
- Don't report on Ten Gig interfaces ("Interface Name does not start with Te")
- Don't report on interfaces ending in 49-52--those are uplink fiber links on my switches, and I'm not looking for information about those in this report. I only want to know about copper ports that can be unpatched & reused.
- Don't report on the Fa0 port if one is present
Click Edit Table
Adjust these items per your specific needs and click Submit
I put a note it to remind my Team to change the switch name inside the report:
Click Next
Put helpful information in the Report Description, Click Next.
Schedule if it needed:
Click Next
Review the setup and make any changes required:
Click Submit.
Now select the report, edit it to report on the specific switch, save it and run it. You'll get a report that sorts from the ports longest down to those most recently down, looking like this:
I export this to .PDF and send it to my Network Technicians for unpatching of ports on switches they're concerned with.
Enjoy!
(Updated 20190905 Rick Schroeder)
Disk / Volume / RAM / Memory Calculation
Here is the calculation for the Disk / Volume / RAM /below and example.
What object IDs (OIDs) does Orion NPM poll for volume information? What types of volume information does Orion NPM poll?
Linux / Unix based Systems
You can run the MIB Walk for the Node in Question in order to find out what values been returned by the Node for required OID's as below.
Here is MIB walk tool details
******** MIb Walk Result from the Node **********
.1.3.6.1.2.1.25.2.3.1.3.1 = String: "Physical RAM"
.1.3.6.1.2.1.25.2.3.1.3.2 = String: "Virtual Memory"
.1.3.6.1.2.1.25.2.3.1.3.3 = String: "/"
.1.3.6.1.2.1.25.2.3.1.3.4 = String: "/proc"
.1.3.6.1.2.1.25.2.3.1.3.5 = String: "/dev/pts"
.1.3.6.1.2.1.25.2.3.1.3.6 = String: "/proc/bus/usb"
.1.3.6.1.2.1.25.2.3.1.3.7 = String: "/partB"
.1.3.6.1.2.1.25.2.3.1.3.8 = String: "/common"
.1.3.6.1.2.1.25.2.3.1.3.9 = String: "/grub"
.1.3.6.1.2.1.25.2.3.1.3.10 = String: "/dev/shm"
.1.3.6.1.2.1.25.2.3.1.3.11 = String: "/spare"
.1.3.6.1.2.1.25.2.3.1.3.12 = String: "/proc/sys/fs/binfmt_misc"
.1.3.6.1.2.1.25.2.3.1.4.1 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.2 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.3 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.4 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.5 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.6 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.7 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.8 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.9 = INTEGER: 1024
.1.3.6.1.2.1.25.2.3.1.4.10 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.11 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.4.12 = INTEGER: 4096
.1.3.6.1.2.1.25.2.3.1.5.1 = INTEGER: 1021591
.1.3.6.1.2.1.25.2.3.1.5.2 = INTEGER: 512034
.1.3.6.1.2.1.25.2.3.1.5.3 = INTEGER: 4232703
.1.3.6.1.2.1.25.2.3.1.5.4 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.5.5 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.5.6 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.5.7 = INTEGER: 4232699
.1.3.6.1.2.1.25.2.3.1.5.8 = INTEGER: 17502476
.1.3.6.1.2.1.25.2.3.1.5.9 = INTEGER: 252879
.1.3.6.1.2.1.25.2.3.1.5.10 = INTEGER: 510795
.1.3.6.1.2.1.25.2.3.1.5.11 = INTEGER: 8468466
.1.3.6.1.2.1.25.2.3.1.5.12 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.6.1 = INTEGER: 447260
.1.3.6.1.2.1.25.2.3.1.6.2 = INTEGER: 52
.1.3.6.1.2.1.25.2.3.1.6.3 = INTEGER: 2837178
.1.3.6.1.2.1.25.2.3.1.6.4 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.6.5 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.6.6 = INTEGER: 0
.1.3.6.1.2.1.25.2.3.1.6.7 = INTEGER: 2736606
.1.3.6.1.2.1.25.2.3.1.6.8 = INTEGER: 7646375
.1.3.6.1.2.1.25.2.3.1.6.9 = INTEGER: 4303
.1.3.6.1.2.1.25.2.3.1.6.10 = INTEGER: 5422
.1.3.6.1.2.1.25.2.3.1.6.11 = INTEGER: 8256
****************** Physical Disks ******************
hrStorageDescr = .1.3.6.1.2.1.25.2.3.1.3.3 = String: "/"
hrStorageAllocationUnits= .1.3.6.1.2.1.25.2.3.1.4.3 = INTEGER: 4096
hrStorageSize .1.3.6.1.2.1.25.2.3.1.5.3 = INTEGER: 4232703
hrStorageUsed = .1.3.6.1.2.1.25.2.3.1.6.3 = INTEGER: 2837178
Calculations :
Volume size 4232703 x 4096 17337151488 Bytes 16.146 GB
Volume used 2837178 x 4096 11621081088 Bytes 10.822 GB
space available 17337151488 - 11621081088 = 5716070400 5.323 GB .
Percentage 10.8/16.14 * 100 65%
****************************************************
hrStorageDescr = .1.3.6.1.2.1.25.2.3.1.3.1 = String: "Physical RAM"
hrStorageAllocationUnits= .1.3.6.1.2.1.25.2.3.1.4.1 = INTEGER: 4096
hrStorageSize .1.3.6.1.2.1.25.2.3.1.5.1 = INTEGER: 1021591
hrStorageUsed = .1.3.6.1.2.1.25.2.3.1.6.1 = INTEGER: 447260
Calculations : Physical RAM
Volume size 1021591 x 4096 4184436736 Bytes 3.897 GB
Volume used 447260 x 4096 1831976960 Bytes 1.706 GB
space available 1831976960 - 4184436736 = 2352459776 2.1 GB
Percentage 1.706/3.897 * 100 43%
*********************************************************
hrStorageDescr = .1.3.6.1.2.1.25.2.3.1.3.2 = String: "Virtual Memory"
hrStorageAllocationUnits= .1.3.6.1.2.1.25.2.3.1.4.2 = INTEGER: 4096
hrStorageSize .1.3.6.1.2.1.25.2.3.1.5.2 = INTEGER: 512034
hrStorageUsed = .1.3.6.1.2.1.25.2.3.1.6.2 = INTEGER: 52
Calculations : Virtual Memory
Volume size 512034 x 4096 2097291264 Bytes 1.953 GB
Volume used 52 x 4096 212992 Bytes 0.0001 GB
space available 212992 - 2097291264 = 2097078272 1.953 GB .
Percentage 0.0001/1.953 * 100 0.0%
///////////////////////////////////////////////////////////////
Adding Few more explanation here for Cisco Call Manager Showing 99% Memory Utilization in Orion .( just in case someone having this issue )
The reason you are seeing 99% is due to the Cisco MCS returning back those values.
Why its doing this, you have to Open Cisco TAC.
NPM is returning back the values its being supplied with, in this case showing 99%.
Poller type: Used .
- N.Memory.SNMP.CpqHostPhysicalMemory =
Memory poller for OpenVMS systems which support proprietary CPQ-Host MIB
Poller utilizes GetSubtree request with two OIDs to gather total and used memory:
cpqHoPhysicalMemorySize = 1.3.6.1.4.1.232.11.2.13.1.
cpqHoPhysicalMemoryFree = 1.3.6.1.4.1.232.11.2.13.2.
Total memory is computed using this formula:
memoryTotal = cpqHoPhysicalMemorySize * 1024
Used memory is computed using this formula:
memoryUsed = memoryTotal - (cpqHoPhysicalMemoryFree * 1024)
MIB Walk shows:
.1.3.6.1.4.1.232.11.2.13.1.0 = INTEGER: 3990 = cpqHoPhysicalMemorySize
.1.3.6.1.4.1.232.11.2.13.2.0 = INTEGER: 60 = cpqHoPhysicalMemoryFree
memoryTotal = 3990 * 1024 = 4085760
memoryUsed = 4085760 - (60 * 1024) = 4085760 – 61440 = 4024320
PercentUsed = 4024320/4085760 = 98.496% = 99%
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
For Linux Server for Poller assigned N.Memory.SNMP.NetSnmpReal
If poller assigned
N.Memory.SNMP.NetSnmpReal
/// memTotalReal = 1.3.6.1.4.1.2021.4.5.
/// memAvailReal = 1.3.6.1.4.1.2021.4.6.
/// memCached = 1.3.6.1.4.1.2021.4.15.
/// memBuffer = 1.3.6.1.4.1.2021.4.14.
/// UsedMemory = (totalMem - availMem - cachedMem - bufferMem) * 1024
.1.3.6.1.4.1.2021.4.5.0 = INTEGER: 2073620 (Total )
.1.3.6.1.4.1.2021.4.6.0 = INTEGER: 1869968 (Available )
.1.3.6.1.4.1.2021.4.15.0 = INTEGER: 88008 (cachedMemory )
.1.3.6.1.4.1.2021.4.14.0 = INTEGER: 51868 (BufferMemory )
( 2073620– 1869968– 88008– 51868 ) = 63776
63776 * 1024 = 65306624 bytes
--- Another Example ----
Yellow - Working SNMPWALK (supported net-snmp version)
Green - NON Working SNMPWALK (NON supported net-snmp version)
memTotalReal | .1.3.6.1.4.1.2021.4.5.0 | 1997828 | 4053 |
memAvailReal | .1.3.6.1.4.1.2021.4.6.0 | 19736 | 0 |
memCached | .1.3.6.1.4.1.2021.4.15.0 | 1216472 | 0 |
memBuffer | .1.3.6.1.4.1.2021.4.14.0 | 73948 | 0 |
Total Used | 687672 | 4053 | |
Total Used x 1024 | 704176128 | 4150272 | |
% used |
| 100 | |
ssCPUIdle | .1.3.6.1.4.1.2021.11.11.0 | 83 | 9 |
SSCPURAWIDLE | .1.3.6.1.4.1.2021.11.53.0 | 1253793743 | 1833365114 |
********************
Vmware ESX Memory Calculation
Supported Poller
The "Memory" Usage and the "Physical Memory" Utilization are calculated differently by Orion NPM.
Memory:
The Memory is the sum of the memory used by the processes listed in the HOST-RESOURCES-MIB:hrSWRunPerfTable (1.3.6.1.2.1.25.5.1).
The OID used is the hrSWRunPerfMem (1.3.6.1.2.1.25.5.1.1.2).
Physical Memory:
The Physical Memory is calculated based on the values populated in the HOST-RESOURCES-MIB:hrStorageTable (1.3.6.1.2.1.25.2.2.3).
The OIDs used are hrStorageSize (1.3.6.1.2.1.25.2.3.1.5), hrStorageUsed (1.3.6.1.2.1.25.2.3.1.6) and hrStorageAllocationUnits (1.3.6.1.2.1.25.2.3.1.4) .
Cisco ASA
Cisco ASR Poller
/// Poller utilizes GetSubtree request to gather used memory using OID:
/// CpmCpuMemoryUsed= 1.3.6.1.4.1.9.9.221.1.1.1.1.18
/// Poller utilizes GetSubtree request to gather free memory using OID:
/// CpmCpuMemoryFree= 1.3.6.1.4.1.9.9.221.1.1.1.1.20
/// Used memory is computed as SUM of all ciscoMemoryPoolUsed returned values.
/// Free memory is computed as SUM of all ciscoMemoryPoolFree returned values.
/// Total memory is computed as SUM of used and free memory.
Consolidated Node Issues Panel
One of my SolarWinds priorities is displaying as much actionable information as possible without burning up half the screen with empty panels. This panel has been through a number of revisions, but is (more or less) useful now. This SWQL Custom Query creates a panel that consolidates:
- Nodes with High Packet Loss
- Nodes with High Response Time
- Nodes with High Average CPU Load
- Volumes with High Percentage Usage
- Nodes with High Memory Utilization
Clicking on the issue opens up a 7 day perfstack analysis. Clicking/Hovering over the node name works as you would expect.
It is also searchable by node name or issue name (packet loss, response time, high cpu, cpu load, disk space, memory used).
I hope people find this useful. It saves a ton of space on our NOC display.
-- -- Node Issues Panel - SWQL Custom Query Resource -- 3-Jan-2020 Christopher Camacho -- -- Conserve screen space by consolidating 5 panels into 1 -- * Nodes with High Packet Loss -- * Nodes with High Response Time -- * Nodes with High Average CPU Load -- * Volumes with High Percentage Usage -- * Nodes with High Memory Utilization -- -- Click/Hover on Node Name for Node Details -- Click on Issue to open PerfStack Analysis (7 Days) -- Search by Node Name or Issue (Packet Loss, Response Time, High CPU, CPU Load, Disk Space, Memory Used) -- -- DISK SPACE BLOCK SELECT N0.Caption AS [Node], N0.DetailsUrl AS [_LinkFor_Node], '/Orion/images/StatusIcons/Small-'+N0.StatusIcon AS [_IconFor_Node], ' '+toString(Round(ov.VolumePercentUsed,0))+'% '+ov.Caption AS [Issue], '/ui/perfstack/?presetTime=last7Days&charts=0_Orion.Volumes_' +toString(ov.VolumeID)+'-Orion.VolumeUsageHistory.PercentDiskUsed;' AS [_LinkFor_Issue], CASE WHEN (ov.VolumePercentUsed>=ov.ForecastCapacity.CriticalThreshold) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_FileServer-Critical.png' WHEN (ov.VolumePercentUsed>=ov.ForecastCapacity.WarningThreshold) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_FileServer-Warning.png' ELSE '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_FileServer-Up.png' END AS [_IconFor_Issue] FROM Orion.Volumes ov LEFT JOIN Orion.Nodes AS N0 ON N0.NodeID=ov.NodeID WHERE N0.UnManaged=FALSE AND (ov.VolumePercentUsed>=ov.ForecastCapacity.WarningThreshold) -- Uncomment the next line when enabling search -- AND ('Disk Space' LIKE '%${SEARCH_STRING}%' OR ov.Caption LIKE '%${SEARCH_STRING}%' OR N0.Caption LIKE '%${SEARCH_STRING}%') -- BEGIN PACKET LOSS BLOCK UNION ( SELECT N0.Caption AS [Node], N0.DetailsUrl AS [_LinkFor_Node], '/Orion/images/StatusIcons/Small-'+N0.StatusIcon AS [_IconFor_Node], ' '+toString(N0.PercentLoss)+'% Packet Loss' AS [Issue], '/ui/perfstack/?context=0_Orion.Nodes_'+toString(N0.NodeID) +'&withRelationships=true&presetTime=last7Days&charts=0_Orion.Nodes_' +toString(N0.NodeID)+'-Orion.ResponseTime.PercentLoss;' AS [_LinkFor_Issue], CASE WHEN (N0.PercentLoss>=N0.PercentLossThreshold.Level2Value) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Generic-Critical.png' WHEN (N0.PercentLoss>=N0.PercentLossThreshold.Level1Value) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Generic-Warning.png' ELSE '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Generic-Up.png' END AS [_IconFor_Issue] FROM Orion.Nodes N0 WHERE N0.UnManaged=FALSE AND N0.External=FALSE AND (N0.PercentLoss>=N0.PercentLossThreshold.Level1Value) -- Uncomment the next line when enabling search -- AND ('Packet Loss' LIKE '%${SEARCH_STRING}%' OR N0.Caption LIKE '%${SEARCH_STRING}%') ) -- BEGIN CPU LOAD BLOCK UNION ( SELECT N0.Caption AS [Node], N0.DetailsUrl AS [_LinkFor_Node], '/Orion/images/StatusIcons/Small-'+N0.StatusIcon AS [_IconFor_Node], ' '+toString(N0.CPUload)+'% CPU Load' AS [Issue], '/ui/perfstack/?context=0_Orion.Nodes_'+toString(N0.NodeID) +'&withRelationships=true&presetTime=last7Days&charts=0_Orion.Nodes_' +toString(N0.NodeID)+'-Orion.CPULoad.AvgLoad;' AS [_LinkFor_Issue], CASE WHEN (N0.CPUload>=N0.CpuLoadThreshold.Level2Value) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_CPU-Critical.png' WHEN (N0.CPUload>=N0.CpuLoadThreshold.Level1Value) THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_CPU-Warning.png' ELSE '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_CPU-Up.png' END AS [_IconFor_Issue] FROM Orion.Nodes N0 WHERE N0.UnManaged=FALSE AND (N0.CPUload>=N0.CpuLoadThreshold.Level1Value) -- Uncomment the next line when enabling search -- AND ('CPU Load' LIKE '%${SEARCH_STRING}%' OR 'High CPU' LIKE '%${SEARCH_STRING}%' OR N0.Caption LIKE '%${SEARCH_STRING}%') ) -- BEGIN RESPONSE TIME BLOCK UNION ( SELECT N0.Caption AS [Node], N0.DetailsUrl AS [_LinkFor_Node], '/Orion/images/StatusIcons/Small-'+N0.StatusIcon AS [_IconFor_Node], ' '+toString(N0.ResponseTime)+'ms Response Time' AS [Issue], '/ui/perfstack/?context=0_Orion.Nodes_'+toString(N0.NodeID) +'&withRelationships=true&presetTime=last7Days&charts=0_Orion.Nodes_' +toString(N0.NodeID)+'-Orion.ResponseTime.AvgResponseTime;' AS [_LinkFor_Issue], CASE WHEN N0.ResponseTime>=N0.ResponseTimeThreshold.Level2Value THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Switch-Critical.png' WHEN N0.ResponseTime>=N0.ResponseTimeThreshold.Level1Value THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Switch-Warning.png' ELSE '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Switch-Up.png' END AS [_IconFor_Issue] FROM Orion.Nodes N0 WHERE N0.UnManaged=FALSE AND N0.External=FALSE AND (N0.ResponseTime>=N0.ResponseTimeThreshold.Level1Value) -- Uncomment the next line when enabling search -- AND ('Response Time' LIKE '%${SEARCH_STRING}%' OR N0.Caption LIKE '%${SEARCH_STRING}%') ) --BEGIN MEMORY USED BLOCK UNION ( SELECT N0.Caption AS [Node], N0.DetailsUrl AS [_LinkFor_Node], '/Orion/images/StatusIcons/Small-'+StatusIcon AS [_IconFor_Node], ' '+toString(PercentMemoryUsed)+'% Memory Used' AS [Issue], '/ui/perfstack/?context=0_Orion.Nodes_'+toString(N0.NodeID) +'&withRelationships=true&presetTime=last7Days&charts=0_Orion.Nodes_' +toString(N0.NodeID)+'-Orion.CPULoad.AvgPercentMemoryUsed;' AS [_LinkFor_Issue], CASE WHEN N0.PercentMemoryUsed>=N0.PercentMemoryUsedThreshold.Level2Value THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Memory-Critical.png' WHEN N0.PercentMemoryUsed>=N0.PercentMemoryUsedThreshold.Level1Value THEN '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Memory-Warning.png' ELSE '/Orion/HardwareHealth/Images/StatusIcons/Object-Sensor_Memory-Up.png' END AS [_IconFor_Issue] FROM Orion.Nodes N0 WHERE N0.UnManaged=FALSE AND (N0.PercentMemoryUsed>=N0.PercentMemoryUsedThreshold.Level1Value) -- Uncomment the next line when enabling search -- AND ('Memory Used' LIKE '%${SEARCH_STRING}%' OR N0.Caption LIKE '%${SEARCH_STRING}%') ) -- END OF BLOCKS - DO NOT DELETE/COMMENT 'ORDER BY' LINE BELOW ORDER BY [Node], [Issue]
Custom SWQL to Manage/Display UnDP Assignments
Hi, all having had many useful tips and downloads from Thwack over the last few years, I thought it was time to put something back.
Recently I have been creating & assigning a load of UnDP's, and thought what a pain it is using the server application to view overall what is allocated, and even that is not particularly nice to use!
I already have a panel in all my node summary pages to display UnDP, but that is not very useful for an overall view of what is assignment or the state of all values in a UnDP group.
Hence, using hcy01's "CUSTOM SWQL TO MANAGE ASSIGNED APPLICATION MONITORS WITH SEARCH BAR" as a very helpful "template"(and this is a fantastic screen for SAM management that I've used for a while), I have knocked up the following screen:
Here is the SWQL for the top data panel (Custom Query display resource) - use same code in Custom SWQL Query and Search SWQL Query boxes , just uncomment the lines below "Search String Below" (in orange) for the search box:
SELECT c.Caption AS NodeName,
'/Orion/NetPerfMon/NodeDetails.aspx?netobject=N:' + ToString(a.NodeID) AS [_LinkFor_NodeName],
b.groupname AS UnDP_Group,
'Edit' AS Edit,
'/Orion/NPM/NodeCustomPollers.aspx?Nodes=' + ToString(a.NodeID) AS [_LinkFor_Edit],
'/Orion/Nodes/images/icons/icon_edit.gif' AS [_IconFor_Edit],
a.CustomPollerName AS UnDP_Name,
a.CurrentValue AS Value,
a.StatusDescription AS UnDP_Status,
CASE
WHEN a.Status=1 THEN '/Orion/images/StatusIcons/Small-Up.gif'
WHEN a.Status=9 THEN '/Orion/images/StatusIcons/Small-Unmanaged.gif'
WHEN a.Status=0 THEN '/Orion/images/StatusIcons/Small-Unknown.gif'
WHEN a.Status=12 THEN '/Orion/images/StatusIcons/Small-Unreachable.gif'
WHEN a.Status=3 THEN '/Orion/images/StatusIcons/Small-Up-Warn.gif'
WHEN a.Status=14 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
WHEN a.Status=2 THEN '/Orion/images/StatusIcons/Small-Down.gif'
ELSE '/Orion/images/StatusIcons/Small-Unreachable.gif'
END AS [_IconFor_UnDP_Status],
a.CustomPollerDescription AS Description_from_MIB,
a.CustomPollerOid AS OID
FROM Orion.NPM.CustomPollerAssignment a
INNER JOIN Orion.NPM.CustomPollers b on a.CustomPollerID = b.CustomPollerID
INNER JOIN Orion.Nodes c on a.Nodeid = c.Nodeid
AND a.statusdescription <> 'Unmanaged'
--
-- Search String Below --
--
--WHERE UnDP_Status LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'US %' THEN SubString('${SEARCH_STRING}%',4,11) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR NodeName LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'NN %' THEN ('%' + SubString('${SEARCH_STRING}%',4,25)) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR UnDP_Group LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'UG %' THEN ('%' + SubString('${SEARCH_STRING}%',4,25)) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR Description_from_MIB LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'DE %' THEN ('%' + SubString('${SEARCH_STRING}%',4,25)) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR OID LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'OI %' THEN ('%' + SubString('${SEARCH_STRING}%',4,50)) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR Value LIKE (CASE WHEN '${SEARCH_STRING}' LIKE 'VA %' THEN ('%' + SubString('${SEARCH_STRING}%',4,50)) ELSE ('dummy' + '${SEARCH_STRING}%') END)
-- OR UnDP_Name LIKE '%${SEARCH_STRING}%'
--
ORDER BY UnDP_Group, Nodename
Here is the HTML for the bottom instructions panel (Custom HTML diaplay resource):
<p>
<table style="width: 100%" cellpadding="0" cellspacing="0">
<tr>
<td><font color="#0007FF">NodeName</font></td>
<td><font color="#000000">Click to to go to Node Summary Page</font></td>
<td><font color="#000000">UnDP_Group</font></td>
<td><font color="#000000">Name of UnDP Group as defined in UnDP application on main polling server</font></td>
</tr>
<tr>
<td><font color="#0007FF">Edit</font></td>
<td><font color="#000000">Click to edit UnDP assignments for NodeName</font></td>
<td><font color="#000000">UnDP_Name</font></td>
<td><font color="#000000">Name of poller as defined in UnDP application on main polling server</font></td>
</tr>
<tr>
<td><font color="#000000">Value</font></td>
<td><font color="#000000">The current value for the UnDP as returned from SNMP query of the OID on NodeName</font></td>
<td><font color="#000000">UnDP_Status</font></td>
<td><font color="#000000">UnDP Status - based upon UnDP Thresholds as defined in Orion Settings</font></td>
</tr>
<tr>
<td><font color="#000000">Description_from_MIB</font></td>
<td><font color="#000000"> Detailed description of the OID as returned by SNMP query of MIB table on NodeName</font></td>
<td><font color="#000000">OID</font></td>
<td><font color="#000000"> Unique OID number used by UnDP to query NodeName MIB table</font></td>
</tr>
</table>
<p>
<font color="#000000">Columns in</font><font color="#0007FF"> blue </font><font color="#000000">are clickable. Hold CTRL when clicking to open in a new tab, SHIFT to open in a new window.<br></font>
</p>
<p>
<font color="#000000">NB. UnDP pollers that return a table of values (i.e. tabular OID) cannot display their values here, though their assignments will still be shown. Click on node link to see details of values in node summary screen p.<br><br></font>
</p>
<p><ul>
<li>- The following columns are searchable:</li>
<ul>
<li> <b>NodeName</b>: Full or part of node name (Maximum 25 letters) </li>
<li> <b>UnDP_Group</b>: Full or part of UnDP Group name (Maximum 25 letters) </li>
<li> <b>UnDP_Name</b>: Full or part of UnDP name (Maximum 25 letters) </li>
<li> <b>Value</b>: Full or part of Value (Maximum 25 letters) </li>
<li> <b>UnDP_Status</b>: 'Up', 'Down', 'Warning', 'Critical', 'Unmanaged', 'Unknown', 'Unreachable'.</li>
<li> <b>Description_from_MIB</b>: Full or part of MIB OID Description (Maximum 25 letters).</li>
<li> <b>OID</b>: Full or part of MIB OID Number (Maximum 50 letters).</li>
</ul>
<li>- You can search individual columns like this:</li>
<ul>
<li> To search the <b>NodeName</b> column start your search with <b>"nn "</b> followed by node name (full or part of node name, such as: <font color="#0007FF"> "nn mysqlserver1" or "nn mysql")</font>.</li>
<li> To search the <b>UnDP_Group</b> column start your search with <b>"ug "</b> followed by UnDP Group name (full or part of template name, such as: <font color="#0007FF"> "ug Checkpoint_Cluster" or "ug cluster")</font>.</li>
<li> To search the <b>UnDP_Name</b> column just type full or part of UnDP name in the search box (Maximum 25 letters), such as: <font color="#0007FF"> "hastatus"</font>.</li>
<li> To search the <b>Value</b> column start your search with <b>"va "</b> followed by value (full or part of node name, such as: <font color="#0007FF"> "va standby" or "va stand")</font>.</li>
<li> To search the <b>UnDP_Status</b> column start your search with <b>"us "</b> followed by application status (full or part of status name, such as: <font color="#0007FF"> "us up", "us unmanaged" or "us unm")</font>.</li>
<li> To search the <b>Description_from_MIB</b> column start your search with <b>"de "</b> followed by MIB OID description (full or part of description, such as: <font color="#0007FF"> "de power")</font>.</li>
<li> To search the <b>OID</b> column start your search with <b>"oi "</b> followed by OID number (full or part of OID number, such as: <font color="#0007FF"> "oi 1.3.6.1.4.1.318.1.1.8.5.1.3")</font>.</li>
</ul>
</ul></p>
<p>An entered search will remain for as long as the browser stays open or until the search is manually cleared, even though the results refresh on a timer.</p>
I hope this is of some use (and that I have posted in the right place)!
SWQL - Active Alerts Report
Dashboard/View Search Widget
Since the question was brought up during SWUG NY I thought I would post this up.
The problem is how do you organize things when you have a large number of dashboards?
The list gets really long and it can be tedious to have to add them to all the applicable users toolbars.
This is a resource I use to make it so people can quickly find the dashboard they need without having to wade through a long list or clutter up the top menu bars too much.
Add this as a Custom Query resource on your users home page so they can navigate off to wherever else they want to go:
First Box
select top 1 'Enter the name of the view you are looking for.' as Message from orion.nodes order by nodeid
select case when viewgroupname not like '' then (concat(viewgroupname,' - ', v.ViewTitle)) else Viewtitle end as View , concat('/Orion/SummaryView.aspx?ViewID=',v.viewid) as [_linkfor_View] from orion.Views v where v.viewtype like 'summary' and (v.viewtitle like '%${SEARCH_STRING}%' or viewgroupname like '%${SEARCH_STRING}%') order by v.ViewGroupName, v.ViewGroupPosition
This gives you something like this:
Loop1 Systems: SolarWinds Training and Professional Services
- LinkedIN: Loop1 Systems
- Facebook: Loop1 Systems
- Twitter: @Loop1Systems
Use CSS on alert solarwinds
Tôi muốn sử dụng CSS trên các cơn gió mặt trời cảnh báo nhưng tôi chưa tìm được cách sử dụng CSS trên các cơn gió mặt trời cảnh báo