Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Definieren von Ansichten für Junos PyEZ-Betriebstabellen, die unstrukturierte Ausgaben analysieren

Junos PyEZ operational (op) Tabellen für unstrukturierte Ausgaben, extrahieren Daten aus der Textausgabe eines CLI-Befehls, der auf einem Junos-Gerät ausgeführt wird, oder eines vty-Befehls, der auf einem bestimmten Flexible PIC Concentrator (FPC) ausgeführt wird. Eine Tabelle ist einer Ansicht zugeordnet, die verwendet wird, um auf Felder in den Tabellenelementen zuzugreifen und sie benutzerdefinierten Python-Variablen zuzuordnen. Sie ordnen eine Tabelle einer bestimmten Ansicht zu, indem Sie die view Eigenschaft in die Tabellendefinition aufnehmen, die den Namen View als Argument verwendet.

Eine Ansicht ordnet Ihre benutzerdefinierten Variablen den Daten in den ausgewählten Tabellenelementen zu. In einer Ansicht können Sie auf bestimmte Felder in der Ausgabe als Variablen mit Eigenschaften zugreifen, die in Python bearbeitet werden können. Junos PyEZ kümmert sich um die Extraktion der Daten in Python sowie um jede Typkonvertierung oder Datennormalisierung. Die in der Ansicht definierten Schlüssel müssen gültige Python-Variablennamen sein.

In diesem Thema werden die verschiedenen Komponenten der Ansicht erläutert.

Zusammenfassung der Parameter in Ansichten zum Parsen unstrukturierter Ausgaben

Junos PyEZ-Ansichten werden wie Tabellen mit YAML formatiert. Ansichten, die unstrukturierte Ausgaben analysieren, können eine Reihe von Parametern enthalten, die in Tabelle 1 zusammengefasst sind.

Tabelle 1: Parameter in Ansichten für Junos PyEZ Op-Tabellen für unstrukturierte Ausgabe

View-Parameter

Beschreibung

Name anzeigen

Benutzerdefinierter Bezeichner für die Ansicht.

columns

(Optional) Liste der Spaltentitel in der Befehlsausgabe.

eval

(Optional) Assoziatives Array oder Wörterbuch eines oder mehrerer Schlüssel-Wert-Paare, die einen benutzerdefinierten Schlüssel einer Zeichenfolge zuordnen, die einen mathematischen Ausdruck enthält. Für jede Iteration der Daten wird der Ausdruck mithilfe der Python-Funktion eval ausgewertet. Der Schlüssel und der berechnete Wert werden den Daten hinzugefügt, die dieser Iteration entsprechen.

exists

(Optional) Assoziatives Array oder Wörterbuch von Schlüssel-Wert-Paaren, die einen benutzerdefinierten Schlüssel einer Zeichenfolge zuordnen. Wenn die Zeichenfolge in der Ausgabe vorhanden ist, wird die Variable auf True gesetzt, andernfalls wird die Variable auf False gesetzt.

fields

(Optional) Assoziatives Array oder Wörterbuch von Schlüssel-Wert-Paaren, die einen benutzerdefinierten Schlüssel dem Namen einer geschachtelten Tabelle zuordnen, die einen bestimmten Abschnitt der Befehlsausgabe analysiert.

filters

(Optional) Liste eines oder mehrerer Schlüssel, die unter definiert sind columns. Der endgültige Datensatz enthält nur Daten aus den ausgewählten Spalten.

regex

(Optional) Liste der regulären Ausdrücke, die dem gewünschten Inhalt entsprechen.

Name anzeigen

Der Ansichtsname ist ein benutzerdefinierter Bezeichner für die Ansicht. Sie ordnen eine Tabelle einer bestimmten Ansicht zu, indem Sie die view Eigenschaft in die Tabellendefinition aufnehmen und den Ansichtsnamen als Argument angeben.

Im folgenden Beispiel wird eine View mit dem Namen ChassisFanViewdefiniert, auf die durch den view Table-Parameter verwiesen wird:

Spalten

Sie können den columns Parameter in einer Ansicht verwenden, um Befehlsausgaben zu extrahieren und zu analysieren, die in Zeilen und Spalten formatiert sind.

Betrachten Sie die folgende show ospf neighbor Befehlsausgabe:

Um die Daten zu extrahieren, fügen Sie den columns Parameter in die Ansicht ein, und ordnen Sie den Python-Variablennamen dem Spaltennamen zu. Die Anwendung speichert den Schlüssel und den Wert, die aus der Befehlsausgabe für diese Spalte extrahiert wurden, als Schlüssel-Wert-Paar im Wörterbuch für das angegebene Element.

In der folgenden Ansicht werden die Daten aus den einzelnen Spalten in der show ospf neighbor Befehlsausgabe extrahiert:

Wenn Sie die Daten in der Junos PyEZ-Anwendung abrufen und drucken, enthalten die Daten für jeden Nachbarn die Spaltenschlüssel und die entsprechenden Daten.

Um die Daten so zu filtern, dass nur Daten aus ausgewählten Spalten enthalten sind, fügen Sie den filters Parameter in die Ansicht ein. Weitere Informationen finden Sie unter Filter.

Einige Befehlsausgaben enthalten Spaltentitel, die sich über mehrere Zeilen erstrecken, z. B.:

Um einen mehrzeiligen Spaltentitel in einer Ansicht zu definieren, legen Sie das Spaltenschlüsselelement gleich einer Liste der Wörter in jeder Zeile für diesen Titel fest. In der folgenden Ansicht werden die Spalten für die vorherige Befehlsausgabe definiert:

Eval-Ausdruck (eval)

Sie können den optionalen eval Parameter verwenden, um Schlüssel-Wert-Paare in den endgültigen Daten hinzuzufügen oder zu ändern, die von der Tabelle und der Ansicht zurückgegeben werden. Der eval Parameter ordnet einen Schlüsselnamen einer Zeichenfolge zu, die einen mathematischen Ausdruck enthält, der von der Python-Funktion eval ausgewertet wird. Sie können den eval Parameter sowohl in Tabellen als auch in Ansichten einschließen und eval mehrere Werte definieren und berechnen.

Wenn Sie es in einer Tabelle verwenden eval , verweist es für die Berechnung auf das vollständige Datenwörterbuch, und der Schlüssel und der berechnete Wert werden dem Wörterbuch als einzelnes zusätzliches Element hinzugefügt. Bei Verwendung eval in einer Ansicht wird der Ausdruck für jede Iteration der Daten berechnet, und der berechnete Wert wird den Daten für diese Iteration hinzugefügt. Wenn der eval Schlüsselname mit einem in der Ansicht definierten Schlüssel übereinstimmt, eval wird der Wert dieses Schlüssels durch den berechneten Wert ersetzt. Wenn der eval Schlüsselname nicht mit einem in der Ansicht definierten Schlüssel übereinstimmt, eval werden der neue Schlüssel und der berechnete Wert zu den Daten hinzugefügt.

Der eval Ausdruck kann auf das Wörterbuch verweisen, das data von View zurückgegeben wird. Der Ausdruck muss mithilfe einer Jinja-Vorlagenvariablen referenziert data werden, damit Junos PyEZ die Variable bei der Auswertung des Ausdrucks durch das Wörterbuch ersetzen kann.

Im folgenden Beispiel wird in der View-Definition verwendet eval . Der cpu Eintrag ändert den vorhandenen Wert des cpu Felds für jedes Element im Datenwörterbuch, und der max Eintrag erstellt ein neues Schlüssel-Wert-Paar für jedes Element im Datenwörterbuch.

Betrachten Sie die folgende Beispielausgabe für den show threads Befehl vty:

Der View-Parameter eval ändert jeden cpu Eintrag so, dass das Prozentzeichen (%) weggelassen wird. Daher enthalten die Daten "0" anstelle von "0%". Darüber hinaus werden für jedes Element ein neuer Schlüssel maxund der berechnete Wert hinzugefügt.

Beispiele, die in der Tabellendefinition verwendet werden, finden Sie eval unter Auswertungsausdruck (eval).

Existiert

Sie können den optionalen exists Parameter in einer Ansicht verwenden, um anzugeben, ob eine Zeichenfolge in der Befehlsausgabe vorhanden ist. exists ist ein Wörterbuch von Schlüssel-Wert-Paaren, die einen benutzerdefinierten Python-Variablennamen der Zeichenfolge zuordnen, die in der Befehlsausgabe übereinstimmen soll. Wenn die Zeichenfolge in der Ausgabe vorhanden ist, wird die Variable auf Truegesetzt. Andernfalls wird die Variable auf Falsegesetzt.

Betrachten Sie die Ausgabe des show host_loopback status-summary Befehls vty.

In der folgenden Tabelle wird definiert exists , ob die Befehlsausgabe eine No detected wedges Zeichenfolge oder eine No toolkit errors Zeichenfolge enthält:

Wenn Sie die Tabelle und die Ansicht verwenden, um die Zeichenfolgen zu testen und die resultierenden Werte in Ihrer Junos PyEZ-Anwendung auszugeben, werden in diesem Fall beide Variablen auf True festgelegt.

Felder

Die Befehlsausgabe kann langwierig und komplex sein, und Sie benötigen möglicherweise eine andere Logik, um verschiedene Abschnitte der Ausgabe zu analysieren. In einigen Fällen können Sie die Befehlsausgabe mit einer einzelnen Tabelle und Ansicht nicht angemessen analysieren. Um diesen Ausgabetyp zu analysieren, können Sie den optionalen fields Parameter in die Ansicht aufnehmen. fields ist ein Wörterbuch von Schlüssel-Wert-Paaren, die einen benutzerdefinierten Schlüssel dem Namen einer geschachtelten Tabelle zuordnen, die einen bestimmten Abschnitt der Befehlsausgabe auswählt. Jede geschachtelte Tabelle kann auf ihre eigene Ansicht verweisen, die zum Analysieren der von dieser Tabelle ausgewählten Daten verwendet wird.

Betrachten Sie die Ausgabe des show xmchip 0 pt stats Befehls vty, die zwei verschiedene Datenabschnitte enthält:

In der folgenden XMChipStatsView Ansicht wird der fields Parameter verwendet, um zwei zusätzliche Tabellen zu definieren, die zum Analysieren der beiden verschiedenen Abschnitte der Befehlsausgabe verwendet werden. Die _WANPTStatTable Tabellen und _FabricPTStatTable extrahieren die Daten aus den WAN PT statistics Abschnitten bzw Fabric PT statistics . den Abschnitten. In diesem Fall verwenden die Tabellen den delimiter Parameter, um die Daten zu extrahieren und aufzuteilen, sodass sie nicht auf eine separate Ansicht verweisen müssen.

Wenn Sie die Daten in der Junos PyEZ-Anwendung abrufen und drucken, enthält jeder unter fields definierte Schlüssel die Daten, die von der entsprechenden Tabelle ausgewählt und analysiert werden.

Betrachten Sie als weiteres Beispiel die Ausgabe des show ttp statistics Befehls vty:

Die FPCTTPStatsView Ansicht verwendet den fields Parameter, um auf mehrere verschachtelte Tabellen zu verweisen, die die Daten in den verschiedenen Abschnitten der Ausgabe extrahieren. Jede Tabelle verweist auf ihre eigene Ansicht oder verwendet den delimiter Parameter, um die Daten in diesem Abschnitt zu analysieren.

Wenn Sie die Daten in der Junos PyEZ-Anwendung abrufen und drucken, enthält jeder fields Schlüssel die Daten, die von der entsprechenden Tabelle extrahiert und analysiert wurden.

Filter

Der columns Parameter extrahiert Daten aus der Befehlsausgabe, die in Zeilen und Spalten formatiert ist. Wenn Sie den columns Parameter in eine Ansicht einschließen, können Sie optional den filters Parameter einschließen, um zu filtern, welche Spaltendaten in der endgültigen Ausgabe enthalten sind. Der filters Parameter definiert eine Liste von einem oder mehreren Schlüsseln, die unter definiert sind columns. Der endgültige Datensatz enthält nur Daten aus den ausgewählten Spalten. Sie können Standardfilter in der Ansichtsdefinition angeben und Filterwerte in der Junos PyEZ-Anwendung definieren oder überschreiben.

Betrachten Sie die show ospf neighbor Befehlsausgabe:

In der folgenden Ansicht definiert der columns Parameter Schlüssel für alle Spalten in der entsprechenden Befehlsausgabe, aber der filters Parameter enthält nur die Daten aus den Address Spalten und State im Datenwörterbuch.

Der folgende Junos PyEZ-Code ruft zunächst ohne Argumente auf get() , wodurch die Daten mithilfe der in der Ansicht definierten Standardliste von Filtern abgerufen werden. Der zweite Aufruf von enthält get() das Argument filters , das die in der Ansicht definierte Filterliste überschreibt.

Wenn Sie die Anwendung ausführen, verwendet der erste Aufruf von get() die in der Ansicht definierten Filter, und der zweite Aufruf verwendet die im Aufruf definierten Filter, die die in der Ansicht definierten Filter überschreiben.

Regex

Sie können den optionalen regex Parameter in einer Ansicht verwenden, um bestimmte Felder in der Befehlsausgabe abzugleichen und zu extrahieren. regex ist ein Wörterbuch, das Schlüssel regulären Ausdrücken zuordnet. Wenn die entsprechende Tabelle nicht definiert item: '*'ist, kombiniert Junos PyEZ die regulären Ausdrücke und gleicht das Ergebnis mit jeder Ausgabezeile ab. Wenn in der Tabelle jedoch definiert item: '*' ist, dass die Daten als einzelne Textzeichenfolge extrahiert werden sollen, gleicht Junos PyEZ stattdessen jeden einzelnen regulären Ausdruck mit der gesamten Textzeichenfolge ab.

Die im regulären Ausdruck definierte Erfassungsgruppe bestimmt die Daten, die aus dem Feld extrahiert und im Datenwörterbuch gespeichert werden. Wenn Sie eine Erfassungsgruppe definieren, wird nur der Wert für diese Gruppe in den Daten gespeichert. Andernfalls speichert Junos PyEZ den Wert, der mit dem vollständigen Ausdruck übereinstimmt. Ruft z. B (d+.d+) . einen Gleitkommawert aus dem Zeichenfolgensuchausdruck ab und speichert ihn, während (d+).d+ nur der ganzzahlige Teil der Daten gespeichert wird. Wenn Sie mehrere Gruppen definieren, wird nur der Wert für die erste Gruppe gespeichert.

Junos PyEZ nutzt das pyparsing Modul, um eine Reihe integrierter Schlüsselwörter zu definieren, die Sie anstelle eines regulären Ausdrucks verwenden können. Tabelle 2 listet das Schlüsselwort, eine kurze Beschreibung und den entsprechenden Ausdruck auf, wobei von pp abgeleitet ist import pyparsing as pp.

Tabelle 2: Regex-Parameterschlüsselwörter

Schlüsselwort

Beschreibung

Ausdruck

hex_numbers

Wort, das nur Hexadezimalzeichen enthält

hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
    & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1))

numbers

Wort, das aus einem Integer- oder Float-Wert besteht

numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
     pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i))

percentage

Wort, das aus Ziffern und einem abschließenden Prozentzeichen (%) besteht

percentage = pp.Word(pp.nums) + pp.Literal('%')

printables

Ein oder mehrere Wörter, die aus druckbaren Zeichen bestehen (alle Zeichen, die keine Leerzeichen sind)

printables = pp.OneOrMore(pp.Word(pp.printables))

word

Wort, das aus alphanumerischen oder alphanumerischen Zeichen besteht

word = pp.Word(pp.alphanums) | pp.Word(pp.alphas)

words

Eine oder mehrere word Zeichenfolgen

words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i))

Betrachten Sie die folgende show icmp statistics Befehlsausgabe. Jeder Ausgabeabschnitt befindet sich unter einem bestimmten Abschnittstitel, und die Daten bestehen aus einer Zahl und einem oder mehreren Wörtern.

Um die vorherige Ausgabe zu analysieren, definiert fieldsdie Hauptansicht , die auf geschachtelte Tabellen und Ansichten verweist, die jeden Abschnitt der Ausgabe analysieren. Die verschachtelten Ansichten definieren den Parameter, der regex mit den von der entsprechenden Tabelle extrahierten Daten abgeglichen werden soll.

Beispielsweise wählt die _ICMPDiscardsTable Tabelle die Daten unter dem ICMP Discards Abschnitt in der Befehlsausgabe aus. Die _ICMPDiscardsView Ansicht definiert zwei Schlüssel value und name, die regulären Ausdrücken zugeordnet sind. value mit einer oder mehreren Ziffern und name mit einem oder mehreren Wörtern übereinstimmt. Da die Tabelle nicht definiert item: '*'ist, werden die regulären Ausdrücke kombiniert und mit jeder Datenzeile in diesem Abschnitt abgeglichen.

Die _ICMPErrorsTable Tabelle wählt die Daten unter dem ICMP Errors Abschnitt in der Befehlsausgabe aus. Die _ICMPErrorsView Ansicht definiert die error Schlüssel und name verwendet die integrierten Schlüsselwörter numbers und words anstelle der expliziten Definition regulärer Ausdrücke.

Wenn in der Tabelle definiert item: '*'ist, werden die extrahierten Daten als eine Textzeichenfolge betrachtet. In diesem Fall stimmt jeder reguläre Ausdruck in der entsprechenden Ansicht mit der gesamten Zeichenfolge überein.

Betrachten Sie die show ithrottle id 0 Befehlsausgabe.

In der folgenden Tabelle werden die item: '*' Daten als einzelne Zeichenfolge extrahiert. Der Parameter View definiert regex drei reguläre Ausdrücke. Jedes Regex-Muster wird mit der gesamten Zeichenfolge abgeglichen. Da die regulären Ausdrücke Erfassungsgruppen definieren, speichert Junos PyEZ nur die Daten, die mit der Gruppe übereinstimmen.

Wenn Sie die Daten in der Junos PyEZ-Anwendung abrufen und drucken, enthalten die Daten die drei regex Elemente, die den Wert enthalten, der von der Erfassungsgruppe für diesen Ausdruck abgeglichen wurde.