Die SD-WAN Gateway handelt es sich um eine Pipeline-Architektur, die Datenverkehrsbursts verarbeitet und Bursts mit hoher CPU erwartet. Das Gateway sollte auf CPU-Kernen überwacht werden, die sich bei 100 % drehen. Die DPDK-Kerne werden jedoch aus Leistungsgründen im Abfragemodus ausgeführt, und sie erwarten bei einem hohen Durchsatz eine CPU-Nutzung von fast 100 %.

Sie können ein Gateway mit Schwellenwerten überwachen, die Warnungen oder kritische Statuszustände bereitstellen und vor der Beeinträchtigung der Dienste auf potenzielle Probleme hinweisen. In der folgenden Tabelle sind die Schwellenwerte und empfohlenen Aktionen aufgeführt.

Status des Schwellenwerts Schwellenwert Empfohlene fehlerbehebende Aktion
Warnung 80 %

Wenn der Schwellenwert 5 Minuten lang ständig überschritten wird:

  • Überprüfen der CPU-Auslastung pro Prozess.
  • Fortsetzen der Überwachung für weitere 10 Minuten.

Wenn der Schwellenwert 5 Minuten lang ständig überschritten wird:

  • Erfassen des Gateway-Diagnosepakets.
  • Stellen einer Supportanfrage an VMware.
Kritisch 90 %

Wenn der Schwellenwert 5 Minuten lang ständig überschritten wird:

  • Überwachung auf einen möglichen kritischen Paketverlust, der auf eine Überkapazität hinweisen kann.

Wenn das Problem eine Stunde lang beobachtet wird:

  • Wenn in einem 5-Minuten-Intervall eine Überkapazität festgestellt wird, fügen Sie die Gateway-Kapazität hinzu und führen Sie eine Neuverteilung durch, um kapazitätsbezogene Auswirkungen auf den Dienst zu vermeiden.
    Hinweis: Stellen Sie vor der Neuverteilung des Gateways sicher, dass die Kapazitätsmetriken innerhalb des empfohlenen Grenzwerts liegen. Weitere Informationen zu Kapazitätsmetriken finden Sie unter Kapazität von Gateway-Komponenten.
Im Folgenden finden Sie ein Python-Beispielskript zur Überwachung der CPU-Auslastung:
Hinweis: Sie können auch Telegraf verwenden, um die CPU-Auslastung zu überwachen. Weitere Informationen finden Sie unter Überwachen von Gateways über Telegraf.
#! /usr/bin/env python
"""
Check for CPUs spinning at 100%
"""
import re
import collections
import time
import sys
import json
import os
import subprocess
re_cpu = re.compile(r"^cpu\d+\s")
CPUStat = collections.namedtuple('CPUStat', ['user', 'nice', 'sys', 'idle'])
def get_stats():
        stats = open("/proc/stat").readlines()
        ret = {}
        for s in stats:
                if not re_cpu.search(s): continue
                s = s.split()
                ret[s[0]] = CPUStat(*[ int(v) for v in s[1:5]])
        return ret
def verify_dpdk_support():
    if os.path.isfile('/opt/vc/etc/dpdk.json'):
       with open("/opt/vc/etc/dpdk.json") as data:
           d=json.loads((data.read()))
       if "status" in  d.keys():
           return True if d['status'] is "Supported" else False
    else:
       return False
def another_verify_dpdk_support():
    if os.path.isfile('/opt/vc/bin/debug.py'):
        f=subprocess.check_output(["/opt/vc/bin/debug.py","--dpdk_ports_dump"])
        x=[r.split() for r in f.split('\n')]
	if len(x) <= 1:
		return False
	else:
                return True
    else:
	return False
dpdk_status=verify_dpdk_support() or another_verify_dpdk_support()
if __name__ == "__main__":
        try:
                stat1 = get_stats()
                time.sleep(3)
                stat2 = get_stats()
        except:
                print "UKNOWN - failed to get CPU stat: %s" % str(sys.exc_info()[1])
                sys.exit(3)
        busy_cpu_set = [ cpu for cpu in stat1 if (stat2[cpu].idle - stat1[cpu].idle)==0 ]
        if not busy_cpu_set:
                        print "OK - no spinning CPUs"
                        sys.exit(0)
        if dpdk_status == True:
           if "cpu1" in busy_cpu_set and len(busy_cpu_set) == 1:
                        print "OK - no spinning CPUs"
                        sys.exit(0)
           elif "cpu1" in busy_cpu_set:
                        busy_cpu_set.remove('cpu1')
                        print "CRITICAL - %s is at 100%%" % (",".join(busy_cpu_set))
                        sys.exit(2)
           else:
                        print busy_cpu_set,1
                        print "CRITICAL - %s is at 100%%" % (",".join(busy_cpu_set))
                        sys.exit(2)
        else:
                        print "CRITICAL - %s is at 100%%" % (",".join(busy_cpu_set))
                        sys.exit(2)