check_nwc_health - neuer Modus für Link Aggregation

Von einem Kunden wurde der Wunsch geäussert, Cisco Port Channels zu überwachen. Diese Technologie ist eine Art, wie man mehrere Interfaces zu einem Strang bündeln kann, sei es aus Gründen der Ausfallsicherheit oder (was mittlerweile eher seltener der Fall ist) der Lastverteilung. Üblicherweise werden Uplinks zwischen Switches auf diese Art redundant ausgelegt. Herausgekommen ist ein neues Feature, nämlich --mode link-aggregation-availability

Mit --mode link-aggregation-availability wird ermittelt, wieviel Prozent der zusammengefassten Interfaces verfügbar (= OperStatus up) sind. Ohne Angabe von Schwellwerten mittels --warning/--critical werden diese selbständig errechnet und zwar so, dass der Status WARNING ist, sobald ein Interface weggebrochen ist und CRITICAL, sobald nur noch ein einziges Interface übrig ist.

Welche Interfaces unter welchem Namen zusammengefasst werden, gibt man dem Parameter --name mit und zwar in Form einer kommaseparierten Liste. Das erste Element ist der Name der Link Aggregation, gefolgt von den Member-Interfaces (ifDescr).

Im folgenden Beispiel werden die Interfaces AT-GS950/24 1000 Mbps Ethernet Network Interface 1, AT-GS950/24 1000 Mbps Ethernet Network Interface 2 und AT-GS950/24 1000 Mbps Ethernet Network Interface 3 zu einem Uplink gebündelt. Und so sieht es aus, wenn man nacheinander zwei Kabel abzieht:

nagsrv$ check_nwc_health  --hostname 10.17.52.18 --community 'public' --mode link-aggregation-availability --name 'Uplink RZ 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 2,AT-GS950/24 1000 Mbps Ethernet Network Interface 3'
OK - aggregation Uplink RZ 1 availability is 100.00% (3 of 3) | 'aggr_Uplink RZ 1_availability'=100%;100:;34:

nagsrv$ check_nwc_health  --hostname 10.17.52.18 --community 'public' --mode link-aggregation-availability --name 'Uplink RZ 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 2,AT-GS950/24 1000 Mbps Ethernet Network Interface 3'
WARNING - aggregation Uplink RZ 1 availability is 66.67% (2 of 3) (down: AT-GS950/24 1000 Mbps Ethernet Network Interface 3) | 'aggr_Uplink RZ 1_availability'=66.67%;100:;34:

nagsrv$ check_nwc_health  --hostname 10.17.52.18 --community 'public' --mode link-aggregation-availability --name 'Uplink RZ 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 1,AT-GS950/24 1000 Mbps Ethernet Network Interface 2,AT-GS950/24 1000 Mbps Ethernet Network Interface 3'
CRITICAL - aggregation Uplink RZ 1 availability is 33.33% (1 of 3) (down: AT-GS950/24 1000 Mbps Ethernet Network Interface 2, AT-GS950/24 1000 Mbps Ethernet Network Interface 3) | 'aggr_Uplink RZ 1_availability'=33.33%;100:;34:



Für coshsh gibt es auch eine passende Detail-Klasse detail_linkaggregation.py


from monitoring_detail import MonitoringDetail

def __detail_ident__(params={}):
    if params["monitoring_type"] == "LINKAGGREGATION":
        return MonitoringDetailLinkAggregation


class MonitoringDetailLinkAggregation(MonitoringDetail):
    """
    """
    property = "linkaggregations"
    property_type = list

    def __init__(self, params):
        self.monitoring_type = params["monitoring_type"]
        self.name = params["monitoring_0"].strip()
        self.members = [params["monitoring_" + str(x)].strip() for x in range(1, 6) if "monitoring_" + str(x) in params and params["monitoring_" + str(x)]]

    def __str__(self):
        return "%s:%s" % (self.name, ",".join(self.members))



und ein Template os_ios_channel.tpl, so wie ich es für Cisco Port Channels verwende:




Damit das angezogen wird, muss man noch in der IOS-Klasse die entspr. Template-Regel einfügen:

class CiscoIOS(Application):
     template_rules = [
         TemplateRule(needsattr=None,
             template="os_ios_default",
         ),
         TemplateRule(needsattr='interfaces',
             template="os_ios_if",
         ),
         TemplateRule(needsattr='linkaggregations',
             template="os_ios_channel",
         ),