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

Custom alerts page using stored procedure and report


HOWTO - Create a Spiffy WAP MAP with Network Atlas

$
0
0

If you have Solarwinds Network Performance Monitor [NPM] tool and more than a few Wifi Thin Access Points in your environment, I'll bet you've been tempted at some point to create a "WAP MAP" using the Network Atlas map maker, but were then frustrated when Network Atlas was unable to access any of the variables (SQL fields) that might be interesting.

 

If only you had a few of these:

 

9-27-2013 1-26-23 PM.jpg

 

You could have a one of these...

 

9-27-2013 12-26-55 PM.jpg

 

Oh bother! What to do, what to do, what to do...??

 

 

Well, now there's a solution. With a little bit of time, the Orion NPM Admin Guide, and some super-secret tinkering under-the-hood, you too can create your very own WAP MAP just like mine! Here's how...

 

 

Using Network Atlas

 

Well, first things first... if you're a newbie to NPM you might not even know what Network Atlas is or how it could be useful. Network Atlas is a program that comes with Orion though you have to download it the very first time you use it and install it on your system. Consult your Orion NPM Admin guide for the location.The Network Atlas program allows you to create custom maps which detail the various resources in your environment complete with live information such as Status, Uptime, Bitrate, or whatever else is important to you about an item, which can then be displayed on any Orion page. Simply edit the page, select one of the "Map" applets to add to your page, then edit the Map Applet and choose the map you created. Voila! One nifty new map to display!


Here's an example of one of ours:

 

9-27-2013 2-28-57 PM.jpg


In our environment we have maps which detail our network backbone, our critical servers and services, the key infrastructure of our various sites, etc. While the Network Atlas program is a little clumsy to use (it really is, I'm just sayin...) if you put some time and effort into getting to know it (and its quirks) it can produce some cool and useful maps for you to use in your NOC. Once you have the Network Atlas tool installed and have had a chance to play around with it a bit, you're ready to begin. Basically, when you add an object to the map, you can incorporate some special variables (aka "Properties") associated with the monitored object class (type) into the caption associated with the item. If you get clever about it, you can build up some pretty sophisticated maps.


I will assume from this point you're familiar with the program and/or know where and how to read the Admin Guide.

 

Sooner or later however, you will undoubtedly want to do something more advanced at which point you'll discover just precisely where the "edges" are in the program-- meaning where it stops being helpful. For all its usefulness, Network Atlas has a few warts and limitations, some minor, some more serious. For example, one minor thing you can't do is mix the text styles contained within a single label. It won't let you, say, edit the label to make a big title with smaller sized details all in one label. But of course, you can cheat a little and add a second label-- a generic label-- and then edit that to create the title and then use the original label to assign the details. Optionally you might assign a custom hyperlink to the title label, such as the URL which corresponds to the WAP Controller's page for that WAP device-- which is exactly what we did-- but of course you can choose whatever URL makes sense for you.


9-27-2013 12-40-51 PM.jpg


The "real" label, meaning the one which is associated with the object itself. You can recognize it by the tiny, thin line running from the label to the object itself. You can edit the "real" label to include specially-formatted variable strings which correspond to various details of interest. When the map is finally rendered in Orion, the variables will be replaced with the "live" data corresponding to that object. For instance, if you're working with a NODE object, you might use the "${NodeName}" and "${IP_Address}" variables to fill in the name of the node and it's address, and so on. You can consult the Admin Guide for a list of variables which are available for use in the Network Atlas. In this way you can add all sorts of useful information related to the object to your map. What you can't do though, unlike in a number of other areas in Orion, is retrieve information that is not contained in the base table for the particular object type (e.g., Node, Interface, etc.) Network Atlas does not support the use of custom SQL variable types. So if the information you want is stored in some other table, you're out-of-luck.


In our case, I wanted to create a WAP MAP to illustrate our WiFi environment to show the number of clients and the I/O bit rate for the individual WAP devices. The trouble is, we use "Thin" Access Point devices which are managed by a central WAP Controller. In setting up Orion to monitor the WAP environment, Orion realizes that the WAP controller is a WAP controller and then goes on to discover the various thin Access Points hiding behind it. So far, so good. Unfortunately, as a result, there are no specific nodes in Orion which correspond to the individual WAP's themselves which makes them difficult to use in Network Atlas. Even if you create ICMP stand-in devices, all you really get is "Availability" (via ICMP / Ping)-- which is only mildly interesting and probably not worth all the trouble.


As it happens, Orion DOES, in fact, have good, solid, interesting information about the WAP devices but keeps all that WiFi goodness stashed away in a different table which you can't access from the Network Atlas. If you pull up a database tool though, and start digging through the Solarwinds Orion database, you'll eventually discover two tables that seem like they could be useful. The first one, cleverly called "Nodes", keeps information about-- Nodes, go figure. The second one called, somewhat cryptically, "Wireless_AccessPoints"-- might take you an extra moment to work out what it's for... 


If only there was a way to get at that information. If only Network Atlas could somehow be convinced to use SQL variables...


It turns out, if you're willing to be sneaky, there IS a way...


Here's the secret!



1. CREATE STAND-IN WAP DEVICES WITH "ADD NODE"


What you want to do first is create some stand-in nodes for each of your thin WAP devices-- Yeah, I know I said it wasn't worth it before, but that was then, and this is now-- and we have a plan now-- we're gonna need 'em for placeholders. So go ahead and add them and make certain the IP Addresses are all set correctly. Use the normal "Add a Node" activity in the Orion NPM web site to add the nodes. All you need to do is set them up as "ICMP" style nodes. Although, if you can set them up some other way (i.e., SNMP) to get more information so much the better. Then go find your newly-added devices in the Nodes table and verify they have the IP Address ("IP_Address" field) you expect. Each WAP device should already have a corresponding entry in the Wireless_AccessPoints table, so look them over and verify that the IP Addresses are entered correctly for each device in both tables. Also note to yourself that the address column in the Nodes table is named "IP_Address" whereas the column in the Wireless_AccessPoints table is "IPAddress". The difference seems minor but it's very important since we'll be using those columns later to tie ("Join") together the two tables. (Get a DBA to help you at this point if you're not sure about how to access the tables directly in the database, or aren't sure what a database "Join" is).

 

9-27-2013 1-08-10 PM.jpg

 

2. CREATE YOUR MAP IN NETWORK ATLAS


Use Network Atlas to create your map. In our case, I started with an image of our building map to use as a background. Then I placed "dots" on the bitmap along with circles that correspond to the range-radius of the WAP device-- there's no rocket science to it though, it's just that I have walked the floor many times with a hand-held WiFi meter and so I have a pretty good idea of where the hot and cold spots are. I just drew the circles according to my best guesses. You're welcome to be more scientific about it if you like.

9-27-2013 4-20-53 PM.jpg

 

Then look down the left side and find your WAP device placeholders and drop them onto the map wherever you want them to be. You can see how I did it in the large screenshot at the top. I've also annotated a close-up view of one just below so you can see better how it's constructed.


9-27-2013 12-33-48 PM.jpg


Then add  a plain-vanilla label nearby (assuming you want a large title and smaller details) to suit your preferences. You can edit the titles with variable instances if you like, "${NodeName}" and "${IP_Address}" might be interesting ones. You can consult the list in the Admin guide or else search online, if you wish, to find others.If you have the "Advanced Alert Creator" tool that comes with Orion, most of the variables it can generate for your object type will also work here just fine. Edit the labels to suit your preference. When you get around to adding the details, that's when we'll take our next step.


Below I've included a close-up of a label in the process of being edited showing examples for how the variables can be incorporated into the text.


9-27-2013 12-41-05 PM.jpg



3. CREATE CUSTOM NODE PROPERTIES FOR WAP DEVICES


What we're going to do is trick the database into copying the information from the Wireless_AccessPoints table into the Nodes table whenever it gets written to or updated. But before we can do that, we'll need a place to store that data in the Nodes table. We can easily add fields to the Nodes table using the Custom Property manager, which can be found in the Admin area of the ORION NPM web site. You'll want to add the following custom properties. The order doesn't really matter, except that if you ever look them up in the database table directly, they will be in whatever order you added them, so if that matters to you, then take that into account and enter them accordingly. Likewise, the names can be whatever you want but will be used in writing the trigger and will become the variable names you'll use in the Network Atlas, so again choose accordingly. (You can see an example of their usage in the screenshot above).


Property NameProperty TypeDescription
WAP_ClientsInteger NumberNumber of Client Sessions Attached to the WAP Device
WAP_InBpsFloating Point NumberInput Bitrate of the WAP Device
WAP_OutBpsFloating Point NumberOutput Bitrate of the WAP Device
WAP_InPpsFloating Point NumberInput Packets per Second of the WAP Device
WAP_OutPpsFloating Point NumberOutput Packets per Second of the WAP Device

 

 

Here's some screenshots to help you with adding your custom properties:

 

1. Go to the "Manage Custom Properties" page and press "Add Custom Property"

9-27-2013 12-44-14 PM.jpg

 

2. Select the Object Type for the property. (This selects the underlying table into which to add the field corresponding to the new property)

 

9-27-2013 12-45-31 PM.jpg

3. Enter the Custom Property Name, Description and Data Type

9-27-2013 12-47-37 PM.jpg

4. Skip this step, you don't need to assign any values

9-27-2013 12-47-55 PM.jpg

5. Repeat the above for each new property required.

 

(Reminder: "WAP_Clients", "WAP_InBps", "WAP_OutBps", "WAP_InPps", "WAP_OutPps")

 


4. CREATE A DATABASE CUSTOM TRIGGER TO COPY REQUIRED FIELDS


The secret to making all of this work lies in the creation of a custom trigger in the Orion database which will automagically copy the information from the Wireless_AccessPoints table over to the Nodes table whenever it gets added or updated. Once the fields are copied into the Nodes table, they will then be available as "Custom Property" variables for use in Network Atlas (and anywhere else that permits the use of Custom Property variables, such as Email Notifications, etc.). The type of trigger we'll be writing is called a "Trigger on INSERT, UPDATE or DELETE" style. Don't worry, we won't be DELETING anything, but we will be using the INSERT and UPDATE hooks it offers to copy the various fields from the Wireless_AccessPoints table to the Custom Property fields we just created in the Nodes table. Once created, the trigger will fire (do it's thing) whenever data is written into the Wireless_AccessPoints table-- no matter how it gets written there. Which means, that once it gets created and takes effect, we won't have to do *anything* else, it will all just work, as if by magic. Whenever the normal, usual Orion NPM process(es) updates the Wireless_AccessPoints table-- however it does that now-- the custom fields in the Nodes table will also get updated as a side-effect. (Note that if you ever update Orion such that the database gets re-installed, you may need to re-enter the trigger to restore the functionality).


If you're at all, even just a little bit, nervous about working directly with your database, get a DBA type person to help you out. (Or, if you can't locate a DBA, maybe there's someone else in the office who's gullible er, willing-- that you could pin it on if it all goes horribly wrong...) Oh, and now would probably be a good time to warn you to backup your database before doing this-- and that I'm not responsible if it destroys your data, grows hair on your palms, or brings back your ex-wife...


Here's what we did:

 

USE SolarWindsOrion
IF EXISTS (SELECT name FROM sysobjects      WHERE name = 'trigg_Insert' AND type = 'TR')   DROP TRIGGER trigg_Insert
GO
CREATE TRIGGER trigg_Insert
ON Wireless_AccessPoints
FOR INSERT, UPDATE
AS
Begin      DECLARE @Action as char(1);
 SET @Action = (CASE WHEN EXISTS(SELECT * FROM INSERTED)
 AND EXISTS(SELECT * FROM DELETED)
 THEN 'U'  -- Set Action to Updated.
 WHEN EXISTS(SELECT * FROM INSERTED)
 THEN 'I'  -- Set Action to Insert.
 END)      if @Action in( 'I' , 'U')      BEGIN      update N      set       [WAP_Clients] = [Clients],      [WAP_InBps]   = [InBps],      [WAP_OutBps]  = [OutBps],      [WAP_InPps]   = [InPps],      [WAP_OutPps]  = [OutPps]      ---select *       from inserted i join Nodes N      on N.IP_address = i.ipaddress      END
END


Be aware that the database name for your database might be (and probably IS) different!!! So double-check the database names and such just to be sure. Also notice that the names of the fields are exactly the same as the names of the Custom Properties that we created above. So spelling and punctuation matters! Make sure everything matches before you're submit the query. When you're ready, enter the above Trigger code into the database (as a query is fine), and it will take effect immediately. Every time Orion updates the WAP information stored in the Wireless_AccessPoints table, it will automagically be updated in the Nodes table too. Pretty cool, huh?


So now you can use the Custom Properties we created earlier in the Network Atlas as live variables which will contain the WAP device information, and you can go impress your boss with your spiffy new WAP MAP!


You never know, he just might even give you a raise!


(Hey, you know, it could happen...)



If you have comments, suggestions or questions, I'm happy to hear 'em. If your ex-wife really does come back, don't forget, I warned ya!!



John Whitten




Google Maps Integration

Alert on Nodes that stopped responding to SNMP

$
0
0

Custom alert for Nodes which stopped respond to SNMP:

 

use Advanced Alert Manager and create custom SQL alert on Nodes with this custom SQL Query:

SELECT LastSystemUptimePollUtc FROM Nodes WHERE

ObjectSubType='SNMP' AND

DATEDIFF(s, LastSystemUptimePollUtc, GETUTCDATE())>PollInterval


Devices_and_Objects.OrionReport

Event summary. Filtered. NPM10.6

Create A FIFA Twitter Feed In Your Orion Web Console

$
0
0

Create A FIFA Twitter Feed In Your Orion Web Console

 

 

1.png

 

 

1     Edit your page

Click ‘Customize Page’ from the page you intend to add this resource to…

 

2.png

 

 

2     Add the resource

Identify the column of the page you want to add the resource to and click the “+” button.  This will let you search your available resource types to add to the page. (450 pixels is the recommended width for viewing this resource but it will scale to your configured width)

 

3.png

 

 

3     Select the resource

In the Search field, type “Custom HTML”.  When you check the box next to the resource, the resource will add to the “Selected Resources:” column.  After you confirm that the resource is listed as a “Selected Resource”, click the “Add Selected Resources” button at the bottom-right of the frame.

 

4.png

 

 

4     Add the resource to the view

After you have confirmed that the resource is added the desired column, click the “Done” button at the bottom-left of the page.  This will apply the new resource to your view.

 

5.png

 

 

5     Edit the resource on the view

Confirm the resource added to the view the way you expected it to and click the “Edit” button.

 

6.png

 

 

6     Add the code

Create a custom Title. For ours, we used “FIFA World Cup 2014 | Brasil”.

Then add the following Code to the body of the resource and click the “Submit” button…

 

<a class="twitter-timeline" href="https://twitter.com/FIFAWorldCup" data-widget-id="477096557016141825">Tweets by @FIFAWorldCup</a>

    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

 

 

7.png

 

 

 

7     Confirm the Resource

After submitting your changes, you should see a resource with the “@FIFAWorldCup” Twitter feed.

 

8.png

 

 

Create a FIFA Twitter Feed in your Orion Web Console | Loop1 Systems, Inc.

 

 

 

 

 

Jason Henson

Loop1 Systems: SolarWinds Training and Professional Services

Adding Live Weather to the "Worldwide Map" Resource

$
0
0

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:

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.

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.


Adding a Rajant device to Solarwinds NPM

$
0
0

SCOPE

This document is applicable to all Rajant devices that need to be added to the Solarwinds NPM

VISION

To have a uniformed procedure of adding a Rajant device to Solarwinds NPM

Requirements

The following may be required when adding a Rajant device to Solarwinds NPM

 

Hardware

Server where existing Solarwinds NPM is deployed

 

Software

Universal Device Poller, which is installed with Solarwinds NPM

SNMPWALK utility which is installed with Solarwinds NPM

 

OVERVIEW

As of this writing, the version of Solarwinds in use is V10.5, and the Solarwinds MIB database file was updated on the 13 June 2014.

The Solarwinds MIB database does not contain any information for the Rajant devices

The Rajant devices do not have MIB-II mgmt. information embedded to be able to provide information to Solarwinds, and for Solarwinds to perform an automatic discovery of the devices

The Rajant device use SNMP version 2 with a community string of public. This is not changeable

As result of these restrictions, adding a Rajant device to Solarwinds NPM is a manual process, which this document will cover and show how it is done.

The Rajant enterprise OID is iso.org.dod.internet.private.enterprises.rajantCorporation (1.3.6.1.4.1.34861), which we will be using to create custom pollers for the devices

Procedure

Phase 1

Adding the Rajant device to Solarwinds NPM

The Rajant device will be added to the Solarwinds NPM, either by means of a manual entry or a network discovery. In both instances the devices will be added via ICMP only and not via SNMP as the SNMP poll to the device will fail. One the device has been added the polling method will need to be changed manually to SNMP for every Rajant device on the network.

 

Adding a device manually

  1. Add device by clicking settings > Add a Node 20140618 15.10.01_Capture.jpg
  2. Type the IP address of the device in the IP address field
  3. Select the polling method to Status Only: ICMP
  4. Click Next 20140618 15.50.31_Capture.jpg
  5. Rename the device to something meaningful if necessary
  6. Click OK, ADD NODE
  7. Click OK after the device was added 20140618 15.52.46_Capture.jpg
  8. In node management, find the device that was added and select the checkbox
  9. Click Edit Properties 20140618 15.56.42_Capture.jpg
  10. Change polling method to SNMP
  11. Check SNMP version and port are correct and tick “Allow 64 bit Counters”
  12. Type in public in the community string field
  13. Click submit
  14. Click OK on the error dialog when the credentials are not validated 20140618 16.00.09_Capture.jpg
  15. Adding of the Rajant device is now complete

Phase 2

Adding Specific Pollers

The Rajant device has now been added to the Solarwinds application, which will be able to provide availability stats only, and show up and down time. For more advanced statistics, one would need to add Universal Device Pollers, specifying an OID to poll to provide these stats.

In this example we will add the device serial number. In order for us to be able to do this, we will need to know which OID will provide this information. In the rajant-mib file, each OID is described with regards to what information will be provided when polled. In this case we will use 1.3.6.1.4.1.34861.1.1 to get the serial number of the device as per the rajant-mib file

 

system OBJECT-IDENTITY

STATUS        current

DESCRIPTION   "System status"

::=  { rajantCorporation 1 }

 

serialNumber  OBJECT-IDENTITY

STATUS             current

DESCRIPTION        "Hardware serial number"

::= { system 1 }

 

To add a universal device poller, one will need to work directly on the server where the application was installed and use the universal device poller application

 

Adding a universal device poller

 

  1. Open the universal device poller application in the Solarwinds program group
  2. The application will then open
  3. Click on “New Universal Device Poller” and wait for the dialog box to come up 20140619 10.22.48_Capture.jpg
  4. In the OID field type in the OID for the specific statistic that information is required for 1.3.6.1.4.1.34861.1.1
  5. Provide a name for the poller
  6. Provide a description for the poller
  7. Click advanced options
  8. Set MIB value type to Raw Value
  9. Set Format to Text
  10. Set SNMP get type to GET
  11. Set Polling type to Node
  12. Click Finish 20140619 10.33.08_Capture.jpg

 

Phase 3

Assign the poller to the added device

  The specific poller has been added to Solarwinds NPM, and in order for it to be used, it needs to be assigned to a device or multiple devices.

 

Assigning a poller to a device

 

  1. Click on Assign Pollers and select the poller to use and click next 20140619 10.53.13_Capture.jpg
  2. Find and select the device to assign the poller to and click finish. To find the device easier, the “Group by” dropdown option may be used 20140619 10.56.13_Capture.jpg
  3. The poller is now assigned and the information will be presented on the node details in Solarwinds 20140619 10.59.17_Capture.jpg

 

CLOSURE

This concludes the procedure on adding a Rajant device to Solarwinds; however, this procedure may be used for any device that is known to have their own specific MIB file and is not limited to Rajant only.

To add more pollers for specific statistics, Phase 2 and Phase 3 need to be repeated, and the Specific OID will be provided for in the Rajant MIB file

rajant-mib

 

--

-- Rajant BreadCrumb MIB

--

RAJANT-CORPORATION-MIB DEFINITIONS ::= BEGIN

 

--

-- Import well known definitions from standard MIBs

--

IMPORTS

   MODULE-IDENTITY, OBJECT-IDENTITY, enterprises, OBJECT-TYPE, Unsigned32, TimeTicks, IpAddress, Integer32, Counter64

      FROM SNMPv2-SMI;

 

--

-- MIB meta data

--

rajantCorporation MODULE-IDENTITY

LAST-UPDATED   "201308200000Z"

ORGANIZATION   "Rajant Corporation"

CONTACT-INFO   "Omitted"

DESCRIPTION    "Rajant Corporation MIB"

 

--

-- Rajant's unique Enterprise ID (OID)

--

::= { enterprises 34861 }

 

system OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "System status"

::=  { rajantCorporation 1 }

 

instamesh OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Instamesh status"

::=  { rajantCorporation 2 }

 

wireless OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Wireless interfaces"

::=  { rajantCorporation 3 }

 

serialNumber   OBJECT-IDENTITY

STATUS               current

DESCRIPTION          "Hardware serial number"

::= { system 1 }

 

systemTemperature    OBJECT-IDENTITY

STATUS               current

DESCRIPTION          "System temperature"

::= { system 2 }

 

freeMemory     OBJECT-IDENTITY

STATUS               current

DESCRIPTION          "Free memory"

::= { system 3 }

 

idle           OBJECT-IDENTITY

STATUS               current

DESCRIPTION          "Idle"

::= { system 4 }

 

uptime         OBJECT-IDENTITY

STATUS               current

DESCRIPTION          "Uptime"

::= { system 5 }

 

instameshArpDropped        OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of dropped ARP requests"

::= { instamesh 1 }

 

instameshArpRequests       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of ARP requests"

::= { instamesh 2 }

 

instameshArpRequestsAnswered     OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of answered ARP requests"

::= { instamesh 3 }

 

instameshArpRequestsUnicasted    OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of unicast ARP requests"

::= { instamesh 4 }

 

instameshArpTotal          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of all ARP requests"

::= { instamesh 5 }

 

instameshFloodsDropped           OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of dropped flood packets"

::= { instamesh 6 }

 

instameshPacketsDropped          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of dropped packets"

::= { instamesh 7 }

 

instameshPacketsMulticast  OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of multicast packets"

::= { instamesh 8 }

 

instameshPacketsReceived   OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of received packets"

::= { instamesh 9 }

 

instameshPacketsSent       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of sent packets"

::= { instamesh 10 }

 

instameshSourceFloodsDropped     OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Number of dropped source flood packets"

::= { instamesh 11 }

 

instameshTimeWaited        OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Time spent on waiting"

::= { instamesh 12 }

 

-- Wireless interfaces

-- The code below needs some serious refactoring

 

wlan0 OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Wireless interface wlan0"

::=  { wireless 1 }

 

wlan0name                  OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Interface name"

::= { wlan0 1 }

 

wlan0frequency             OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Operating frequency"

::= { wlan0 2 }

 

wlan0noise                 OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Noise level"

::= { wlan0 3 }

 

wlan0channelActiveTime           OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel active time"

::= { wlan0 4 }

 

wlan0channelBusyTime       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel busy time"

::= { wlan0 5 }

 

wlan0channelReceiveTime          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel receive time"

::= { wlan0 6 }

 

wlan0channelTransmitTime   OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel transmit time"

::= { wlan0 7 }

 

wlan1 OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Wireless interface wlan1"

::=  { wireless 2 }

 

wlan1name                  OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Interface name"

::= { wlan1 1 }

 

wlan1frequency             OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Operating frequency"

::= { wlan1 2 }

 

wlan1noise                 OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Noise level"

::= { wlan1 3 }

 

wlan1channelActiveTime           OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel active time"

::= { wlan1 4 }

 

wlan1channelBusyTime       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel busy time"

::= { wlan1 5 }

 

wlan1channelReceiveTime          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel receive time"

::= { wlan1 6 }

 

wlan1channelTransmitTime   OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel transmit time"

::= { wlan1 7 }

 

wlan2 OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Wireless interface wlan2"

::=  { wireless 3 }

 

wlan2name                  OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Interface name"

::= { wlan2 1 }

 

wlan2frequency             OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Operating frequency"

::= { wlan2 2 }

 

wlan2noise                 OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Noise level"

::= { wlan2 3 }

 

wlan2channelActiveTime           OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel active time"

::= { wlan2 4 }

 

wlan2channelBusyTime       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel busy time"

::= { wlan2 5 }

 

wlan2channelReceiveTime          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel receive time"

::= { wlan2 6 }

 

wlan2channelTransmitTime   OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel transmit time"

::= { wlan2 7 }

 

wlan3 OBJECT-IDENTITY

STATUS         current

DESCRIPTION    "Wireless interface wlan3"

::=  { wireless 4 }

 

wlan3name                  OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Interface name"

::= { wlan3 1 }

 

wlan3frequency             OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Operating frequency"

::= { wlan3 2 }

 

wlan3noise                 OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Noise level"

::= { wlan3 3 }

 

wlan3channelActiveTime           OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel active time"

::= { wlan3 4 }

 

wlan3channelBusyTime       OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel busy time"

::= { wlan3 5 }

 

wlan3channelReceiveTime          OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel receive time"

::= { wlan3 6 }

 

wlan3channelTransmitTime   OBJECT-IDENTITY

STATUS                     current

DESCRIPTION                "Channel transmit time"

::= { wlan3 7 }

 

END

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):

Solarwinds Google Maps Integration - Loop1 Systems - YouTube

 

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

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

 

map.png

 

 

Enjoy!

 

Andrew LaGrone
Loop1 Systems, Inc

XMPP Command Line Client

Node Downtime Reports

$
0
0

We’ve prepared two reports within Report Writer to report on node downtime:

  • Node Down Time Report – shows outage duration for each node when and how long it was down

4-28-2014 5-07-02 PM.png

  • Summarized Node Down Report – summarize node outage duration for each node


4-28-2014 5-07-22 PM.png

These reports will work with or without view limitations applied.

Feedback most appreciated.


My Juniper UnDPs (EX, SRX, SA, ScreenOS)

Add “Search for Nodes" element in every Solarwinds Webpages header with ‘hit’ Enter enabled

$
0
0

I have added some codes in “C:\inetpub\SolarWinds\Orion\Controls\PageHeader.ascx” which adds the 'Search for Nodes' element on every SolarWinds webpages in the page header.

 

sw-search.jpg

In order to prevent form resubmission message popup when page is refreshed I try to use “onClick” function instead of using the Submit button. The IE and other browsers (Chrome, FF, ..) seem have different way to handle the onClick event, so in IE the “search” will be a button but not submit button,    in other browsers it will be text.

 

Also, you can just type in the search criteria and hit ‘enter’ then the search will execute (search by node name by default)

 

The codes are:

 

<div style="font-family:arial;color:#FFFFFF;font-size:10pt;font-weight:bold;padding-top:3px;">

<form id="MySearchForm" name="MySearchForm" onSubmit="returnfalse;">

Find  <input id="MySearchText" name="MySearchText" type="text" size="10" style="font-size:10pt;"  onkeypress="var searchStr = MySearchText.value; var propertyStr = MySearchProperty.value; if(event.keyCode==13  && searchStr!=''){window.open('/Orion/NetPerfMon/Resources/NodeSearchResults.aspx?'+'Property='+propertyStr+'&SearchText='+searchStr);}"/> By

<select id="MySearchProperty" name="MySearchProperty" size="1" style="width:100px;font-size:10pt;">

<option value="Caption">Node Name</option>

<option value="IP_Address">IP Address</option>

</select>

<![if !IE]>

<a id="mySearchLink" onClick="var searchStr = MySearchText.value; var propertyStr = MySearchProperty.value; if(searchStr==''){alert('Node name or IP must be filled out!');} else {window.open('/Orion/NetPerfMon/Resources/NodeSearchResults.aspx?'+'Property='+propertyStr+'&SearchText='+searchStr);}">

Search</a>

<![endif]>

<!--[if IE]>

<button id="mySearchButton" onClick="var searchStr = MySearchText.value; var propertyStr = MySearchProperty.value; if(searchStr==''){alert('Node name or IP must be filled out!');} else {window.open('/Orion/NetPerfMon/Resources/NodeSearchResults.aspx?'+'Property='+propertyStr+'&SearchText='+searchStr);}">

Search</button>

<![endif]-->

</form>

</div>

 

SW-Search-code.jpg

I have tested the code in IE, FF & Chrome, same results from FF & Chrome, but not IE:

 

Firefox V17 and Chrome V27

when press enter with empty search string, page refreshed only

when press enter with non-empty search string, page refreshed and results opened in a new page

when click “Search” text with empty search string, alert message displayed, not refresh page

when click “Search” text  with non-empty search string, results opened in a new page and not refresh page

 

IE 9,

when press enter with empty search string, alert message and page refreshed

when press enter with non-empty search string, page refreshed and results opened in a new page

when click “Search” button with empty search string, alert message displayed AND  refresh page

when click “Search” button  with non-empty search string, results opened in a new page and refresh page

 

I notice it will take a bit longer to load the webpages when you first to load pages after making the changes, but it will be back to “normal” after a few loads. (Not sure why, may be refresh the caches?)

 

Hope this is useful.

 

PLEASE MAKE BACKUPS BEFORE YOU CHANGE THE FILE.

PLEASE TEST THE CODES BEFORE APPLY TO LIVE SYSTEM.

USE THE CODES AT YOUR OWN RISK AND FEEL FREE TO MODIFY THEM.

 

Thanks

 

update:

================================

add onSubmit="returnfalse;" in <form Tag>, now when press "Enter", page NOT refresh any more in IE and others, also NOT refresh when click Search Button in IE. BUT in IE when press Enter, search result page open twice, not in other browsers. Why? any help? Thanks


update: 23/07/2013

================================

fixed issue above.

seems IE handles "Enter" key press as submit button clicked, to stop this:

added return false; in <input> tag:

<input id="MySearchText" name="MySearchText" type="text" size="10" style="font-size:10pt;"  onkeypress="var searchStr = MySearchText.value; var propertyStr = MySearchProperty.value; if(event.keyCode==13  && searchStr!=''){window.open('/Orion/NetPerfMon/Resources/NodeSearchResults.aspx?'+'Property='+propertyStr+'&SearchText='+searchStr);return false;}"/>


update: 24/07/2013

================================

Found a bug in my code:


when you go to page "Admin -> Settings -> SAM Settings -> Browse for Component Monitor", the radio buttons selection not working, see screenshot below

sw-search-error1.jpg

Cause: my codes conflict with code in that page. To see the source code:


sw-search-error2.jpg


The page uses Java scripts to select radio button. In the script, document.form(0) refer to my search form rather than the original one.


Fix: REMOVE <form></form> Tags from my code.

<form id="MySearchForm" name="MySearchForm" onSubmit="returnfalse;">

</form>


update: 02/08/2013

================================

I uploaded modified  PageHeader.ascx (NPM version 10.4). Please test. Thanks



Cisco GSS.UnDP


Copy Google Maps to new WorldMaps in NPM 10.6

$
0
0

We have managed to combine the Old Google maps and new World Map resource to use a single data set. this means we can use both maps depending on each users preference.

 

The following SQL can be used to populate the new WorldMaps resource from an existing installation of the google maps plugin.

 

insert into WorldMapPoints

select 'Orion.Nodes', nodeid, latitude, longitude

from nodes;

 

You must first ensure that every node has a long and lat, as the google map only needs this setting once per City

You can then alter the SQL of the Google Maps Plugin to look at the same data table so you can run both maps side by side

 

SELECT CASE

WHEN Status=2 THEN 5

WHEN Status=3 THEN 4

WHEN Status=12 THEN 3

WHEN Status=1 THEN 2

WHEN Status=9 THEN 1

WHEN Status=0 THEN 0

ELSE Status END AS Rank, NodeID,StatusLED,City,Caption, WorldMapPoints.Latitude, WorldMapPoints.Longitude

from Nodes

INNER JOIN WorldMapPoints ON Nodes.Nodeid = WorldMapPoints.InstanceID

where WorldMapPoints.Latitude IS NOT NULL AND WorldMapPoints.Longitude IS NOT NULL

AND City IS NOT NULL

order by Rank asc, city asc

 

Having Changed the sql in the GoogleMap.aspx and GoogleMapSiteMap.aspx you can then delete the logitude and latitude custom properties and manage the location of nodes for both maps using the GUI for new World Map resource

Some Things Solarwinds Admins Can't Live Without

$
0
0

Here are some SQL queries as doing weekly Solarwinds Maintenance and creating custom alerts that we as an MSP can't live without. I will most likely update this often but here are some I store in my evernote for now but I will update this frequently when i start looking through everything I use.

 

This first one isn't a SQL query but good for everyone use FoE to know:

 

 

From a command prompt :

cd C:\Program Files\SolarWinds\FoE\r2\bin\


nfpktfltr getstate

 

The failover should be set to Filter and the active should be PassThru


The nfpktfltr has a lot of good options to play with including forcing a set for filter or passthru in emergencies

 

Checking Ghost or Unknown Interfaces


selectInterfaceName,Nodes.CaptionfromInterfaces

 

innerjoinNodesonNodes.NodeID=Interfaces.NodeID

whereInterfaces.Status=0

 

Checking Nodes Not in Groups

 

 

selectCaption fromNodes

 

where

  not Caption in(

   SELECTdistinctFullName

   FROM ContainerMemberSnapshots

   where EntityDisplayName ='Node'

)


Checking Total Number of Elements for Custom Value


 

selectCOUNT(*)fromNodes

 

LEFTjoinVolumesonVolumes.NodeID=Nodes.NodeID

LEFTjoinInterfacesonInterfaces.NodeID=Nodes.NodeID

LEFTJOINAPM_ApplicationonAPM_Application.NodeID=Nodes.NodeID

whereCustom= 'somethinghere'

 

Getting IP list for Weekly Sonar Discovery by polling engine

 

selectIP_Address,Caption from Nodes

 

where

ObjectSubType ='SNMP'

andEngineID =_Engine ID Here_

andStatus<>'9

 

To get a list of your current engines with their ID number just simply run

selectEngineID,ServerName,IP fromEngines

Cleaning up bad hardware alerts manually

 

DECLARE@NodeID int

 

SET@NodeID =_NODE ID HERE_

DELETEFROMAPM_HardwareInfo WHERE NodeID =@NodeID

DELETEFROMAPM_HardwareCategoryStatus WHERE NodeID =@NodeID

DELETEFROMAPM_HardwareItem WHERE NodeID =@NodeID



Alerting Variables for Statistical Data


 

${SQL:selectc.Name from APM_DynamicEvidenceColumnSchema c

 

innerjoinAPM_DynamicEvidence_DetailData d on c.ID =d.ColumnSchemaID andc.ComponentID = ${ComponentID}

wherec.ThresholdWarning < d.NumericData groupby c.ID,c.Name} isinWARNING at

${SQL:selectMAX(d.NumericData)from APM_DynamicEvidenceColumnSchema c

innerjoinAPM_DynamicEvidence_DetailData d onc.ID =d.ColumnSchemaID andc.ComponentID = ${ComponentID}

where c.ThresholdWarning <d.NumericData groupbyc.ID,c.Name }



Alerting URL on HTTP Components that is being pulled

This can be used to get any of the values simply changing the [Key] condition to whatever your looking for. Also make sure you set your component type in your trigger condition to 6 to avoid non-http applications sending this alert off.


${SQL:selectValue fromAPM_ComponentSetting

  where [Key] ='Url'and ComponentID ='${ComponentID}'}

 


That's all I can muster at the moment while trying to get some work done but I will try to update this as often as possible.


Opengear Console Server Extended Pollers

$
0
0

Opengear Console Servers (CM4xxx, SD40xx, IM42xx, IMG4xxx, IM72xx, ACM5xxx, ACM55xx) using firmware 3.11.0 or newer

Manufacturer Opengear Inc.

Refer to OG-STATUSv2-MIB for OID details: Opengear SNMP MIBs

This UnDP file contains the following Poller groups:

  • Opengear Alarm Log (Extended)
  • Opengear Auto-Response Check Devices (Extended)
  • Opengear Auto-Response Checks (Extended)
  • Opengear Cell Modem (Extended)
  • Opengear Current Alarms (Extended)
  • Opengear EMD (Extended)
  • Opengear EMD DIO (Extended)
  • Opengear EMD Humidity (Extended)
  • Opengear EMD Temerature (Extended)
  • Opengear RPC Outlets (Extended)
  • Opengear RPCs (Extended)
  • Opengear Serial Port (Extended)
  • Opengear Serial User (Extended)
  • Opengear Web User (Extended)

When the UnDP file is imported via the Universal Device Poller (Start -> Solarwinds Orion -> Universal Device Poller) you can select either the Poller groups which specifically interest you or at a finer level the individual Pollers.

 

undp-cropped.png

 

Universal Device Poller groups break down as follows:


  • Opengear Alarm Log (Extended)
    • ogAlarmCheck

    • ogAlarmCurrentValue
    • ogAlarmDevice
    • ogAlarmEventId
    • ogAlarmInstance
    • ogAlarmName
    • ogAlarmPreviousValue
    • ogAlarmState
    • ogAlarmSummary
    • ogAlarmTime
    • ogAlarmType
    • ogAlarmUser
  • Opengear Auto-Response Check Devices (Extended)
    • ogCheckDeviceTable

  • Opengear Auto-Response Checks (Extended)
    • ogCheckName

    • ogCheckRepeatTimeout
    • ogCheckResetTimeout
    • ogCheckResolveActions
    • ogCheckTriggerActions
    • ogCheckType
  • Opengear Cell Modem (Extended)
    • ogCellModem3gRssi

    • ogCellModem4gRssi
    • ogCellModemApn
    • ogCellModemConnected
    • ogCellModemCounter
    • ogCellModemModel
    • ogCellModemNetwork
    • ogCellModemRadioTechnology
    • ogCellModemRegistered
    • ogCellModemSelectedSimCard
    • ogCellModemSessionTime
    • ogCellModemTemperature
    • ogCellModemTower
    • ogCellModemVendor
  • Opengear Current Alarms (Extended)
    • ogCurrentAlarmCheck

    • ogCurrentAlarmCurrentValue
    • ogCurrentAlarmDevice
    • ogCurrentAlarmEventId
    • ogCurrentAlarmInstance
    • ogCurrentAlarmName
    • ogCurrentAlarmPreviousValue
    • ogCurrentAlarmState
    • ogCurrentAlarmSummary
    • ogCurrentAlarmTime
    • ogCurrentAlarmTriggerValue
    • ogCurrentAlarmType
    • ogCurrentAlarmUser
  • Opengear EMD (Extended)
    • ogEmdConnectType

    • ogEmdDescription
    • ogEmdDioInputTotal
    • ogEmdEnabled
    • ogEmdHumidityTotal
    • ogEmdLogEnabled
    • ogEmdName
    • ogEmdTemperatureTotal
  • Opengear EMD DIO (Extended)
    • ogEmdDioTable

  • Opengear EMD Humidity (Extended)
    • ogEmdHumidityTable

  • Opengear EMD Temerature (Extended)
    • ogEmdTemperatureTable

  • Opengear RPC Outlets (Extended)
    • ogRpcOutletTable

  • Opengear RPCs (Extended)
    • ogRpcConnectType

    • ogRpcCounter
    • ogRpcDescription
    • ogRpcInputCurrent
    • ogRpcInputFrequency
    • ogRpcInputVoltage
    • ogRpcLogEnabled
    • ogRpcMaxTemperature
    • ogRpcName
    • ogRpcOutletTotal
    • ogRpcType
  • Opengear Serial Port (Extended)
    • ogSerialPortCTS

    • ogSerialPortDataBits
    • ogSerialPortDCD
    • ogSerialPortDSR
    • ogSerialPortDTR
    • ogSerialPortFlowControl
    • ogSerialPortLabel
    • ogSerialPortLogLevel
    • ogSerialPortMode
    • ogSerialPortParity
    • ogSerialPortRTS
    • ogSerialPortRxBytes
    • ogSerialPortSpeed
    • ogSerialPortStopBits
    • ogSerialPortTxBytes
  • Opengear Serial User (Extended)
    • ogSerialUserLabel

    • ogSerialUserName
    • ogSerialUserPort
    • ogSerialUserStartTime
  • Opengear Web User (Extended)
    • ogWebUserName

    • ogWebUserSourceAddress
    • ogWebUserSourcePort
    • ogWebUserStartTime

 

Once again refer to the MIBs for descriptions: Opengear SNMP MIBs

Some Things Solarwinds Admins Can't Live Without

$
0
0

Here are some SQL queries as doing weekly Solarwinds Maintenance and creating custom alerts that we as an MSP can't live without. I will most likely update this often but here are some I store in my evernote for now but I will update this frequently when i start looking through everything I use.

 

This first one isn't a SQL query but good for everyone use FoE to know:

 

 

From a command prompt :

cd C:\Program Files\SolarWinds\FoE\r2\bin\


nfpktfltr getstate

 

The failover should be set to Filter and the active should be PassThru


The nfpktfltr has a lot of good options to play with including forcing a set for filter or passthru in emergencies

 

Checking Ghost or Unknown Interfaces


selectInterfaceName,Nodes.CaptionfromInterfaces

 

innerjoinNodesonNodes.NodeID=Interfaces.NodeID

whereInterfaces.Status=0

 

Checking Nodes Not in Groups

 

 

selectCaption fromNodes

 

where

  not Caption in(

   SELECTdistinctFullName

   FROM ContainerMemberSnapshots

   where EntityDisplayName ='Node'

)


Checking Total Number of Elements for Custom Value


 

selectCOUNT(*)fromNodes

 

LEFTjoinVolumesonVolumes.NodeID=Nodes.NodeID

LEFTjoinInterfacesonInterfaces.NodeID=Nodes.NodeID

LEFTJOINAPM_ApplicationonAPM_Application.NodeID=Nodes.NodeID

whereCustom= 'somethinghere'

 

Getting IP list for Weekly Sonar Discovery by polling engine

 

selectIP_Address,Caption from Nodes

 

where

ObjectSubType ='SNMP'

andEngineID =_Engine ID Here_

andStatus<>'9

 

To get a list of your current engines with their ID number just simply run

selectEngineID,ServerName,IP fromEngines

Cleaning up bad hardware alerts manually

 

DECLARE@NodeID int

 

SET@NodeID =_NODE ID HERE_

DELETEFROMAPM_HardwareInfo WHERE NodeID =@NodeID

DELETEFROMAPM_HardwareCategoryStatus WHERE NodeID =@NodeID

DELETEFROMAPM_HardwareItem WHERE NodeID =@NodeID



Alerting Variables for Statistical Data


 

${SQL:selectc.Name from APM_DynamicEvidenceColumnSchema c

 

innerjoinAPM_DynamicEvidence_DetailData d on c.ID =d.ColumnSchemaID andc.ComponentID = ${ComponentID}

wherec.ThresholdWarning < d.NumericData groupby c.ID,c.Name} isinWARNING at

${SQL:selectMAX(d.NumericData)from APM_DynamicEvidenceColumnSchema c

innerjoinAPM_DynamicEvidence_DetailData d onc.ID =d.ColumnSchemaID andc.ComponentID = ${ComponentID}

where c.ThresholdWarning <d.NumericData groupbyc.ID,c.Name }



Alerting URL on HTTP Components that is being pulled

This can be used to get any of the values simply changing the [Key] condition to whatever your looking for. Also make sure you set your component type in your trigger condition to 6 to avoid non-http applications sending this alert off.


${SQL:selectValue fromAPM_ComponentSetting

  where [Key] ='Url'and ComponentID ='${ComponentID}'}

 


That's all I can muster at the moment while trying to get some work done but I will try to update this as often as possible.


1.3.6.1.4.1 - IANA-registered Private Enterprises (find a registered OID)

Viewing all 1956 articles
Browse latest View live


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