Richtlinien zum Aggregieren von Junos Telemetriedaten
Ein wichtiges Merkmal der Junos Telemetrie besteht darin, dass die Datenverarbeitung auf dem Kollektor stattfindet, der die Daten streamt, und nicht am Gerät. Daten werden nicht automatisch aggregiert, können aber zur Analyse aggregiert werden.
Die Datenaggregation ist in den folgenden Szenarien nützlich:
Daten für dieselbe Metrik über feste Zeitspannen, z. B. die durchschnittliche Anzahl von Fehlern beim Eingang physischer Schnittstellen über ein Intervall von 30 Sekunden.
Daten aus verschiedenen Quellen (z. B. mehrere Linecards) für dieselbe Metrik, z. B. LSP-Statistiken (Label-Switched Path) oder Filterzählerstatistiken.
Daten aus verschiedenen Quellen, z. B. Eingabe- und Ausgabestatistiken für aggregierte Ethernet-Schnittstellen.
In den folgenden Abschnitten wird beschrieben, wie Sie die Datenaggregation für verschiedene Szenarien durchführen. In den Beispielen in diesen Abschnitten wird die InfluxDB-Zeitreihendatenbank verwendet, um Abfragen von Telemetriedaten zu akzeptieren. InfluxDB ist eine Open-Source-Datenbank, die speziell in Go geschrieben wurde, um Zeitreihendaten zu verarbeiten.
Aggregieren von Daten über feste Zeitspannen
Das Aggregieren von Daten für dieselbe Metrik über feste Zeiträume ist eine gängige und nützliche Methode, um Trends zu erkennen. Metriken können Messgeräte enthalten, d. h. Einzelwerte oder kumulative Leistungsindikatoren. Möglicherweise möchten Sie Daten auch kontinuierlich aggregieren.
- Beispiel: Aggregieren von Daten für Messgerätmetriken
- Beispiel: Aggregieren von Daten für kumulative Statistiken
Beispiel: Aggregieren von Daten für Messgerätmetriken
In diesem Beispiel werden Daten für JuniperNetworksSensors.jnpr_interface_ext.interface_stats.egress_queue_info.current_buffer_occupancy from port.proto in die InfluxDB-Datenbank mit Tags geschrieben, die den Hostnamen, einen Schnittstellennamen und die entsprechende Warteschlangennummer und den Messwert namens current_buffer_occupancy identifizieren. In Tabelle 1 finden Sie die spezifischen Werte, die in diesem Beispiel verwendet werden.
| Zeitstempel (Sekunden) |
Wert |
Schilder |
|---|---|---|
| 1458704133 |
1547 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
| 1458704143 |
3221 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
| 1458704155 |
4860 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
| 1458704166 |
6550 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
Jeder Messdatenpunkt hat einen Zeitstempel und einen aufgezeichneten Wert. In diesem Beispiel ist das Tag queue_number der numerische Bezeichner der Schnittstellenwarteschlange.
Um diese Daten über 30-Sekunden-Intervalle zu aggregieren, verwenden Sie die folgende influxDB-Abfrage:
select mean(value) from current_buffer_occupancy where time >= $time_start and time <= $time_end and queue_number=’0’ and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s)
Geben Sie für $time_start und $time_endden tatsächlichen Zeitraum an.
Beispiel: Aggregieren von Daten für kumulative Statistiken
Einige Junos Telemetry Interface-Sensoren melden kumulative Zählerwerte, wie z. B. die Anzahl der eingehenden Pakete, definiert als JuniperNetworksSensors.jnpr_interface_ext.interface_stats.ingress_stats.packets.
Es ist üblich, Datenverkehrsraten aus Paket- oder Bytezählern abzuleiten. Anders als bei Messgerätmetriken wird der erste Datenpunkt in der Reihe für kumulative Leistungsindikatoren nur zum Festlegen der Basislinie verwendet.
Verwenden Sie die folgenden Richtlinien, um eine Datenbankabfrage für kumulative Statistiken zu erstellen:
-
Berechnen Sie den kumulierten Wert für ein bestimmtes Zeitintervall. Sie können entweder einen Mittelwert zwischen mehreren Datenpunkten berechnen, die während des Zeitintervalls aufgezeichnet wurden, oder Sie können einen Wert interpolieren. Alle Datenpunkte sollten zur gleichen Reihe gehören. Wenn zwischen den beiden Datenpunkten, die zu unterschiedlichen Zeitpunkten gemeldet wurden, ein Zähler-Reset stattgefunden hat, verwenden Sie nicht beide Datenpunkte.
-
Ermitteln Sie den entsprechenden Wert für das vorherige Zeitintervall. Wenn ein Zähler seit der letzten Aktualisierung zurückgesetzt wurde, deklarieren Sie diesen Wert als nicht verfügbar.
-
Wenn das vorherige Intervall verfügbar ist, berechnen Sie die Differenz zwischen den Datenpunkten und der Datenverkehrsrate.
Diese Richtlinien sind in der folgenden influxDB-Abfrage zusammengefasst. Bei dieser Abfrage wird davon ausgegangen, dass Daten in der Messung ingress_packetsgespeichert sind. Die Abfrage verwendet die gleichen Tags wie das Beispiel für die Messgerätmetrik sowie das Tag für die Initialisierungszeit des Zählers. init_time Die Abfrage verwendet Durchschnittswerte über ein Zeitintervall von 30 Sekunden. Es berechnet die Rate für die Metriken, die dieselbe Zählerinitialisierung haben.
select non_negative_derivative(mean(value)) from ingress_packets
where time >= $time_start and time <= $time_end and
interface_name=’xe-1/0/0’ and host=’sjc-a’
group by time(30s), init_time
Verwenden Sie die folgende Abfrage, um die Anzahl der über einen bestimmten Zeitraum empfangenen Pakete zu berechnen, ohne die Rate abzuleiten.
select difference(mean(value)) from ingress_packets where time >= $time_start and time <= $time_end and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s), init_time
In einigen Fällen wird von der Abfrage mehr als ein aggregierter Datenpunkt für ein bestimmtes Zeitintervall zurückgegeben. Für ein Zeitintervall stehen z.B. vier Datenpunkte zur Verfügung. Zwei Datenpunkte haben init_time t0, und die anderen beiden haben init_time t1. Sie können eine Abfrage ausführen, die das Zeitstempel-Tag der letzten Änderung anstelle von init_timeverwendet, last_changeum die Differenz zu berechnen und die Rate zwischen den beiden Datenpunkten mit demselben Zeitstempel der letzten Änderung abzuleiten.
select difference(mean(value)) from ingress_packets
where time >= $time_start and time <= $time_end and
interface_name=’xe-1/0/0’ and host=’sjc-a’
group by time(30s), last_change
Diese Abfragen können alle als kontinuierliche Abfragen ausgeführt werden und in regelmäßigen Abständen neue Zeitreihenmessungen auffüllen.
Aggregieren von Daten aus mehreren Quellen
Bestimmte Metriken werden von mehreren Linecards oder Paketweiterleitungs-Engines gemeldet. In den folgenden Szenarien ist es sinnvoll, Daten aus verschiedenen Quellen zu aggregieren:
-
Die Anzahl der Pakete und Bytes für Label-Switched Paths (LSPs) wird von jeder Linecard separat gemeldet. Eine Ansicht der LSP-Pfade für das gesamte Gerät ist jedoch für Pfadberechnungselement-Controller erforderlich.
-
Bei Geräten von Juniper Networks, die virtuelle Ausgabewarteschlangen unterstützen, werden die Tail-Drop- oder zufälligen Früherkennungs-Drop-Statistiken für jede Warteschlange von jeder Linecard für jede physische Schnittstelle separat gemeldet. Es ist nützlich, die Statistiken für alle Linecards für eine Schnittstelle aggregieren zu können.
-
Filterzähler für einen Firewall-Filter, der an eine Weiterleitungstabelle oder an eine aggregierte Ethernet-Schnittstelle angeschlossen ist, werden von jeder Linecard separat gemeldet. Es ist sinnvoll, die Statistiken für alle Linecards zu aggregieren.
Um Daten aus mehreren Quellen zu aggregieren, gehen Sie wie folgt vor:
Aggregieren Sie Daten für einen bestimmten Zeitraum für jede Quelle, z. B. für jede Linecard.
Aggregieren Sie die Daten, die Sie in Schritt 1 für jede Quelle ableiten.
Für Daten, die in einer InfluxDB-Datenbank gespeichert sind, können Sie Schritt 1 des Verfahrens abschließen, indem Sie eine kontinuierliche Abfrage ausführen und eine neue Messung auffüllen. Es wird dringend empfohlen, die Datenpunkte nach jeder Quelle zu gruppieren. Für LSP-Statistiken identifiziert z. B. die component_id in der gpb-Nachricht die Linecard, die die Daten sendet. Gruppieren Sie die Datenpunkte basierend auf jeder eindeutigen component_id.
Beispiel: Aggregieren von Daten aus mehreren Quellen
In diesem Beispiel führen Sie zwei Abfragen aus, um die LSP-Paketrate für Daten von allen Linecards abzuleiten.
Zuerst führen Sie die folgende fortlaufende Abfrage für die Messung aus, die für jedes component_id Transponder und das counter_name Transponder benannt istlsp_packet_count. Jedes eindeutige component_id Tag entspricht einer anderen Linecard. Mit dieser Abfrage wird eine neue Messung aufgefüllt,lsp_packet_rate.
select non_negative_derivative(mean(value)) as value from lsp_packet_count into lsp_packet_rate group by time(30s), component_id, counter_name, host
Der LSP-Statistiksensor meldet keine Indikatorinitialisierungszeit.
Verwenden Sie die neue Messung, die aus dieser kontinuierlichen Abfragelsp_packet_count abgeleitet wurde, um die folgende Abfrage auszuführen, die Daten von allen Linecards für Paketraten für einen LSP mit dem Namen lsp-sjc-den-1aggregiert.
select sum(value) from lsp_packet_rate where counter_name=’lsp-sjc-den-1’, host=’sjc-a’
Da diese Abfrage Daten nicht nach dem Tag oder der component_id Linecard gruppiert, werden die LSP-Paketraten von allen Komponenten oder Linecards zurückgegeben.
Aggregieren von Daten für mehrere Metriken
Es kann nützlich sein, Metriken für mehrere Werte zu aggregieren. Bei aggregierten Ethernet-Schnittstellen sollten Sie beispielsweise in der Regel die Paket- und Byteraten für jedes Schnittstellenmitglied sowie die Schnittstellennutzung für die aggregierte Verbindung nachverfolgen.
Beispiel: Aggregieren mehrerer Metrikwerte
In diesem Beispiel führen Sie die folgenden beiden Abfragen aus:
-
Kontinuierliche Abfrage zur Ableitung der Anzahl eingehender Pakete für jeden Mitgliedslink in einer aggregierten Ethernet-Schnittstelle
-
Abfrage zur Aggregation von Paketanzahldaten für alle Mitgliedsverbindungen, die zu derselben aggregierten Ethernet-Schnittstelle gehören
Die folgende kontinuierliche Abfrage leitet eine Messung , ingress_packetsfür jeden Mitgliedslink in einer aggregierten Ethernet-Schnittstelle ab. Das interface_name Tag identifiziert jede Mitgliedsschnittstelle. Sie verwenden das Tag auch, um die parent-ae-name Mitgliedschaft in einer bestimmten aggregierten Ethernet-Schnittstelle zu identifizieren. Durch die Gruppierung jedes Mitgliedslinks mit dem parent-ae-name Tag wird sichergestellt, dass nur Daten für aktuelle Mitgliederlinks erfasst werden. Beispielsweise kann eine Schnittstelle ihre Mitgliedschaft während des Berichtsintervalls ändern. Die Gruppierung von Mitgliederschnittstellen mit der spezifischen aggregierten Ethernet-Schnittstelle bedeutet, dass die Daten für die Mitgliederverbindung nicht an die neue aggregierte Ethernet-Schnittstelle übertragen werden, deren Mitglied sie jetzt ist.
select difference(mean(value)) as value from ingress_packets
into ingress_packets_difference
group by time(30s), component_id, interface_name, host, parent-ae-name
Die folgende Abfrage aggregiert Daten für die Eingangspakete für die aggregierte Ethernet-Schnittstelle, d. h. alle Mitgliedsverbindungen.
select sum(value) from ingress_packets_difference
where parent-ae-name=’ae0’ and host=’sjc-a’
Diese Abfrage aggregiert Daten für die aggregierte Ethernet-Schnittstelle ae0. Das parent-ae-name Tag überprüft nicht die tatsächlichen Mitgliederlinks.