Le dispositif SD-WAN Gateway est une architecture de pipeline qui traite les rafales de trafic et des rafales de CPU élevées sont attendues. La passerelle doit être surveillée pour les cœurs de CPU qui tournent à 100 %.

Vous pouvez surveiller une passerelle avec des seuils qui fournissent des états d'avertissement ou critiques qui indiquent des problèmes potentiels avant d'avoir une incidence sur les services. Le tableau suivant répertorie les valeurs de seuil et les actions recommandées.

État du seuil Valeur de seuil Action corrective recommandée
Avertissement 80 %

Si la valeur de seuil est constamment franchie pendant 5 minutes :

  • Vérifiez l'utilisation du CPU par processus.
  • Effectuez la surveillance pendant 10 minutes supplémentaires.

Si la valeur de seuil est constamment franchie pendant 5 minutes :

  • Collectez le bundle de diagnostics de la passerelle.
  • Ouvrez un dossier de support auprès de VMware.
Critique 90 %

Si la valeur de seuil est constamment franchie pendant 5 minutes :

  • Surveillez un abandon éventuel critique de paquets qui peut indiquer une surcapacité.

Si le problème persiste pendant une heure :

  • Si une surcapacité est observée pendant un intervalle de 5 minutes, ajoutez de la capacité de la passerelle et rééquilibrez-la pour éviter une incidence sur le service lié à la capacité.
    Note : Avant de rééquilibrer la passerelle, vérifiez que les mesures de capacité se situent dans la limite recommandée. Pour plus d'informations sur les mesures de capacité, reportez-vous à la section Capacité des composants de passerelle.
Vous trouverez ci-dessous un exemple de script Python pour la surveillance de l'utilisation du CPU :
Note : Vous pouvez également utiliser Telegraf pour surveiller l'utilisation du CPU. Pour plus d'informations, reportez-vous à la section Surveiller les passerelles à l'aide de 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)