1.15. Release Notes 1.5.0

NetSpyGlass v1.5.0

1.15.1. Improvements and New Features

  • Beginning with this release, user can create their own custom tag facets by just adding tags in the form “Facet.Word” in Python hook scripts. Previously, the set of tag facets was fixed and new tags could only be added in one of the standard facets. Now user can add their own.


    To make this possible, we had to change format of the objects stored in the database. No special operation is required to upgrade to v1.5.0 but the change in the database format means downgrade is not possible. If you want to preserve ability to downgrade back to v1.4.1, make backup copy of the SQL database before upgrading. If you use HSQL, make a copy of all files in directory /opt/netspyglass/home/db. If you use MySQL, database backup can be made using mysqldump.

  • NSGDB-62, NET-1158: Add tag BGP4PeerName to interfaces and ProtocolDescriptor objects. The word in this tag is the name of the peer device. The tag is only added when the peer device is one of the devices NSG monitors

  • NET-1172: add tag VlanName to interface and device objects, as well as corresponding monitoring variables.

  • also added new tag facet VlanId used to tag devices with vlan Ids they belong to

  • We have added ability to filter network links that appear in maps. View builder python hook script can now separately match devices to decide which ones should appear in each view and then match links between devices. For example, you can build a view to show devices and links for a specific vlan by matching vlan Id. Device match function checks device tags “VlanId” to find devices that have any interfaces in the vlan. Then, interface match function matches links to show only those that carry this vlan. If two devices are connected by mulitple interfaces in different vlans, only the link in the vlan of interest will appear in the map. In the following example we build two views, one to show all devices and the other to show only vlan 201:

    class UserViewBuilder(object):
        def __init__(self, log):
             self.log = log
        def execute(self):
        return [
                  match_function=lambda device: 'VlanId.201' in device.tags,
                  intf_match_function=lambda device, intf: 'ifVlan.201' in intf.tags,

    See Views for more information on building views.

  • Documentation pages Views have been updated to reflect addition of the View parameter intf_match_function

  • The order in which View parameters are used has changed and is as follows:

    1. match_function is called to filter devices
    2. parameters adjacent_devices and connecting_devices are consulted and additional devices are added to the view if needed
    3. intf_match_function is called to filter links between devices selected in steps 1 and 2.

    See Views for more information and examples

  • NSGDB-65 tag selector hook script now has function assign_protocol_descriptor_tags(). See Tags

  • NET-1179 improved mechanism used to pass configuration between cluster members. Changed the method used to watch zookeeper trigger znode to ensure cluster members never miss changes signalled by their respective upstream servers. Among other benefits, this fixes corner case where cluster could go into endless reconfiguration when some cluster members were too slow to process their configuration.

  • NSGDB-27 added support for the negative tag match in JSON API calls. See Format of the variable matching rule.

  • Added field nameFromConfig to NetworkNode and DeviceModel classes. This field will be used to match database objects to devices defined in the configuration file in future releases

  • Improved network topology discovery: now we can discover links to multi-homed Linux servers that have shared ip address and do not respond to SNMP queries

  • Server restart is not required anymore for changes in configuration parameters monitor.storage.influxdb.acceptTags and monitor.storage.influxdb.dropTags.

  • Added configuration parameter discovery.bgp4peers.includeAddressInPeerName (boolean, default value is false). When we create an object to represent external BGP4 peer, we can make its ip address part of its name. If this parameter is set to true, the name of the object is composed of AS number or AS owner name, plus its ip address: e.g. AS7224- or AMAZON-AS- If the value is false, only AS number or AS owner name is used. This is useful if you have multiple BGP sessions with the same peer. Note: AS owner name is taken from the file /opt/netspyglass/home/data/asn.txt.

  • Added protection to catch exceptions thrown by Velocity macro engine when it is presented with text it can not parse in alert notification stream connectors. Before this lead to an uncaught exception and lost alert notification. With this fix, we get log record showing what Velocity tried to parse when it failed and alert notification is sent anyway, although with unexpanded macros.

1.15.2. Bug fixes

  • fixed bug that made it impossible to start monitor on a machine with misconfigured DNS entries (machine address resolves back into a host name that does not match actual machine host name and does not have back resolve)
  • rpc pinger constantly pings RPC channel that connects monitor to the primary server to make sure rpc client pool never expires it. This is needed to ensure RPC channel that the primary uses to send discovery jobs to the monitor is always available.
  • improved validation of data coming from devices during discovery to protect against exceptions that occurred when devices sent unexpected values
  • NET-1210 query oids in the System table one by one instead of sending one batch query, attempt to query 2 times if device times out or returns Null. Before, discovery module would give up in the case like that, marking device as not responding to SNMP, which aborted discovery for this device.
  • When user renames device in the configuration file and we detect that field nameFromConfig in NetworkNode and DeviceModel objects does not match, we should set it to the value used in the config