Quantcast
Viewing all 1956 articles
Browse latest View live

Volume Usage Spike Detection Alert


Cambium Networks PTP

Image may be NSFW.
Clik here to view.

Adding Live Weather to the "Worldwide Map" Resource

Adding Live Weather to the "Worldwide Map" Resource

 

Summary: This will allow you to add live weather to the worldwide map based on the OpenWeatherMap project (free).

Limitations: The map must be on a page where your can insert HTML/JavaScript. This will probably break during future releases.

Notes: If you want to change the height of your map you must do it within the HTML resource.

Preview:

Image may be NSFW.
Clik here to view.
Capture.PNG

 

Step 1: Get the id of your map element, to do this go to a page where you've inserted the map (don't go to the map page itself). Once there view the source of the page (Ctrl + U in most browsers) and search for the map element (Ctrl + F), search for 'id="worldmap' (without the single quotes but with the double quote). Make note of your map ID, in this case 753.

Image may be NSFW.
Clik here to view.
mapID.PNG

Step 2: Add a HTML resource to the page with the map on it that you would like to modify. To do this go to "Customize Page" >>> "Add Resource To Column X" >>> "Custom HTML".

Step 3: Paste the contents of the attached file into the Custom HTML resource you just added to the page. Make sure you update the file with your map ID you found in step 1 and change others settings you would like to.

F5 Config Sync Status

Image may be NSFW.
Clik here to view.

Group status bullseye style charts

Utility for ping host by URL

Orion Polling Engine Report

Updated to use hover-overs & expose more details.

 

Image may be NSFW.
Clik here to view.
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!

Image may be NSFW.
Clik here to view.

VMs Not Monitored In SolarWinds Orion (Exported Report) - Prosperon Networks


View Dynamic Baselines for All Nodes In NPM

Add a custom chart resourse to your selected webpage,Add data source and select custom sql. Add in the below script and submit. Select all columns and submit.

 

select level1value, level2value, Name, caption from NodesThresholds, nodes where level1formula IS NOT NULL AND Level2Formula IS NOT null

 

Image may be NSFW.
Clik here to view.

MOD/HACK - NPM 12 Notification on Paused Alert Actions

To prevent prolonged periods where Alert Actions are paused, you can use this tweak to have a notification added to the header of your NPM web page. This hack is surely not supported by SolarWinds, use it at your own risk... until they provide a permanent feature as requested here: "Pause all alerts action" should trigger the addition of a message to the Notification section

 

1 - Create a new Notification Type:

INSERT INTO [SolarWindsOrion].[dbo].[NotificationItemTypes]    (    [TypeID],        [TypeName],        [Module],        [DetailsUrl],        [Icon],        [DisplayAs]    )
VALUES     (    NEWID(),        'PausedAlertActionsNotification',        'Orion.Core',        '/Orion/NetPerfMon/Alerts.aspx',        '/Orion/images/NotificationImages/notification_tip_suggestion.gif',        'LatestItemTitle'    )

 

2 - Do a query to find out the newly generated GUID and validate step #1: Note down the resulting GUID, as we will reuse it in the next steps

SELECT         [TypeID],        [TypeName],        [Module],        [Caption],        [DetailsUrl],        [DetailsCaption],        [Icon],        [Description],        [DisplayAs],        [CustomDismissButtonText],        [HideDismissButton]
FROM [SolarWindsOrion].[dbo].[NotificationItemTypes]
WHERE [TypeName] = 'PausedAlertActionsNotification'

 

3 - Insert permissions for newly created Notification Type: Replace the content in line #6 with the GUID givent at Step #2

INSERT INTO [SolarWindsOrion].[dbo].[NotificationTypePermissions]    (    [NotificationTypeID],        [RequiredRoleID]    )
VALUES     (    '26484C48-F474-4B05-BB9E-14CCFBF36609',        '1'    )

 

4 - Restart the SolarWinds services for this permission to be taken into account

 

5 - Create a test notification: Replace the content in line #14 with the GUID givent at Step #2

INSERT INTO [SolarWindsOrion].[dbo].[NotificationItems]    (    [NotificationID],        [Title],        [CreatedAt],        [Ignored],        [NotificationTypeID],        [Url]    )
VALUES     (    NEWID(),        'All Alerts actions were paused',        GETUTCDATE(),        '0',        '26484C48-F474-4B05-BB9E-14CCFBF36609',        '/Orion/NetPerfMon/Alerts.aspx'    )

 

6 - Refresh your homepage the notification should be there!

 

7 - Create a job to automagically trigger a notification when alerts are paused: Once again, replace the GUID at line #23 according to your previous results.

USE [SolarWindsOrion]
GO

CREATE TRIGGER PausedAlertActionsNotificationSetTrigger 
    ON [SolarWindsOrion].[dbo].[Settings]
AFTER UPDATE
AS 
BEGIN    SET NOCOUNT ON;    INSERT INTO [SolarWindsOrion].[dbo].[NotificationItems]         (    [NotificationID],             [Title],             [CreatedAt],                [Ignored],             [NotificationTypeID],            [Url]        )    VALUES         (    NEWID(),            'All Alerts actions were paused',            GETUTCDATE(),            '0',            '26484C48-F474-4B05-BB9E-14CCFBF36609',            '/Orion/NetPerfMon/Alerts.aspx'    )    SELECT I.[SettingID], I.[CurrentValue]    FROM [SolarWindsOrion].[dbo].[Settings] s    INNER JOIN inserted i on s.SettingID=i.SettingID        AND i.SettingID='AlertEngine-PauseActionsOfAllAlerts'        AND i.CurrentValue='1'
END

 

The trigger will appear under dbo.Settings/Triggers:

Image may be NSFW.
Clik here to view.

 

8 - Navigate to YourServer/Orion/Netperfmon/Alerts.aspx and pause actions of all alerts:

Image may be NSFW.
Clik here to view.

 

9 - Enjoy!

Image may be NSFW.
Clik here to view.

 

 

Possible improvements:

  • Auto-remove the notification when the condition is no longer true.
  • Hide the dismiss button so everyone has visibility on this status
  • Add desktop notification, audit trail and/or SW event entries.
Image may be NSFW.
Clik here to view.

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

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

Time Zone Clocks using javascript

Image may be NSFW.
Clik here to view.

Adjusting Pages To Display More Stuff

When it comes to working on projects, I always feel I NEED to use all the desktop real estate I have available. As much as I love SolarWinds, we have always been at odds here. While I want to use every last pixel of my screens to view, and work with, my data, SolarWinds products tend to want to keep me boxed up, working in tiny little windows. Someday, however, we will all be on the same page, and we will be using every pixel possible on that page. Until then, this is how you can easily, and fairly safely, adjust how much scrolling and paging you are required to do. This simple walkthrough will show you a few places you can make tiny adjustments, and see giant results.

 

ESTIMATED TIME TO INSTALL/PERFORM MODIFICATION:<10 Minutes

DIFFICULTY LEVEL:1-Youngling

  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; some coding experience required/recommended, 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...)

 

 

 

Before we begin,

 

 

PLEASE don't edit files without backing them up first.

If you see a friend or co-worker making changes without backing up first, please alert the authorities.

Friends don't let friends mod without backups.

 

 

 

Also, please keep in mind, changes made to system files will revert back to default when running the config wizard.

 

 

 

This walkthrough will use the "Manage Accounts" page as the running example.

 

Let's start by seeing what things look like before we make any changes.

Image may be NSFW.
Clik here to view.

 

In the screenshot above, you can see we can only work with 9 lines, AND we will need to be scrolling over as well. Being the lazy admin I am, this is totally unacceptable. I cannot spend my days clicking and scrolling through unnecessary adventures. I need to see all my datas on all my pixels.

 

 

So, what kind of potential are we looking at/for? Well, that giant void looks like a good place to start. Additionally, look at the alignment of those column heading and table data. Those big gaps make it somewhat confusing to view the data when we are trying to put more on the screen at once. And, one final thing, I notice there are a few columns that simply do not apply to my needs, and are taking up my valuable screen real estate. (This surely does not apply to everyone, but it does to me, so it is here...)

Image may be NSFW.
Clik here to view.

 

 

 

 

If it's not broke, then fix it until it is?

 

Let's make our first adjustments. Open the following file in notepad++, or whatever letter changing tool you enjoy using.

\inetpub\SolarWinds\Orion\Admin\Accounts\js\Accounts.js

 

//

//Adjusting the settings in the "\inetpub\SolarWinds\Orion\Admin\Accounts\js\Accounts.js" file should allow you to easily, and fairly safely, change the look and feel of the corresponding GUI/page.

//This block of code is located between lines 314 and 344. Depending on previous versions, as well as future updates, these line numbers may change.

//

            grid = new Ext.grid.GridPanel({                store: dataStore,                columns: [                        selectorModel,                        { header: '@{R=Core.Strings;K=WEBJS_AK0_9;E=js}', width: 200,align: 'center', sortable: true, dataIndex: 'Accounts.AccountID', renderer: renderAccountName },                        //{ header: '@{R=Core.Strings;K=WEBJS_AK0_81;E=js}', width: 150, sortable: true, dataIndex: 'Accounts.AccountType', renderer: renderAccountType },                        { header: '@{R=Core.Strings;K=WEBJS_VB0_23;E=js}', width: 105,align: 'center', sortable: true, dataIndex: 'Accounts.AccountEnabled', renderer: renderYesNo },                        //{ header: '@{R=Core.Strings;K=WEBJS_AK0_82;E=js}', width: 175, sortable: true, dataIndex: 'Accounts.Expires', renderer: renderAccountField },                        { header: '@{R=Core.Strings;K=WEBJS_AK0_83;E=js}', width: 175,align: 'center', sortable: true, dataIndex: 'Accounts.LastLogin', renderer: renderAccountField },                        { header: '@{R=Core.Strings;K=WEBJS_AK0_84;E=js}', width: 205,align: 'center', sortable: true, dataIndex: 'Accounts.LimitationID', renderer: renderAccountField },                        { header: '@{R=Core.Strings;K=WEBJS_AK0_85;E=js}', width: 150,align: 'center', sortable: true, dataIndex: 'Accounts.AllowAdmin', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=WEBJS_AK0_86;E=js}', width: 130,align: 'center', sortable: true, dataIndex: 'Accounts.AllowNodeManagement', renderer: renderYesNo },                        { header: '@{R=Core.Strings.2;K=WEBJS_MG0_1;E=js}', width: 130,align: 'center', sortable: true, dataIndex: 'Accounts.AllowMapManagement', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=WEBJS_TM0_120;E=js}', width: 130,align: 'center', sortable: true, dataIndex: 'Accounts.AllowReportManagement', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=WEBJS_SO0_99;E=js}', width: 130,align: 'center', sortable: true, dataIndex: 'Accounts.AllowAlertManagement', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=XMLDATA_ED0_2;E=js}', width: 130,align: 'center', sortable: true, dataIndex: 'Accounts.AllowUnmanage', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=XMLDATA_JV0_1;E=js}', width: 155,align: 'center', sortable: true, dataIndex: 'Accounts.AllowDisableAction', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=XMLDATA_JV0_2;E=js}', width: 155,align: 'center', sortable: true, dataIndex: 'Accounts.AllowDisableAlert', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=XMLDATA_JV0_3;E=js}', width: 155,align: 'center', sortable: true, dataIndex: 'Accounts.AllowDisableAllActions', renderer: renderYesNo },                        { header: '@{R=Core.Strings;K=WEBJS_AK0_87;E=js}', width: 210,align: 'center', sortable: true, dataIndex: 'Accounts.AllowCustomize', renderer: renderYesNo }                ],                sm: selectorModel,                viewConfig: {                    //set to true if you want to resize each column with the window resize.  False maintains existing column sizes.                    forceFit: true,                    emptyText: '@{R=Core.Strings;K=WEBJS_AK0_88;E=js}'                },                //width: 700,                height: 750,                stripeRows: true,                trackMouseOver: false,

//

//

//

 

 

Finding our center:

 

Image may be NSFW.
Clik here to view.

 

 

//To "center" align the grid column(s), simply add the following to each line. (This will allow you to center some columns, while leaving other columns as they are.)

//

//,align: 'center'

//

//Here is the original line, BEFORE centering the column:

                        { header: '@{R=Core.Strings;K=WEBJS_AK0_9;E=js}', width: 200, sortable: true, dataIndex: 'Accounts.AccountID', renderer: renderAccountName },

//

Image may be NSFW.
Clik here to view.

 

//And here is the line, AFTER centering the column:

                        { header: '@{R=Core.Strings;K=WEBJS_AK0_9;E=js}', width: 200,align: 'center', sortable: true, dataIndex: 'Accounts.AccountID', renderer: renderAccountName },

//

Image may be NSFW.
Clik here to view.

Notice the subtle difference between the two "Admin Rights" columns above. While this may seem like too small of a change to notice, the results will all add up in the end.

 

 

 

Now that we have found our center, let's do something about all that unnecessary scrolling. (Both horizontally and vertically)

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

 

What are we supposed to do with this? Well, you're supposed to let the system work for you, not you for it.

The following adjustments will assist us in "fixing" these column widths. (I mean, just look at all that wasted space a simple Yes/No takes up.)

 

 

//These next few are very easy, as they are simply true/false, and numerical values.

//Somewhere around line 338, you should find an option to automatically adjust the column width. This will shrink down the default size of each column, automatically making each column fit on the page. No more having to manually adjust the width of each column, only to come back and do it again next time.

//

//BEFORE:

                    forceFit: false,

//

//AFTER:

                    forceFit: true,

//

 

Scrollbar, we don't need no stinking scrollbar!!

Image may be NSFW.
Clik here to view.

 

 

Now let's do something to remedy that vertical waste of space!

 

//Somewhere around line 342, you should find the value for the height of the grid.

//My default grid height was 350, so I changed the value to 750, and it fits my page perfectly.

//

//BEFORE:

                height: 350,

//

//AFTER:

                height: 750,

//

Image may be NSFW.
Clik here to view.

 

WHAT?!?! You mean we just went from 9 work lines to 24. After doing several maths, I have concluded that, at the very least, may have possibly, more than doubled our vertical space usage... (Still waiting on the official response from the maths station)

 

Well, I reckon the story ends here... Or... now that we have saved so many seconds of work, we could go out and spend them all on another improvement...

 

 

 

//

//The last thing I changed was a nice little option that automatically highlights the entire row your cursor hovers over.

//Nothing really special here, but I think it's nice to see the entire row I am working with, visibly different/standing out, from all the other rows.

//Once again, nothing fancy here, just a simple true/false toggle.

//

//BEFORE:

                trackMouseOver: false,

//

//AFTER:

                trackMouseOver: true,

//

Image may be NSFW.
Clik here to view.

Note the line above, where the cursor is hovering over... Do you see how that line stands out just a bit more distinct than the others? This is what you get when you enable the "trackMouseOver" option.

 

 

//

//While this is nothing ground breaking, and is probably as far from the future as it could be, it allows me to adjust the little things I see on a daily basis, which makes my broken brain happy.

//Additionally, I commented out a couple of columns too, as they don't really show me anything I need to see, and just take up more space.

//

Image may be NSFW.
Clik here to view.

Now, when it's all said and done, I can see EVERYTHING I need to see, all on a single page. No more viewing column data all scrunched up together. No more scrolling left and right to see every column for a user. No more viewing unnecessary columns. No more manually adjusting each column, every time I land on this page. And, most importantly, NO MORE TINY BOX!!

 

 

 

Bonus/Fun Tid-Bit:

I like how they actually have the universal "shift-multi-select" option on and working here... I just wish, as many others on Thwack, they would implement this functionality EVERYWHERE, across all modules, pages, products, settings, etc...

Anything that can be selected should have this functionality.

Image may be NSFW.
Clik here to view.

 

 

 

 

 

And this is where our journey ends...

On a single page, able to view all columns, and easily follow along, knowing exactly which account(s) we are going to manage.

 

Your 4k monitor can now use all the high tech space it has available.

(Because 4k was invented to better read spreadsheets and other text based webpages, right?)

 

 

//Remember, if you adjust anything in this default/system file, it WILL be reset when you run the config wizard to rebuild the website.

 

 

 

Go out and explore the files of your SolarWinds. And remember, if you break something, you always have 2 outs... You can blame it on the network, as well as the server... Let those two argue about it while you fix what you broke.

 

Try your skills on the manage custom properties page

\inetpub\SolarWinds\Orion\Admin\js\ManageCPGrid.js

 

//This is where you adjust the settings to allow the grid to expand to full screen. (or whatever size you need)

//Roughly around line ~800

            var mainGridPanel = new Ext.Panel({                region: 'center',                split: true,                width: 1800,                height: 800,                layout: 'border',                collapsible: false,                items: [navPanel, grid],                cls: 'no-border'            });

 

 

 

For more ways to customize your SolarWinds environment, make sure to check out this link, by CourtesyIT

How to do various customizations with your Solarwinds

 

 

 

Thank you,

 

-Will

Building Simple PerfStack Project Lists With SWQL

In my opinion, PerfStack is the best new thing SolarWinds has given us, since the last best new thing they gave us. PerfStack already has plenty of things going for it, even in its infancy. There are, however, a few things I would like to see improved.

 

My biggest, most important, PerfStack request is definitely improving the automation of building PerfStack "Templates". Here is a very simple workaround to build basic templates for all nodes, automatically.

Building Simple PerfStack Templates With SWQL

 

My next request, provide an easy way for users to access all, or even a subset, of the available PerfStack projects.

 

While we can share links with others, giving them access to saved projects, I still found the need for a simple list of projects, easily accessible. For my environment, "hidden" PerfStack projects do us little to no good. I want my team to be able to see all projects, and access any project they need, at any given moment. The following simple SWQL query will provide an easy way to accomplish this goal.

 

Step 1: Customize a page, adding the "Custom Query" resource, then edit said resource.

Step 2: Copy and paste the SWQL query below, into the resource.

 

This simple SWQL query will generate a list of all PerfStack projects, with clickable links, taking you directly to the project.

SELECT
DisplayName AS [Project]
,'/ui/perfstack/' + ProjectID AS [_LinkFor_Project]
,AccountID AS [Created By]
,UpdateDateTime AS [Last Updated On]
,CreateDateTime AS [Created On]

FROM Orion.PerfStack.Projects

ORDER BY DisplayName ASC

 

Additionally, if you would like to enable search, you will need to add the following in the "Search" query box, located under the main query box.

SELECT
DisplayName AS [Project]
,'/ui/perfstack/' + ProjectID AS [_LinkFor_Project]
,AccountID AS [Created By]
,UpdateDateTime AS [Last Updated On]
,CreateDateTime AS [Created On]

FROM Orion.PerfStack.Projects

WHERE
(AccountID LIKE '%${SEARCH_STRING}%')
OR
(DisplayName LIKE '%${SEARCH_STRING}%')

ORDER BY DisplayName ASC

 

Step 3: View, search, sort, and click through your simple little list of PerfStack projects.

Image may be NSFW.
Clik here to view.
PerfStackTests - Summary_20170614_0812.png

 

 

If you name your PerfStack projects with a little bit of thought, you can filter your SWQL results, only showing a small subset of projects.

 

Example: If you named your projects with a pseudo-label/code, appended to the beginning of the name, you could then build a list which would only show a specific subset of projects.

Let's use the "VLAN" projects for this example.

 

Main SWQL Query:

SELECT
DisplayName AS [Project]
,'/ui/perfstack/' + ProjectID AS [_LinkFor_Project]
,AccountID AS [Created By]
,UpdateDateTime AS [Last Updated On]
,CreateDateTime AS [Created On]

FROM Orion.PerfStack.Projects

WHERE
(DisplayName LIKE 'VLAN_%')

ORDER BY DisplayName ASC

 

Search SWQL Query

SELECT
DisplayName AS [Project]
,'/ui/perfstack/' + ProjectID AS [_LinkFor_Project]
,AccountID AS [Created By]
,UpdateDateTime AS [Last Updated On]
,CreateDateTime AS [Created On]

FROM Orion.PerfStack.Projects

WHERE
(DisplayName LIKE 'VLAN_%')
AND
(AccountID LIKE '%${SEARCH_STRING}%')
OR
(DisplayName LIKE '%${SEARCH_STRING}%')

ORDER BY DisplayName ASC

 

This query will generate the same list of PerfStack projects/links as the first one we did, however, the results are limited to ONLY the "VLAN" projects.

Now you can build your lists based on departments, or types, or anything else you deem necessary.

Image may be NSFW.
Clik here to view.
PerfStackTests - Summary_20170614_0837.png

 

 

Again, nothing ground breaking here... Just a simple way to see a simple list, of very helpful projects.

 

 

 

 

For more ways to customize your SolarWinds environment, make sure to check out this link, by CourtesyIT

How to do various customizations with your Solarwinds

 

 

 

 

Thank you,

 

-Will

Netbotz_Fahr_Temp.UnDP


Building Simple PerfStack Templates With SWQL

As the title states, I will attempt to show you how to build quick, and simple, PerfStack templates using SWQL queries. My intent is to keep it simple here, so I will NOT be going into anything that requires you to be a world class rocket surgeon.

 

Here is an easy way to build a list of saved PerfStack projects: Building Simple PerfStack Project Lists With SWQL

 

Basically, I just need a quick and easy way to build PerfStack views in bulk. When manually building a PerfStack dashboard, you are actually building the URL as you are adding the various metrics. I am simply taking that URL, and stamping it out across all nodes at once. I want to be able to build a handful of templates, to allow my team to quickly troubleshoot issues as they are occurring. I do NOT want to have someone building a PerfStack dashboard during the outage. I do, however, want them to have access to this super awesome tool, but it needs to be useful in the heat of battle. I think we will all get there, in time, but maybe this will work for now...?

 

 

Okay, in the spirit of keeping it simple, let's just start things out with a few metrics per node. More specifically, I am going to build a template that shows me the basic metrics for CPU, memory, response time, alerts, and events. Now, let's break this down...

 

Example NodeID: 1234

 

CPU

Orion.CPULoad.MinLoad

Orion.CPULoad.MaxLoad

Orion.CPULoad.AvgLoad

 

If you go through the steps to manually create your PerfStack dashboard, you would need to do the following:

Select the node you want.

Select the type of metrics you want.

Drag each node metric over to the graph section you want.

 

Using the min, max, avg cpu load metrics, on our example node (nodeid=1234), and having each on its own graph box, your URL would look something similar to this:

http://{orionserver}/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_1234-Orion.CPULoad.MinLoad;0_Orion.Nodes_1234-Orion.CPULoad.MaxLoad;0_Orion.Nodes_1234-Orion.CPULoad.AvgLoad;

 

And your PerfStack dashboard would look something like this:

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-001.png

All in all, pretty simple and easy to do.

 

Now, would you want to do that for each of the 1500, 5000, or 10000+ nodes you are monitoring? If so, I reckon there is no need for you to keep reading. In fact, you best get back to mass producing those graphs on your one person assembly line. For the rest of us, let's look at a simple solution.

 

 

Add a "Custom Query" resource to a summary page, and then add the following query into the resource.

 

SELECT
Caption
,'PerfStack_Template_A' AS [PerfStack-A]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;' AS [_LinkFor_PerfStack-A]
FROM Orion.Nodes

 

And, to make things a bit easier to navigate, enable the search option, and drop in the following query: (This is certainly not required, but will surely assist in tracking down the node you want to investigate.)

SELECT
Caption
,'PerfStack_Template_A' AS [PerfStack-A]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;' AS [_LinkFor_PerfStack-A]
FROM Orion.Nodes
WHERE
Caption LIKE '%${SEARCH_STRING}%'

 

After saving/submitting your resource, you should see something that looks like this:

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-002.png

 

See, nothing fancy... Just a simple little node search box, with a link to something.

 

Now check out what in one of those links...

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-003.png

Hmm... That looks awfully familiar... Only... You didn't have to build anything... And, whats more, it's already built for EVERY node you are monitoring.

 

 

Okay, I admit, that graph template is not all that impressive, and probably not worth much of anything... However, (yeah, there's always a however...) we can easily make a couple of changes, which should make this more helpful.

 

Instead of having each different CPU metric on its own graph box, let's group all 3 of them together in the same box.

This is easily accomplished by changing the inner semicolons to commas.

 

SELECT
Caption
,'PerfStack_Template_A' AS [PerfStack-A]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;' AS [_LinkFor_PerfStack-A]
FROM Orion.Nodes

 

After changing those 2 semicolons to commas, this is what our graph looks like: (since the min, max, & avg are all the same, our graph looks pretty well hidden, but as you can see on the right side, all 3 metrics are still there.)

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-004.png

 

Now, let's add some more stuff, and finish this thing up...

We are going to add the remaining items from our initial list (memory, response time, alerts, & events)

To show our progress, we are going to add new lines to our query, keeping the first draft the same. This will give us the ability to build different templates, and access them from a central place.

We are going to keep similar metrics together in the same graph box, as we did with the CPU Load metrics. We will end up with a single graph box which contains all of the CPU Load metrics, another with memory, another with response time, etc..

 

 

You are simply taking each of the individual metrics groups, and combining them together, into a single URL.

Use a comma to keep metrics in the same graph box, and use a semicolon to end the selection of each graph box.

Using the example below, first remove all of the lines that start with "--", as well as all blank/empty lines.

 

--CPU Load:
,'/ui/perfstack/?presetTime=last12Hours&charts=
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;

--Memory:
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.TotalMemory,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinMemoryUsed,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxMemoryUsed,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgMemoryUsed;

--ResponseTime:
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.AvgResponseTime,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MinResponseTime,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MaxResponseTime,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.Availability;

--Alerts & Events:
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Alerts,
0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Events;'

 

 

 

Then, just backspace the lines together, starting from the last row, and going up, until they look like this:

 

,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.TotalMemory,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgMemoryUsed;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.AvgResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MinResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MaxResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.Availability;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Alerts,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Events;'

 

 

Finally, just add that newly combined row to your query, which will then look like this: (Don't forget to add your SWQL _LinkFor_ alias to the end of the line, so it matches the alias name)

 

SELECT
Caption
,'PerfStack_Template_A' AS [PerfStack-A]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;' AS [_LinkFor_PerfStack-A]

,'PerfStack_Template_Z' AS [PerfStack-Z]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.TotalMemory,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgMemoryUsed;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.AvgResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MinResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MaxResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.Availability;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Alerts,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Events;' AS [_LinkFor_PerfStack-Z]

FROM Orion.Nodes

 

 

 

The End Result:

 

Here is my simple little SWQL query that will give you examples for each of the different basic metric types we used in the many, many, many words above.

 

PerfStack-A = CPU Load

PerfStack-B = Memory Used

PerfStack-C = Response Time

PerfStack-D = Alerts & Events

 

PerfStack-Z = All of the above

 

 

SELECT
Caption
,'PerfStack_Template_A' AS [PerfStack-A]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;' AS [_LinkFor_PerfStack-A]

,'PerfStack_Template_B' AS [PerfStack-B]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.TotalMemory,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgMemoryUsed;' AS [_LinkFor_PerfStack-B]

,'PerfStack_Template_C' AS [PerfStack-C]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.AvgResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MinResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MaxResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.Availability;' AS [_LinkFor_PerfStack-C]

,'PerfStack_Template_D' AS [PerfStack-D]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Alerts,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Events;' AS [_LinkFor_PerfStack-D]

,'PerfStack_Template_Z' AS [PerfStack-Z]
,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxLoad,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgLoad;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.TotalMemory,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MinMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.MaxMemoryUsed,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.CPULoad.AvgMemoryUsed;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.AvgResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MinResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.MaxResponseTime,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.ResponseTime.Availability;0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Alerts,0_Orion.Nodes_' + TOSTRING(NodeID) + '-Orion.PerfStack.Events;' AS [_LinkFor_PerfStack-Z]

FROM Orion.Nodes

 

 

The SWQL query above should show you a resource similar to:

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-006.png

 

And the "PerfStack-Z" template should build out to something like this:

Image may be NSFW.
Clik here to view.
Performance_Analysis_01_Basic_CPU_Load-005.png

**There is really no need to save this dashboard (that I know of, anyway), as the link will just open up the same exact thing, every time. However, if you wanted to use this as a jumping off point, adding other metrics for other nodes/interfaces/etc., it would probably be best to save it.**

 

 

While this is really only building single node "templates", you can add multiple nodes to a single graph with a quick copy paste, or some decent SWQL skills (which I am obviously lacking, as I don't have any a multi-node query ready yet...).

For example, the following would show the Average CPU Load for NodeIDs 1234 & 5678, on the same graph box.

0_Orion.Nodes_1234-Orion.CPULoad.AvgLoad,0_Orion.Nodes_5678-Orion.CPULoad.AvgLoad;

 

There is a browser/URL limitation, so, eventually, once the URL gets too long, it will not work. I believe this is why they convert the URL into a stored name, to circumvent the issue. Having said that, if you do build a super long URL, just update the database directly. (insert buyer beware, backup early, backup often, etc... )

 

 

This is, by no means, the best way to accomplish bulk "pre-built" templates for troubleshooting. However, maybe it will hold you over until the next release of PerfStack...?

 

 

 

 

For more ways to customize your SolarWinds environment, make sure to check out this link, by CourtesyIT

How to do various customizations with your Solarwinds

 

 

 

 

Thank you,

 

-Will

Cisco Firepower 4100 Series Node Details

Orion NPM HW HEALTH REPORT FOR NODES WITHOUT SENSORS

Here is a report that you can import into Orion to list all Windows NODES that do not have a HardWare Health Sensors being monitored.

** Attached report import is at bottom of this document **

 

Reference also : https://support.solarwinds.com/Success_Center/New_Articles/Report_HW_Hardware_Health_Node_not_being_monitored%2C_missing%2C_Null%2C_empty.

 

Document on how to create this ...

 

Steps to create a HW Health report to show nodes without any Sensors

 

This file contains all the steps and information that was recorded to help you describe the recorded steps to others.

 

Steps

 

 

Previous Next

 

Step 1: (3/29/2018 2:57:42 PM) User Comment: "Create a Solarwinds Web 'Custom Table' Report and give it a title. Then click the blue 'Edit' button next to the Datasource 1 option. **"

 

Image may be NSFW.
Clik here to view.

 

 

PreviousNext

Step 2: (3/29/2018 3:02:28 PM) User Comment: "From this 'Datasource 1' popup view; Chose Dynamic Query Builder | Choose Node (from I want to report on) | Chose Advanced Selector Radio Button. Now setup your conditions (or Criterian). In this case We are choosing to look at only 'Windows' Nodes and then the ** 2nd filter is on 'HardWareTypeName' is empty *** this tells the database to select only Nodes that do not have any hardware health records. ** "

Image may be NSFW.
Clik here to view.

 

PreviousNext

 

Step 3: (3/29/2018 3:02:40 PM) User left click on Add to Layout Then Click "Edit Table” Resource: Nodes without HW Health

Image may be NSFW.
Clik here to view.

 

PreviousNext

Step 4: (3/29/2018 3:02:45 PM) Create a report similar to what I have set in the example then click submit.

Image may be NSFW.
Clik here to view.

 

PreviousNext

Step 5: (3/29/2018 3:03:01 PM) User left click on "NEXT" (multiple times) to complete the wizard

 

Image may be NSFW.
Clik here to view.

 

PreviousNext

Step 6: (3/29/2018 3:03:01 PM) The Preview view will validate a sample of the data you are looking for in the report as shown here.

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

Google Maps in Orion NPM - How to Video

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

 

Image may be NSFW.
Clik here to view.
map.png

 

 

Enjoy!

 

Andrew LaGrone, SCP#1368

Why i need SQL SA level account credentials for Configuration Wizard

In this article you will learn the process or requirements for SQL credentials during Orion Configuration wizard to connect the application with SQL server and logic behind the process .

 

Stage # 1.

In the configuration wizard 1st step , we need to use a "sa" account (recommended) the logic behind that is the "sa" account is the member of sysadmin role , & therefore "sa" & sysadmin roles are the members of  dbcreator server role by default.

In the meantime you can also use the Windows authentication account (as far as that account is a member of dbcreator server role).

 

The reason we use high privileged account on the 1st step so we can access the SQL server without any security issues and as mentioned the sa account is a member of dbcreator server role by default (who have privileges to create a new database within SQL server)

 

Image may be NSFW.
Clik here to view.

 

Stage # 2
Now in the 2nd step of configuration wizard you simply select to create a new database (SolarWindsOrion) name of the orion database. Or an existing migrated Database

Image may be NSFW.
Clik here to view.

 

Stage # 3
Finally in the 3rd option you have to create a new "SQL authentication account" called "SolarWindsOrionDatabaseUser" the logic behind to create this account (it is just a public account that have read/write access to the Orion database) and nothing other then that, for day to day activities.Its not feasible as security point of view to use the "sa" account to access the Orion database,as this account has far more privileges and therefore not suitable in a day to day scenario.

Image may be NSFW.
Clik here to view.

 

I have already created SQL account for Orion where i can use it in configuration wizard ?


So if you do have already 3rd option account created you can simply use that account while connecting to the SQL Database on 1st step 



Image may be NSFW.
Clik here to view.
Viewing all 1956 articles
Browse latest View live


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