SD-WAN Gateway procesa ráfagas de tráfico y donde se esperan ráfagas de CPU alta. La puerta de enlace debe supervisarse para los núcleos de CPU que giran al 100 %. Sin embargo, los núcleos de DPDK se ejecutan en modo de sondeo por motivos de rendimiento y esperan alcanzar cerca del 100 % de CPU con un alto rendimiento.

Es posible supervisar una puerta de enlace con umbrales que proporcionan estados críticos o de advertencia que evidencian posibles problemas antes de que afecten a los servicios. En la siguiente tabla se enumeran los valores de umbral y las acciones recomendadas.

Estado de umbral Valor de umbral Acción correctiva recomendada
Núcleo de DP Núcleo que no es de DP
Advertencia 95% 80 %

Si el valor del umbral se supera constantemente durante 5 minutos:

  • Compruebe el uso de CPU por proceso.
  • Supervíselo durante 10 minutos más.

Si el valor del umbral se supera constantemente durante 5 minutos:

  • Recopilar paquete de diagnóstico de puerta de enlace.
  • Abra un caso de soporte con VMware.
Crítico 98 % 90 %

Si el valor del umbral se supera constantemente durante 5 minutos:

  • Supervíselo para detectar posibles descartes de paquetes críticos que pueden indicar un exceso de capacidad.

Si el problema se observa durante una hora:

  • Si se observa un exceso de capacidad durante un intervalo de 5 minutos, agregue capacidad de puerta de enlace y vuelva a equilibrarlo para evitar que el servicio relacionado con la capacidad se vea afectado.
    Nota: Antes de volver a equilibrar la puerta de enlace, confirme que las métricas de capacidad estén dentro del límite recomendado. Para obtener más información sobre las métricas de capacidad, consulte Capacidad de los componentes de puerta de enlace.
A continuación se muestra un ejemplo de script de Python para supervisar el uso de CPU:
Nota: También puede utilizar Telegraf para supervisar el uso de la CPU. Para obtener más información, consulte Supervisar puertas de enlace con 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)