Konfigurieren eines NETCONF-Proxy-Telemetriesensors in Junos
Mit Junos Telemetry Streaming können Sie alle verfügbaren Statusinformationen mithilfe der XML-Proxy-Funktionalität in einen Telemetriesensor umwandeln. Das NETCONF-XML-Managementprotokoll und die Junos XML-API dokumentieren alle Optionen für jede unterstützte Junos OS-Betriebsanfrage vollständig. Nachdem Sie XML-Proxysensoren konfiguriert haben, können Sie über NETCONF-RPCs (Remote Procedure Calls) "get" auf Daten zugreifen.
Diese Aufgabe zeigt, wie Sie die Ausgabe eines Junos OS-Betriebsmodusbefehls streamen.
Es wird empfohlen, keine YANG-Dateien zu verwenden, die einem Junos OS-Betriebsbefehl mit umfangreicher oder ausführlicher Ausgabe oder einer langsamen Ausgabe zugeordnet sind. Befehle mit einer spürbaren Verzögerung sollten in YANG-Dateien vermieden werden. Das Einschließen solcher Befehle kann sich auf andere xmlproxyd-Sensoren sowie auf die Leistung von xmlproxyd auswirken.
Die Ausgabe einiger Betriebsmodusbefehle ist dynamisch, und der Grad ihrer Ausführlichkeit hängt von Faktoren wie der Konfiguration und der Hardware ab. Beispiele für solche Befehle sind jede Variation von show interfaces, show route, show arp, show bfdshow bgp, und show ddos-protection.
Um den Ausführlichkeitsgrad eines Befehls zu überprüfen, geben Sie den command-nameBefehl | display xml | count ein. Wenn die Zeilenanzahl einen Wert von 4000 Zeilen überschreitet, wird der Befehl nicht für das XML-Proxystreaming empfohlen. Bei diesem Wert handelt es sich eher um eine Näherung, die auf einer internen Grundauskleidung basiert. Sie kann in Abhängigkeit von verschiedenen Faktoren wie Gerätetyp, Rechenleistung des Geräts und vorhandener CPU-Auslastung geringer sein. Folglich muss diese Funktion je nach Leistung des Geräts mit Bedacht eingesetzt werden.
Sie können den Befehl command-name| display xml ausgeben, bevor Sie eine YANG-Datei verwenden, die einem Junos OS- oder Junos OS Evolved-Befehl zugeordnet ist, um sicherzustellen, dass der Befehl eine gültige XML-Ausgabe erzeugt und keine ungültigen Tags, Daten oder Formatierungen enthält.
Die Verwendung einer YANG-Datei, die einem ausführlichen Befehl zugeordnet ist, führt zu einem oder mehreren der folgenden Ergebnisse:
-
Die CPU-Auslastung des xmlproxyd-Prozesses bleibt hoch. Wenn xmlproxyd die Ablaufverfolgung aktiviert hat, ist die CPU-Auslastung noch höher.
-
Eine Erhöhung der Speicherauslastung des xmlproxyd-Prozesses.
-
Der xmlproxyd-Prozessstatus kann angezeigt
sbwaitwerden, was darauf hinweist, dass die Befehlsausgabe ausführlich ist und dass xmlproxyd viel Zeit damit verbringt, die Ausgabe des Remote Procedure Calls (RPC) des Befehls zu lesen. -
Die xmlproxyd-Sensordaten schließen den Wrap nicht ab.
-
Der xmlproxyd streamt teilweise oder keine Daten für die Sensoren.
-
Der xmlproxyd verpasst Berichtsintervallzyklen. Die Intervalle überlappen sich aufgrund der ausführlichen Ausgabe eines Befehls, was dazu führt, dass der Sensor des xmlproxyd Daten langsam oder verzögert streamt.
-
Der Prozess oder die Anwendung, der bzw. die den RPC des ausführlichen Befehls bedient, weist möglicherweise eine hohe CPU-Anzahl oder Verzögerungen bei der Ausführung der Hauptaufgaben auf. Dieses Verhalten wird verursacht, wenn der Prozess oder die Anwendung damit beschäftigt ist, den RPC mit ausführlicher Ausgabe zu verarbeiten.
Für diese Aufgabe ist Folgendes erforderlich:
-
Ein Router der MX-Serie, vMX-Serie oder PTX-Serie mit Junos OS Version 17.3R2 oder höher.
-
Einen Telemetriedatenempfänger, z. B. OpenNTI, um den ordnungsgemäßen Betrieb des Telemetriesensors zu überprüfen.
In dieser Aufgabe streamen Sie den Inhalt des Befehls show system usersJunos OS .
show system users (vMX-Serie)
user@switch> show system users USER TTY FROM LOGIN@ IDLE WHAT user1 pts/0 172.31.12.36 12:40PM 39 -cli (cli) user2 pts/1 172,16.03.25 3:01AM - -cli (cli)
Neben der erwarteten Liste der aktuell angemeldeten Benutzer gibt die show system users Ausgabe auch die durchschnittliche Systemauslastung mit 1, 5 und 15 Minuten an. Sie können die Lastdurchschnitte ermitteln, indem Sie den show system users | display xml Befehl verwenden, um die XML-Tagging für die Ausgabefelder anzuzeigen. Weitere Informationen finden Sie unter <load-average-1>, <load-average-5>und <load-average-15> in der XML-Tagging-Ausgabe unten.
user@switch> show system users | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/17.4R1/junos">
<system-users-information xmlns="http://xml.juniper.net/junos/17.4R1/junos">
<uptime-information>
<date-time junos:seconds="1520170982">1:43PM</date-time>
<up-time junos:seconds="86460">1 day, 40 mins</up-time>
<active-user-count junos:format="2 users">2</active-user-count>
<load-average-1>0.70</load-average-1>
<load-average-5>0.58</load-average-5>
<load-average-15>0.55</load-average-15>
<user-table>
<user-entry>
<user>root</user>
<tty>pts/0</tty>
<from>172.21.0.1</from>
<login-time junos:seconds="1520167202">12:40PM</login-time>
<idle-time junos:seconds="0">-</idle-time>
<command>cli</command>
</user-entry>
<user-entry>
<user>mwiget</user>
<tty>pts/1</tty>
<from>66.129.241.10</from>
<login-time junos:seconds="1520170862">1:41PM</login-time>
<idle-time junos:seconds="60">1</idle-time>
<command>cli</command>
</user-entry>
</user-table>
</uptime-information>
</system-users-information>
<cli>
<banner></banner>
</cli>
</rpc-reply>
Das uptime-information in der vorhergehenden Ausgabe gezeigte Tag ist ein Container, der Blätter enthält, z. B date-time. , up-time, active-user-count. und load-average-1. Im Folgenden finden Sie eine YANG-Beispieldatei für diesen Container:
container uptime-information {
dr:source "uptime-information"; // Exact name of the XML tag
leaf date-time { // YANG model leaf
type string; // Type of value
dr:source date-time; // Exact name of the XML tag
}
leaf up-time { // YANG model leaf
type string; // Type of value
dr:source up-time; // Exact name of the XML tag
}
leaf active-user-count { // YANG model leaf
type int32; // Type of value
dr:source active-user-count; // Exact name of the XML tag
}
leaf load-average-1 { // YANG model leaf
type string; // Type of value
dr:source load-average-1; // Exact name of the XML tag
}
...
Das uptime-information Tag verfügt außerdem über einen weiteren Container mit dem Namen user-table , der eine Liste von Benutzereinträgen enthält.
Im Folgenden finden Sie eine YANG-Beispieldatei für diesen Container:
container user-table { // "user-table" container which contains list of user-entry
dr:source "user-table"; // Exact name of the XML tag
list user-entry { // "user-entry" list which contains the users' details in form of leafs
key "user"; // Key for the list "user-entry" which is a leaf in the list "user-entry"
dr:source "user-entry"; // Source of the list "user-entry" which is the exact name of the XML tag
leaf user { // YANG model leaf
dr:source user; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
leaf tty { // YANG model leaf
dr:source tty; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
leaf from { // YANG model leaf
dr:source from; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
leaf login-time { // YANG model leaf
dr:source login-time; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
leaf idle-time { // YANG model leaf
dr:source idle-time; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
leaf command { // YANG model leaf
dr:source command; // A leaf in the list "user-entry", exact name of the XML tag
type string; // Type of value
}
}
}
Erstellen einer benutzerdefinierten YANG-Datei
Die YANG-Datei definiert den auszuführenden Junos CLI-Befehl, den Ressourcenpfad, unter dem die Sensoren platziert werden, und die Schlüssel-Wert-Paare aus den übereinstimmenden XML-Tags.
Benutzerdefinierte YANG-Dateien für Junos OS entsprechen der YANG-Sprachsyntax, die in RFC 6020, YANG 1.0, YANG – A Data Modeling Language for the Network Configuration Protocol (NETCONF) und RFC 7950, der Datenmodellierungssprache von YANG 1.1, definiert ist. Bestimmte Direktiven müssen in der Datei vorhanden sein, mit denen der XML-Proxy konfiguriert wird.
Um den xmlproxyd Prozess zum Übersetzen von Telemetriedaten zu verwenden, erstellen Sie eine render.yang Datei. In dieser Datei ist der Wert dr:command-app auf xmlproxydfestgelegt.
Der XML-Proxy-YANG-Dateiname und der Modulname müssen beginnen mit xmlproxyd_:
Fügen Sie für den XML-Proxy-YANG-Dateinamen die Erweiterung
.yanghinzu, z. B.xmlproxyd_sysusers.yangVerwenden Sie für den Modulnamen den Dateinamen ohne die Erweiterung
.yang, z. B.xmlproxyd_sysusers
Um die Erstellung einer YANG-Datei zu vereinfachen, ist es am einfachsten, mit der Änderung eines funktionierenden Beispiels zu beginnen.
Laden der Yang-Datei in Junos
Nachdem die YANG-Datei fertig ist, laden Sie die YANG-Datei hoch, und überprüfen Sie, ob das Modul erstellt wurde.
Sensordaten erfassen
Verwenden Sie Ihren bevorzugten Collector, um die neu erstellten Telemetriesensordaten vom Gerät abzurufen.
Berücksichtigen Sie Ressourcenbeschränkungen, bevor Sie Sensoren einsetzen:
-
Vermeiden Sie es, dasselbe Berichtsintervall für mehrere XML-Proxysensoren anzugeben.
-
Da xmlproxyd XML- und Textverarbeitung ausführt, sollte ein Gerät nur XML-Proxysensoren enthalten, die innerhalb des CPU-Auslastungsbereichs ausgeführt werden.
Plattformspezifisches Sensordatenerfassungsverhalten
Verwenden Sie Funktionen entdecken, um die Plattform- und Releaseunterstützung für bestimmte Funktionen zu bestätigen.
Verwenden Sie die folgende Tabelle, um plattformspezifische Verhaltensweisen für Ihre Plattformen zu überprüfen:
| Bahnsteig |
Unterschied |
|---|---|
| PTX10008 |
Schließen Sie bei PTX10008 Routern, die Junos OS Evolved ausgeführt werden, nicht mehr als 10 Kollektoren pro Router für Telemetrie-RPCs an. |
Die folgenden Anweisungen verwenden den Kollektor jtimon. Weitere Informationen zur Jtimon-Einrichtung finden Sie unter Junos Telemetry Interface-Client.
Wenn bereits ein Abonnement für einen Sensor vorhanden ist und ein doppeltes Abonnement konfiguriert ist, wird die Verbindung zwischen dem Kollektor und dem Gerät mit der Fehlermeldung AlreadyExistsgeschlossen.
Installieren einer benutzerdefinierten YANG-Datei
Um eine benutzerdefinierte YANG-Datei für den XML-Proxy für die Junos Telemetry Interface hinzuzufügen, zu validieren, zu ändern oder zu löschen, verwenden Sie die folgenden request system yang Befehle aus dem Betriebsmodus:
Fehlerbehebung bei Telemetriesensoren
Problem
Beschreibung
Verwenden Sie die folgenden Methoden, um Probleme mit benutzerdefinierten Telemetriesensoren zu beheben:
-
Führen Sie ein tcpdump für die Schnittstelle aus, von der Ihre gRPC-Anforderungen stammen (für diese Aufgabe wurde die Schnittstelle
fxp0verwendet).user@switch>monitor traffic interface fxp0 no-resolve matching "tcp port 32767"
-
Aktivieren Sie die Trace-Optionen mit dem set services analytics traceoptions flag xmlproxy Befehl. Überprüfen Sie die
xmlproxydProtokolldatei, um zu bestätigen, ob der RPC des CLI-Befehls gesendet wurde und ob eine Antwort empfangen wurde:
Geben Sie den show log xmlproxyd Befehl ein, um das xmlproxyd-Protokoll anzuzeigen. Der Wert für das Feld
xmlproxy_execute_cli_command:gibt an, ob der RPC gesendet wurde oder nicht. Der Wert für das Feldxmlproxy_build_contextgibt den Befehl an.
user@switch>show log xmlproxyd Mar 4 18:52:46 vmxdockerlight_vmx1_1 clear-log[52495]: logfile cleared Mar 4 18:52:51 xmlproxy_telemetry_start_streaming: sensor /junos/system-users-information/ Mar 4 18:52:51 xmlproxy_build_context: command show system users merge-tag: Mar 4 18:52:51 <command format="xml">show system users</command> Mar 4 18:52:51 xmlproxy_execute_cli_command: Sent RPC.. Mar 4 18:52:51 <system-users-information xmlns="http://xml.juniper.net/junos/17.4R1/junos" xmlns:junos="http://xml.juniper.net/junos/*/junos"> <uptime-information> <date-time junos:seconds="1520189571"> 6:52PM </date-time> <up-time junos:seconds="107400"> 1 day, 5:50 </up-time> <active-user-count junos:format="1 users"> 1 </active-user-count> <load-average-1> 0.94 </load-average-1> <load-average-5> 0.73 </load-average-5> <load-average-15> 0.65