Η Πύλη SD-WAN είναι μια αρχιτεκτονική αγωγών που επεξεργάζεται ριπές κυκλοφορίας και αναμένονται ριπές υψηλής CPU. Η πύλη πρέπει να παρακολουθείται για πυρήνες CPU που περιστρέφονται στο 100%. Ωστόσο, οι πυρήνες DPDK εκτελούνται σε λειτουργία σταθμοσκόπησης για λόγους απόδοσης και αναμένουν να λάβουν περίπου 100% CPU σε υψηλή ταχύτητα μετάδοσης.

Μπορείτε να παρακολουθείτε μια πύλη με όρια που παρέχουν προειδοποιητικές ή κρίσιμες καταστάσεις που υποδεικνύουν πιθανά ζητήματα πριν από την επίδραση των υπηρεσιών. Ο παρακάτω πίνακας παραθέτει τις οριακές τιμές και τις προτεινόμενες ενέργειες.

Κατάσταση ορίου Οριακή τιμή Συνιστώμενη διορθωτική ενέργεια
Προειδοποίηση 80%

Εάν γίνεται υπέρβαση της οριακής τιμής σταθερά για 5 λεπτά:

  • Ελέγξτε τη χρήση της CPU ανά διεργασία.
  • Παρακολουθήστε για άλλα 10 λεπτά.

Εάν γίνεται υπέρβαση της οριακής τιμής σταθερά για 5 λεπτά:

  • Συλλέξτε το πακέτο διαγνωστικών ελέγχων πύλης.
  • Ανοίξτε μια υπόθεση υποστήριξης στη VMware.
Κρίσιμο 90%

Εάν γίνεται υπέρβαση της οριακής τιμής σταθερά για 5 λεπτά:

  • Παρακολουθήστε για πιθανή κρίσιμη απόθεση πακέτων που μπορεί να υποδεικνύει υπερβολική χωρητικότητα.

Εάν το πρόβλημα παρατηρηθεί για μία ώρα:

  • Εάν παρατηρηθεί υπέρβαση της χωρητικότητας επί διάστημα μεγαλύτερο των 5 λεπτών, προσθέστε χωρητικότητα πύλης και εξισορρόπηση για να αποφύγετε τον αντίκτυπο της υπηρεσίας που σχετίζεται με τη χωρητικότητα.
    Σημείωση: Πριν από την επανεξισορρόπηση της πύλης, επιβεβαιώστε ότι οι μετρήσεις χωρητικότητας βρίσκονται εντός του συνιστώμενου ορίου. Για περισσότερες πληροφορίες σχετικά με τις μετρήσεις χωρητικότητας, δείτε Χωρητικότητα στοιχείων πύλης.
Ακολουθεί ένα παράδειγμα δέσμης ενεργειών Python για την παρακολούθηση της χρήσης της CPU:
Σημείωση: Μπορείτε επίσης να χρησιμοποιήσετε το Telegraf για να παρακολουθείτε τη χρήση της CPU. Για περισσότερες πληροφορίες, δείτε Παρακολούθηση πυλών με χρήση του 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)