Forum Discussion

Vitor_Santos's avatar
5 years ago

Spanning Tree (STP) - Datasources available?

Hello,

I've been searching for Datasources related with Spanning Tree Protocol monitoring but didn't found one.
Does this mean there's no out-of-box datasources for STP monitoring?

This is extremly useful in terms of monitoring.

Appreciate the feedback.

  • Anonymous's avatar
    Anonymous

    What exactly are you looking for? Define some of the metrics you'd like to see and what the instances would look like. Usually that discussion leads to more targeted queries against MIBs and APIs.

  • To start with I was looking for already existent data sources.
    Just wanted to understand if someone already had something, otherwise, I understand that will need to do it from scratch.

  • The main metric you would care about is related to time since last TCN per VLAN. I have a DS that will get this for the default VLAN, but had a lot of trouble with any others due to lack of context support in LM.  I have been told there is context support in the 28.500 collector and later, but have not yet had a chance to test.  I published what I have for now as 969G49, but the new version will have to be done as a Groovy script to leverage the context feature.

  • I was checking on this & we were able to come up with a script that analyzes different VLAN(s) - using the actual VLAN context.
    I believe it's working as intended, however, the actual output of the snmp.get (on the TCN OID - .1.3.6.1.2.1.17.2.3.0) it's being automatically converted into a readable date (which I don't want, I want the RAW value in ticks).

    Example of how it's been printed within LM groovy:

    If I do a get on the same exact OID (outside of LM) it'll output the actual raw value (in time ticks) - example below

    This is the script I've so far (I just need to solve this in order to have a working DS - which I can share later, since the AD script changes a little bit):

    import com.santaba.agent.groovyapi.expect.Expect;
    import com.santaba.agent.groovyapi.snmp.Snmp;
    import com.santaba.agent.groovyapi.http.*;
    import com.santaba.agent.groovyapi.jmx.*;
    import org.xbill.DNS.*;
    import com.santaba.agent.groovyapi.snmp.Snmp;
    
    //array to store the interfaces
    array_vlans = [];
    
    //OID variables
    stpTCN=".1.3.6.1.2.1.17.2.3.0" //get the actual TCN for the STP (for each VLAN)
    vlan_indexes = ".1.3.6.1.4.1.9.9.46.1.3.1.1.3" //CISCO VLAN MIB
    
    //device variables
    deviceIP = hostProps.get("system.hostname");
    snmpCommunity_raw = hostProps.get("snmp.community");
    snmpVersion = hostProps.get("snmp.version");
    
    interfaceWalk = Snmp.walk(deviceIP, vlan_indexes)
    interfaceWalk.eachLine() {
    	line ->
    		vlanType= line.minus(vlan_indexes + ".").split(" = ")[1] //get the content of the specific OID
      		vlanNumber_raw= line.minus(vlan_indexes + ".").split(" = ")[0] //get the actual extra OID portion that was added (since that's the actual VLAN ID)
    		vlanNumber = vlanNumber_raw.replace("1.", ""); //remove the WEIRD '1.' that get's added to the OID
    
    		if(vlanType != "1"){
    			//doNothing (since we only care about type==1 [ethernet])
    		}else{
    			//DEBUG print
    			/*println "####"
    			println "VLAN Type -> " +vlanType
    			println "VLAN Number -> " +vlanNumber*/ 
    			array_vlans.push(vlanNumber); //add VLANS(s) to the array
    		}
    }
    
    //iterate over the VLAN array & do the SNMP GET per vlan (to retrieve the TopologyChange metric)
    array_vlans.each(){
    	vlanID=it
    	snmpCommunity=snmpCommunity_raw+"@"+vlanID
    	getVlan_TCN= Snmp.get(deviceIP, snmpCommunity, snmpVersion, stpTCN);
    	println vlanID+".LastTopologyChange="+getVlan_TCN
    }


    If you guys could help it would be great. I'm pretty sure that groovy is doing some post-processing on the snmp.get result and/or I'm doing something wrong.

    Regards,

  • We were able to surpass this by tweaking the way the output gets processed (on the groovy script):

    snmpGet = new SNMPCollector()._convertTime(Snmp.get(host, community, version, oid));

    This was found by the user MNagel - thanks a lot man! :)/emoticons/smile@2x.png 2x" title=":)" width="20" /> 

    From there I've tweaked our DS in order to add context/support to SNMPv3.
    Bear in mind that in order to use SNMPv3 (in this STP context) the user/group needs to have view for the 'vlan-' context (tested this only at Cisco devices for now).

    Found this on post below:

    https://community.cisco.com/t5/network-management/multiple-snmp-v3-command-to-type-at-one-time/td-p/1475609

    I've made use of Cisco VLAN MIB, however, in the future we're seeking to use a method that can suit all the manufacturers (if you implement it in the meanwhile - feel free to share).

    DataSource (my GitHub, since I didn't shared it in the Exchange yet) -> https://github.com/vitor7santos/LogicMonitor/blob/master/STP_Topology_Change%2Cxml

    Thanks!