Quantcast
Channel: THWACK: Document List - Network Performance Monitor
Viewing all 1956 articles
Browse latest View live

Custom Graphing: Fun With Highcharts

$
0
0
>>> SKIP TO NEXT PAGE
The Query: Retrieving, Formatting, And Storing The Data

 

Why Are We Reading This?

The following set of documents will show you how to create custom highcharts graphs/charts. Why would you need, or even want, to do this? Well, maybe you don't... Or, maybe you want to view some data from multiple systems together within SolarWinds... Or maybe you just want to go on an adventure to discover the flexibility of your SolarWinds environment. Whatever you reason(s) might be, this just might be a good place to start.

 

Here are a few example screenshots of the end results, and what your charts could look like.

a+test+-+CPU+Load+Windows+Servers_20170320_1253_working-002.pngChart+Node.pngUplink+Bandwidth+04_20170322_1416.pngResourceUsage.png

 

 

 

ALL of the content, custom resources, and general know how, came from the mind and hands of

jnathlich12

I am simply sharing his work with Thwack Nation. (With his approval, of course)

 

 

This set of documents will break down the different parts of the resource, and explain (to the best of my abilities) what each piece is, and how each piece works.

 

With this page being the table of contents, so to speak, the next document (HERE) will explain how the resource retrieves, formats, and stores the data. The subsequent documents will explain how to display that data in different ways. While I could have just kept everything all on that same page, I felt the page would feel like too much information was crammed into too little space.

 

Here is a list of the other documents in this set:

1) The Query: Retrieving, Formatting, And Storing The Data

2) Simple Charts I: Graphing A Single Metric On A Single Element Over A Period Of Time

3) Simple Charts II: Graphing Two Metrics On A Single Element Over A Period Of Time

4) Simple Charts III: Graphing A Single Metric On Multiple Dynamic Elements Over A Period Of Time

5) Simple Charts IV: Graphing Two Metrics On Multiple Dynamic Elements Over A Period Of Time

6) Advanced Charts: Multiple Graphs With Various Metrics (Grouped) On Various Devices (Grouped)

 

Each document uses a slight variation of the same custom resource, allowing for different graphs to view data in different ways. The variations should be labeled on each of the pages, respectively.

I decided first document, "The Query", should have its own page, as it could live on its own, removing all references of highcharts from the code. (Basically, if you removed the entire highcharts section, "The Query" would simply gather data from the database, format the data into JSON format, and save the data to a file. You would simply have a file of the raw data, but not have any charts...)

 

While I will be attempting to keep these Thwack documents simple, going over only enough detail to show you how the main pieces work, jnathlich12 has provided an extremely detailed document, which I have attached below. So, if my words are just not making sense, or you feel I have skipped over something important, go ahead and download his document, and dive into the deep end.

 

 

 

 

Custom Resources, That Sounds Like Too Much Work, Right?

This mod is basic, but does require you to either run the config wizard, or delete the resource cache file and recycle the SolarWinds AppPool on the IIS server.

Basically, if you are able to read this, and you have "authorized" access to your SolarWinds server, then you should be able to easily add this modification to your system. (Okay, technically, you don't have to be authorized, but just don't go doing anything that will have the suits schedule you for a private tour of the quickest exit route off the premises...)

ESTIMATED TIME TO INSTALL/PERFORM MODIFICATION:<5 Minute

DIFFICULTY LEVEL:2-Padawan

  1. Youngling (Easiest/Most Basic; no coding experience required, no config wizard required, no system restart required, no system downtime.)
  2. Padawan(Easy/Basic; no coding experience required, possible config wizard required, possible system/services restart required, limited/no downtime.)
  3. Jedi Knight (Moderately Difficult/Advanced; coding experience is not required, but would be recommended, possible config wizard required, possible system/services restart required, limited/short duration downtime.)
  4. Jedi Master (Most Difficult/Advanced; advanced coding experience required, config wizard required, system/services restarts required, 30+ minutes downtime/maintenance window recommended, and other things that I do not even know I would need to know, required...)

 

This custom resource requires only the module(s) from which you want to collect and graph data.(i.e. If you only want to build a graph showing bandwidth usage on interfaces, then NPM should be sufficient. If you want to graph SAM data, then you would obviously need the SAM module.)

This mod does NOT require you to edit, replace, overwrite, or make any changes otherwise, to the default system files.(You will, however, be adding new files)

 

 

 

 

What Are The First Four Rules Of Customization Club?

Customization club is founded on the following four rules, which must always be followed before you may start customizing:

  1. Backup The Database, And Backup The Files
  2. Backup The Database, And Backup The Files
  3. Backup The Database, And Backup The Files
  4. Backup The Database, And Backup The Files

 

 

 

 

Has This Modification Been Tested?

These custom resources were installed, and tested, on various systems with the following SolarWinds product versions:

 

Orion Platform 2015.1.2, NCM 7.4, DPA 10.0.0, NPM 11.5.2, IVIM 2.1.0, SAM 6.2.2
Orion Platform 2017.1, VNQM 4.2.4, SRM 6.3.0, IPAM 4.3.2, SAM 6.3.0, DPA 10.2.0, NCM 7.6, VIM 7.0.0, QoE 2.3, NetPath 1.1.0, NPM 12.1, NTA 4.2.2, UDT 3.2.4, WPM 2.2.1

 

 

 

 

Do I Need To Download/Install Anything Else To Make This Magic Work?

Other than having a functional installation of a SolarWinds product, you only need to download the following item(s):

 

Highcharts (Version 5.0.9 was used, however, you should be able to use a new version)

 

 

 

 

Where Do I Put Everything?

The following locations are simply the locations I used while testing this modification. Feel free to adjust things as needed to fit your environment/preferences.

 

Highcharts:
Extract To:

/inetpub/SolarWinds/Orion/js/highcharts/

 

(This is the custom resource file you will have created from these documents.)

Copy To:

/inetpub/SolarWinds/Orion/NetPerfMon/Resources/Misc/

 

 

 

 

How Do I Make My Newly Created Custom Resources Come To Life?

After you have copied your "CustomChart.ascx" file into the correct folder on your main SolarWinds server (web server), you will need to load the resource into the resource cache. This can be done one of the following two ways.

 

The Easy Way

     1) On the main SolarWinds server (web server), navigate to the following folder:

               \ProgramData\Solarwinds\Orion\

     2) Delete the following file: (If you are uneasy about deleting files on your server, you can also rename it, as long as that filename does not exist in that folder)

               WebResourceCache.xml

     3) Open the IIS Manager, and navigate to the "Application Pools" section.

     4) Select the "SolarWinds Orion Application Pool", and then click "Recycle", under the "Application Pool Tasks".

 

The next time you customize a page, and attempt to add your new resource (or any resource), SolarWinds will rebuild the "WebResourceCache.xml" file, and your new custom resource will magically appear.

("The Easy Way" has been brought to you by the following sponsor: antonis.athanasiou. Here is a link to his actual comment/process: https://thwack.solarwinds.com/docs/DOC-187082#comment-218477 )

 

 

The Hard Way

Okay, technically this way is actually hard. However, it will cause just a little bit of downtime, whereas the option listed above does not.

If you do not want to do things quick and easy, then you will need to run the config wizard on the web server, and rebuild things that way.

 

(While I am not 100% certain, I believe "The Hard Way" will only work on SolarWinds environments still running older versions. I think they changed some things after NPM 12, and the config wizard might just wipe all custom files out of SolarWinds folders... at least until you make a few adjustments, which will be posted elsewhere...)

 

 

 

 

Alright, Enough Of This Boring Information, And Silly Rules... Where Do I Go From Here?

(These are a "Work In Progress". Some of the links below may not yet be available, so please check back later.)

1) The Query: Retrieving, Formatting, And Storing The Data

2) Simple Charts I: Graphing A Single Metric On A Single Element Over A Period Of Time

3) Simple Charts II: Graphing Two Metrics On A Single Element Over A Period Of Time

4) Simple Charts III: Graphing A Single Metric On Multiple Dynamic Elements Over A Period Of Time

5) Simple Charts IV: Graphing Two Metrics On Multiple Dynamic Elements Over A Period Of Time

6) Advanced Charts: Multiple Graphs With Various Metrics (Grouped) On Various Devices (Grouped)

 

 

 

>>> SKIP TO NEXT PAGE
The Query: Retrieving, Formatting, And Storing The Data

NetScaler CPU/RAM

Cleaning up the unknown interface, volume, hardware (swql)

$
0
0

Cleaning up is always a bit of a chore.  Luckily this script makes a little easier by pointing to objects which are "unknown". 

The script will list up, down, disabled, unknown, and total for three objects - Interfaces, volumes, and hardware.   I'm sure it can be expanded to other objects as well.

To get just the unknowns, comment out the three lines and uncomment the fourth.

select

n.Caption ,n.vendor

--,isnull(i.up,0) as [Int-Up], isnull(i.Down,0) as [Int-Down], isnull(i.dis,0) as [Int-Dis], isnull(i.Unk,0) as [Int-Unk], isnull(i.total,0) as [Int-Total]

--,isnull(vol.up,0) as [Vol-Up], isnull(vol.Down,0) as [Vol-Down], isnull(vol.dis,0) as [Vil-Dis], isnull(vol.Unk,0) as [Vol-Unk], isnull(vol.total,0) as [Vol-Total]

--,isnull(hi.up,0) as [Hard-Up], isnull(hi.down,0) as [Hard-Down], isnull(hi.Dis,0) as [Hard-Dis], isnull(hi.unk,0) as [Hard-Unk], isnull(hi.total,0) as [Hard-Total]

,isnull(i.unk,0) as [Int-Unk], isnull(vol.unk,0) as [Vol-Unk], isnull(hi.unk,0) as [Hard-Unk]

from orion.nodes n

left join (select v.nodeid

,sum(case when v.status=1 and v.VolumeType like 'Fix%' then 1 else 0 end) as [Up]

,sum(case when v.status=0 and v.VolumeType like 'Fix%'then 1 else 0 end) as [Unk]

,sum(case when v.status=2 and v.VolumeType like 'Fix%'then 1 else 0 end) as [Down]

,sum(case when v.status=27 and v.VolumeType like 'Fix%'then 1 else 0 end) as [Dis]

,sum(case when v.VolumeType like 'Fix%' then 1 end) as [Total] 

      from orion.Volumes v

      group by v.nodeid     ) vol on vol.nodeid=n.nodeid

left join (SELECT hi.NodeID

,sum(case when hi.statusdescription ='up' then 1 else 0 end) as [Up]

,sum(case when hi.statusdescription ='down' then 1 else 0 end) as [Down]

,sum(case when hi.statusdescription ='unknown' then 1 else 0 end) as [Unk]

,sum(case when hi.statusdescription ='disabled' then 1 else 0 end) as [Dis]

,count(*) as [Total]

FROM Orion.HardwareHealth.HardwareItem hi

group by hi.nodeid) hi on hi.nodeid=n.nodeid

left join (select i.nodeid

,sum(case when i.status=1 then 1 else 0 end) as [Up]

,sum(case when i.status=2 then 1 else 0 end) as [Down]

,sum(case when i.status=0 then 1 else 0 end) as [Unk]

,sum(case when i.status=27 then 1 else 0 end) as [Dis]

,count(*) as [Total]

FROM Orion.NPM.Interfaces i

group by i.nodeid) i on i.nodeid=n.nodeid

where n.status=1 and n.ObjectSubType not like 'ICMP'

order by isnull(i.unk,0)+isnull(vol.unk,0)+isnull(hi.unk,0) desc

 

Thanks

Amit

Syslog Service Rejecting packets Error Decoding Packet Packet Missing Starting '

$
0
0


Issue: Syslog Service Rejecting packets Error Decoding Packet Packet Missing Starting '<'

 

In the syslog tab, i'm no getting any syslog messages. if i go to the event viewer i got this message (warning):

  1. SWSyslogService.SyslogPacket.DecodePacket - Packet Missing Starting

- Error Decoding Packet

Error Detail-System.FormatException: Invalid character in a Base-64 string.

at System.Convert.FromBase64String(String s)

at SyslogService.SyslogPacket.DecodePacket()

 

and this:

  1. SWSyslogService.SyslogPacket.DecodePacket - Packet Missing Starting

- Error Decoding Packet Packet Missing Starting '<'

 

source: syslog service

eventID: 1025 &1026

 

 

Troubleshooting :-

Capture the Traffic using below post for the effected host.

How to Verify Orion / Kiwi Syslog receiving  (NetFlow  port 2055) / (Traps port 162 ) / ( Syslog port  514 ) Traffic on …

 

 

Looking at the packet capture from effected host , Comparing that packet capture to tests that I ran on my lab server, the Syslog messages are not coming across with a severity or facility.

screen-shots of the packet capture from effected node , notice the (Unknown) part on the Syslog message in your packet capture and then looking at my test capture that is were the facility and severity should be.

 

 

workingnode.PNG

 

Missing Security Facility

No Security PNG.PNG

 

 

Or

 

Resolution:

Edit section

  1. Open up Database Manager application on the Orion server.
  2. Add Default Server.
  3. Right click on database and select 'New Query'.
  4. Enter the following query:
    UPDATE [dbo].[Settings] SET [CurrentValue] = 1 WHERE [SettingID] = 'SysLog-EnableRfcRelay'
  5. See if messages now appear correctly in Syslog viewer.

NetScaler CPU/RAM

OTV-state.UnDP

Script to Unmanage all hosts in a CSV file

What We're Working on for NPM (Updated December 4th, 2017)

$
0
0

NPM 12.2 has shipped and we're hard at work building the next release.  Here's what we're working on, in no particularly order.

 

  • Network Insight for Cisco Nexus - Covering things like FEX, VPCs, VDCs, and better handling of large interface counts.
  • Scalability Improvements - For example, increasing total element count per instance and adjusting UI workflows to work better in scale environments.
  • Remote Collector - New, agent based collector for distributed environments and hybrid deployments
  • Orion on RDS - Support for Amazon RDS as the repository for the Orion database
  • Next Generation Orion Mapping
  • Centralized Upgrades
  • New Scalability Engines Installer
  • Orion Agent AIX
  • TLS 1.2 Support for Legacy Tools
  • UPS Monitoring
  • Cisco ACI Monitoring

Cisco ISR 4321 CPU

Dependencies for packetloss

$
0
0

Dependencies are needed and it is somewhat implemented in Orion (node dependencies).   However, to create other dependencies - we are left to our own methods.

One way of doing it is proposed by alexslvDependencies using custom properties.

 

Another solution was proposed by me Dependencies using custom properties

 

The following is even a simpler solution to suppress the 'High Pack Loss" alert for small number of dependencies.   To use a scalable solution, I would use the method I had described in my article Dependencies using custom properties

 

The simple solution is to suppress the alert when the WAN node for the site is experiencing packet loss.  Unfortunately, this is a bit wonky using the GUI and I ended up using SWQL.

 

This is what the alert gives us as a base:

From there we just need to compare the WAN node to see if it has packet loss and if it does then don't do anything.

First make sure we're looking at the SiteID and the node is not unmanaged.  Then if the WAN node percent loss is 0 then trigger.

 

This gives us the proper "percent loss alert" for the site nodes and suppression when the WAN node is experiencing percent loss.

 

Thanks

Amit

Muted Nodes Resource

$
0
0

Muting of Nodes, Interfaces, and Applications is a great option added to Orion, but I've noticed that there wasn't an easy way to see these in a report.  With that in mind, I added a custom report in my environment.  There are three total variations of the report - for those running Network Performance Monitor, Server & Application, or both.

 

You can also easily see muted elements from the new Managed Entities view, but I want them quicker.

Muted Elements via Managed Entities

Managed Entities is restricted to pseudo-admins, and some of my users don't have access to that page, nor do I want them to have access.  They could run the report, I don't always want them to run a report when they need a list of elements that are muted.

 

Since the report is based around SWQL, I can leverage the same to build a custom query resource on the Enterprise Dashboard.

 

For those new to the suite, I wanted to give you the step-by-step skinny on how I did this.

 

Start by clicking on the pencil icon on the top-left of the page to Customize the page.

Customize Page

Next, we've got to add a new widget.

Add a Widget

 

Search in the Available Widgets for the Custom Query.

Find that Widget!

 

Now drag that Widget to a new location on your page.

Drag that Widget

 

In the Add Widgets bar, click "Done Adding Widgets."

All Done!!!

 

In the Customize Page bar, click on "Done Editing."

No More Customizations

 

The current resource is empty, now let's edit it.

Edit that Query!

 

Here's the meat and potatoes for the widget.

Yum - Meat & Potatoes

These are the settings that I'm using:

Title: Muted Alerts

Subtitle: Current or Scheduled Muted Alerts

Custom SWQL Query:

SELECT DISTINCT       CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[Caption]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[FullName]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[FullyQualifiedName]          ELSE 'SomethingElse'       END AS [Element],       CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[DetailsUrl]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[DetailsUrl]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[DetailsUrl]          ELSE 'SomethingElse'       END AS [_LinkFor_Element],       [AE].AccountID AS [By],       ToLocal([SuppressFrom]) AS [Start],              ToLocal([SuppressUntil]) AS [End]
FROM Orion.AlertSuppression AS [AlertSup]
LEFT OUTER JOIN Orion.Nodes AS [N]   ON [AlertSup].[EntityUri] = [N].[Uri]
LEFT OUTER JOIN Orion.NPM.Interfaces AS [I]   ON [AlertSup].[EntityUri] = [I].[Uri]
LEFT OUTER JOIN Orion.APM.Application AS [AA]   ON [AlertSup].[EntityUri] = [AA].[Uri]
LEFT OUTER JOIN Orion.AuditingEvents AS [AE]   ON [AE].AuditEventMessage LIKE CONCAT('%', CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[NodeName]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[InterfaceCaption]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[Name]          ELSE 'Wrong'       END, '%') AND [EntityUri] LIKE CONCAT('%=', [AE].NetObjectID)
INNER JOIN Orion.AuditingActionTypes AS [AT]   ON [AE].ActionTypeID = [AT].ActionTypeID
WHERE [AT].ActionType IN  ( 'Orion.AlertSuppressionAdded', 'Orion.AlertSuppressionChanged' )
ORDER BY [SuppressFrom]

 

Search SQWL Query:

SELECT DISTINCT       CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[Caption]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[FullName]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[FullyQualifiedName]          ELSE 'SomethingElse'       END AS [Element],       CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[DetailsUrl]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[DetailsUrl]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[DetailsUrl]          ELSE 'SomethingElse'       END AS [_LinkFor_Element],       [AE].AccountID AS [By],       ToLocal([SuppressFrom]) AS [Start],       ToLocal([SuppressUntil]) AS [End]
FROM Orion.AlertSuppression AS [AlertSup]
LEFT OUTER JOIN Orion.Nodes AS [N]   ON [AlertSup].[EntityUri] = [N].[Uri]
LEFT OUTER JOIN Orion.NPM.Interfaces AS [I]   ON [AlertSup].[EntityUri] = [I].[Uri]
LEFT OUTER JOIN Orion.APM.Application AS [AA]   ON [AlertSup].[EntityUri] = [AA].[Uri]
LEFT OUTER JOIN Orion.AuditingEvents AS [AE]   ON [AE].AuditEventMessage LIKE CONCAT('%', CASE          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'             THEN [N].[NodeName]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'             THEN [I].[InterfaceCaption]          WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'             THEN [AA].[Name]          ELSE 'Wrong'       END, '%') AND [EntityUri] LIKE CONCAT('%=', [AE].NetObjectID)
INNER JOIN Orion.AuditingActionTypes AS [AT]   ON [AE].ActionTypeID = [AT].ActionTypeID
WHERE [AT].ActionType IN  ( 'Orion.AlertSuppressionAdded', 'Orion.AlertSuppressionChanged' )  AND CASE         WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%' AND [EntityUri] NOT LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/%'            THEN [N].[Caption]         WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Interfaces/InterfaceID=%'            THEN [I].[FullName]         WHEN [EntityUri] LIKE 'swis://%/Orion/Orion.Nodes/NodeID=%/Applications/ApplicationID=%'            THEN [AA].[FullyQualifiedName]         ELSE 'SomethingElse'      END LIKE '%${SEARCH_STRING}%'
ORDER BY ToLocal([SuppressFrom])

Number Of Rows Per Page: 5 (choose this number as you like)

 

Submit the changes and you are set.

Now that's nice!

Now you have quick access to all the elements that you have muted... oh and you get to see who requested the alerts being muted.

Google Maps in Orion NPM - How to Video

$
0
0

I've made some changes to the original Google Maps that I introduced about this time last year. This version provides a status icon on the map for each unique latitude and longitude value in the database. I'm leaving the old one up as it is better for environments where a large number of sites exist, and would simply be too cluttered with a status icon at each site.

 

Prerequisites:

1) Obtain Google API Key for Maps v3

2) Create and populate Custom Properties:

  • Country
  • City
  • Latitude
  • Longitude

 

Installation:

Copy files to the c:\inetpub\SolarWinds\Orion\GoogleMap\

Update your connection string and API key

Create a view in NPM using the Custom HTML resource, configure iFrame

 

See the movie (how to install the mod):

2013-07-25_10-43-25 - YouTube

 

Read the book (asp files, readme, notes on GitHub):

https://gist.github.com/BarefootAtomic/a396a12541ff97a2ce1f

 

map.png

 

 

Enjoy!

 

Andrew LaGrone, SCP#1368

Multi-Column All Nodes widget (sql)

$
0
0

Occasionally I need to display status of nodes without all the white space.

 

Nicely compressed to give maximum amount of information.  Perfect for a NOC view.

 

select

max(column1) as column1,

max(column2) as column2,

max(column3) as column3,

max(column4) as column4

from (

select

linenumber,

case colnumber when 1 then node else NULL end as column1,

  case colnumber when 2 then node else NULL end as column2,

  case colnumber when 3 then node else NULL end as column3,

  case colnumber when 4 then node else NULL end as column4

from (select   '<img src="/orion/images/statusicons/Small-'+tmp.StatusLED+'"/>' +'<a href="/Orion/View.aspx?View=NodeDetails&NetObject=N:'+cast(tmp.NodeID as varchar)+'">'+tmp.node+'</>' [Node]

                      ,((rownumber-1) / 4) + 1 as linenumber,((rownumber-1) % 4)+1 as colnumber

       from (select n.nodeid, n.statusled, n.Caption as [Node],rownumber = ROW_NUMBER() over (order by n.caption asc) from Nodes n) tmp

) tmp1

group by linenumber, tmp1.colnumber, tmp1.node) tmp2

group by tmp2.linenumber

 

Thanks

Amit

Orion Polling Engine Report

$
0
0

Updated to use hover-overs & expose more details.

 

Polling Engine Report

 

By default, this sorts the Primary Polling Engine first and then all Add'l Polling Engines by Name.

 

If you want to put the SWQL into a Custom Query widget, the code is:

SELECT        CASE                  WHEN [N].Caption IS NULL THEN [E].ServerName                 ELSE CONCAT('<a href="', [N].DetailsUrl, '">', [N].[Caption], '</a>')                END AS [Caption]              , [E].ServerType              , [N].DetailsUrl AS [_LinkFor_Caption]              , ROUND([N].SystemUpTime / 60 / 60 / 24, 2 ) AS [Uptime (Days)]              , MinuteDiff([E].KeepAlive, GETUTCDATE()) AS [Last Checkin (Minutes)]              , [E].Elements AS [Monitored Elements]              , [E].Nodes AS [Monitored Nodes]              , [E].Interfaces AS [Monitored Interfaces]              , [E].Volumes AS [Monitored Volumes]              , [E].Pollers AS [Monitored UnDP]              -- Comment out the follow line if you don't own SAM              , [SAM].ComponentCount AS [Monitored Components]              , [E].EngineVersion              , CONCAT([E].WindowsVersion, '/', [E].ServicePack ) AS [OS/SP]              , [N].CPULoad AS [CPU %]              , [N].PercentMemoryUsed AS [Mem %]              , [E].PollingCompletion AS [Polling Completion %]
FROM Orion.Engines AS [E]
-- Use of LEFT JOIN so that we can show Engines even if we aren't monitoring them... but we should be monitoring them
LEFT JOIN Orion.Nodes AS [N]  ON [E].IP = [N].IP_Address
-- Comment out the follow block if you don't own SAM
-- [BEGIN] SAM Information...
INNER JOIN ( SELECT COUNT([AA].ComponentID) AS ComponentCount                  , [N].EngineID
FROM Orion.APM.Component AS [AA]
INNER JOIN Orion.APM.Application AS [A]   ON [AA].ApplicationID = [A].ApplicationID
INNER JOIN Orion.Nodes AS [N]   ON [A].NodeID = [N].NodeID
WHERE [AA].Disabled = 'False'
GROUP BY [N].EngineID ) AS [SAM]   ON [SAM].EngineID = [E].EngineID
-- [END] SAM Information
ORDER BY [E].ServerType DESC, [N].Caption

 

 

Inspired by Orion_Polling_Engine_Load.OrionReport, I decided to take that and move it to the Web Report.

 

Feedback is appreciated!

Using Custom Properties sending Alert emails

$
0
0

After receiving lots of queries i will try to explain in screen shots what steps needs to take if you wish to use custom properties logic to send email alerts to respective location / or team responsible for that node and group.

Basically when you have bunch of Nodes and you just wanted to send emails to the related department / Engineering Team only

Or You may have monitoring nodes for multiple customers where you would like to send emails to related customer for the nodes for that customer /

 

This post  can help in order to configure .

 

Step #1 Creating Custom Property

 

Start with Custom properties

Settings > manager custom properties.

Add Custom Properties

1.PNG

 

2.PNG

 

 

3.PNG

Leave it blank and Submit

4.PNG

Step #2 Assigning email to the nodes

 

Go to Settings Manage Nodes.

(Select multiple Node you wish to assign the email ) and click Edit Properties.

Now assign the email you wish to assign so all the alerts will be sent to respected email for these nodes .

And Submit to save changes.

5.PNG

6.PNG

Step #3 Using Custom property name under Alert Trigger Condition

 

Now in Alert use the custom property name to send the email for required email address for each node.

Select the Alert you wish to Edit and Edit Trigger Action > Send an email /page.

Add Trigger Action

7.PNG

 

When the alert will trigger it will use the email you have assigned to the Node.

 

 

***** Adding CC you can create more custom properties to include CC emails such as an example below ****

${Email}

${EmailCC}

8.PNG

 

 

PLEASE NOTE:- THIS SOLUTION WILL ONLY WORK FOR THE NODES


Response Time vs Packet Loss Last 30 Days

How to: Add a Classification Banner

$
0
0

SolarWinds customers have known for a long time that the power of the Orion products lie in the ability to customize almost everything. Product managers like myself always seek to identify and promote common alterations to become out of the box content, but at times you need things faster than we can release. One example is the ability to set a classification banner. Many of our federal customers have requirements for compliance e.g. Setup SSL and Enable Smart Card (CAC/PKI) User Authentication for Orion Web Console (Legacy) including setting login text and adding a global classification banner to the web console.

 

By following these steps, and with a little knowledge of css styling you can place a banner to meet your classification needs, before we standardize on an easy out of the box way to do so in a future release.

 

 

Please note that as always, custom code like this one isn't officially supported, thus if you upgrade or apply a hotfix, the configuration wizard will overwrite this change when updating the website. You'll simply want to have a copy of the changes on the side so you can reapply this customization after you finalize your upgrade. This is also why we have a reminder on our upgrade guide to back up custom code before you upgrade.

 

Step 1 : Create foo.js

 

Create a text document called foo.js. The content of this file will look like the following. This is where your css styling knowledge can come into play because I doubt you're looking to have an orange banner, so you'll want to switch out the text ("My Classification Banner") and change the style to what you're looking to add.

 

document.addEventListener('DOMContentLoaded',function(){                window.$('#CustomBanner').append("<div class='sw-eval-mode' style='background-color:orange; position: relative; z-index: 1;text-align: center;'>My Classification Banner</div>")
}, false);

 

Step 2: Navigate to your InetPub directory

 

On my lab environment this is located in C:\inetpub, and the directory I'm interested in navigating to is: C:\inetpub\SolarWinds\Orion\js\OrionMinReqs.js

The contents of this directory should look like this:

Step 3: Copy foo.js to the OrionMinReqs.js directory and edit the bundler.config

 

The original bundler.config file should look similar to the following.

Add a line <file>foo.js</file> to the bottom of the list and save.

 

Step 4: Navigate to C:\inetpub\SolarWinds\ui\Views\Shared

Step 5: Edit _Layout.cshtml

 

In this file you'll be doing a Ctrl-F for  @if (displayHeaderAndFooter)

 

 

Remember that snippet of code in foo.js? Parse out the <div> part to be used in this file.

 

<div class='sw-eval-mode' style='background-color:orange; position: relative; z-index: 1;text-align: center;'>My Classification Banner</div>

 

The section will now look like you've added this code snippet in between the evaluation bar & the header

 

  @if (displayHeaderAndFooter)    {        <div id="swNavScroll" class="sw-page-header">            @Html.Partial("~/Views/Shared/_EvalBar.cshtml", licenseData)    <div class='sw-eval-mode' style='background-color:orange; position: relative; z-index: 1;text-align: center;'>My Classification Banner</div>            @Html.Partial("~/Views/Shared/_Header.cshtml")        </div>    }

 

Save your file.

 

Step 6: Check your results

 

Here I'm looking at my License Manager to check my banner

And here I'm seeing it on my Settings page

 

 

It's also present on my Orion Summary Home page

 

 

And you're done! Classification banner added.

 

 

Disclaimer:

Dependencies Status Report

How long each Node or Interface was down. NPM_v.10.6

Node Downtime with Duration and Minimum Length Filtering

$
0
0

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],GETUTCDATE())),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
Viewing all 1956 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>