Définition de vues pour les tables opérationnelles Junos PyEZ qui analysent les sorties non structurées
Tables opérationnelles (op) Junos PyEZ pour sortie non structurée extraient des données de la sortie texte d’une commande CLI exécutée sur un équipement Junos ou d’une commande vty exécutée sur un concentrateur PIC flexible (FPC) donné. Une table est associée à une vue, qui est utilisée pour accéder aux champs des éléments de table et les mapper à des variables Python définies par l’utilisateur. Vous associez une table à une vue particulière en incluant la view propriété dans la définition de la table, qui prend le nom de la vue comme argument.
Une vue mappe vos variables définies par l’utilisateur aux données des éléments de table sélectionnés. Une vue vous permet d’accéder à des champs spécifiques dans la sortie en tant que variables avec des propriétés qui peuvent être manipulées en Python. Junos PyEZ gère l’extraction des données en Python ainsi que toute conversion de type ou normalisation des données. Les clés définies dans la vue doivent être des noms de variables Python valides.
Cette rubrique traite des différents composants de la vue.
Récapitulatif des paramètres dans les vues pour l’analyse de la sortie non structurée
Les vues Junos PyEZ, comme les tableaux, sont mises en forme à l’aide de YAML. Les vues qui analysent une sortie non structurée peuvent inclure un certain nombre de paramètres, qui sont résumés dans le tableau 1.
Paramètre d’affichage |
Description |
|---|---|
Nom de la vue |
Identificateur défini par l’utilisateur pour la vue. |
|
(Facultatif) Liste des titres de colonne dans la sortie de la commande. |
|
(Facultatif) Tableau associatif, ou dictionnaire, d’une ou plusieurs paires clé-valeur qui mappent une clé définie par l’utilisateur à une chaîne contenant une expression mathématique. Pour chaque itération des données, l’expression est évaluée à l’aide de la fonction Python |
|
(Facultatif) Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappent une clé définie par l’utilisateur à une chaîne. Si la chaîne est présente dans la sortie, la variable est définie sur True, sinon, la variable est définie sur False. |
|
(Facultatif) Tableau associatif, ou dictionnaire, de paires clé-valeur qui mappent une clé définie par l’utilisateur au nom d’une table imbriquée qui analyse une section spécifique de la sortie de la commande. |
|
(Facultatif) Liste d’une ou plusieurs clés définies sous |
|
(Facultatif) Liste d’expressions régulières pour correspondre au contenu souhaité. |
Nom de la vue
Le nom de la vue est un identificateur défini par l’utilisateur pour la vue. Vous associez une table à une vue particulière en incluant la propriété dans la définition de table view et en fournissant le nom de la vue comme argument.
L’exemple suivant définit une vue nommée ChassisFanView, qui est référencée par le paramètre Table view :
---
ChassisFanTable:
command: show chassis fan
key: fan-name
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
Colonnes
Vous pouvez utiliser le columns paramètre dans une vue pour extraire et analyser la sortie de commande mise en forme en lignes et en colonnes.
Considérez la sortie de commande suivante show ospf neighbor :
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
Pour extraire les données, incluez le columns paramètre dans la vue et mappez le nom de votre variable Python au nom de la colonne. L’application stocke la clé et la valeur extraites de la sortie de la commande pour cette colonne sous la forme d’une paire clé-valeur dans le dictionnaire de l’élément donné.
La vue suivante extrait les données de chaque colonne de la sortie de la show ospf neighbor commande :
---
OspfNeighborTable:
command: show ospf neighbor
key: Address
view: OspfNeighborView
OspfNeighborView:
columns:
neighbor_address: Address
interface: Interface
neighbor_state: State
neighbor_id: ID
neighbor_priority: Pri
activity_timer: Dead
Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, les données de chaque voisin incluent les clés de colonne et les données correspondantes.
from jnpr.junos import Device
from jnpr.junos.command.ospf_neighbor import OspfNeighborTable
from pprint import pprint
import json
with Device(host='router1.example.com') as dev:
stats = OspfNeighborTable(dev)
stats.get()
pprint(json.loads(stats.to_json()))
user@host:~$ python3 junos-pyez-ospf-neighbors.py
{'198.51.100.2': {'activity_timer': 39,
'interface': 'ge-0/0/0.0',
'neighbor_address': '198.51.100.2',
'neighbor_id': '192.168.0.2',
'neighbor_priority': 128,
'neighbor_state': 'Full'},
'198.51.100.6': {'activity_timer': 36,
'interface': 'ge-0/0/1.0',
'neighbor_address': '198.51.100.6',
'neighbor_id': '192.168.0.3',
'neighbor_priority': 128,
'neighbor_state': 'Full'}}
Pour filtrer les données afin d’inclure uniquement les données des colonnes sélectionnées, incluez le filters paramètre dans la vue. Pour plus d’informations, reportez-vous à la section Filtres.
Certaines sorties de commandes incluent des titres de colonnes qui s’étendent sur plusieurs lignes, par exemple :
FI interrupt statistics
-----------------------
--------------------------------------------------------------------------------
Stream Total RLIM Total Cell timeout Total Reorder Total cell Total number
request PT/MALLOC Ignored cell timeout drops in of times
counter Usemeter errors secure mode entered into
saturation Drops secure mode
--------------------------------------------------------------------------------
36 0 0 1 1 0 0
128 0 0 1 49 0 0
142 0 0 1 53 0 0
--------------------------------------------------------------------------------
...
Pour définir un titre de colonne multiligne dans une vue, définissez l’élément clé de colonne sur une liste de mots dans chaque ligne pour ce titre. La vue suivante définit les colonnes de la sortie de la commande précédente :
CChipFiStatsTable:
command: show mqss {{ chip_instance }} fi interrupt-stats
target: fpc8
args:
chip_instance: 0
key: Stream
view: CChipFiStatsView
CChipFiStatsView:
columns:
stream: Stream
req_sat:
- Total RLIM
- request
- counter
- saturation
cchip_fi_malloc_drops:
- Total
- PT/MALLOC
- Usemeter
- Drops
cell_timeout_ignored:
- Cell timeout
- Ignored
cchip_fi_cell_timeout:
- Total Reorder
- cell timeout
- errors
drops_in_secure:
- Total cell
- drops in
- secure mode
times_in_secure:
- Total number
- of times
- entered into
- secure mode
Expression d’évaluation (eval)
Vous pouvez utiliser le paramètre facultatif eval pour ajouter ou modifier des paires clé-valeur dans les données finales renvoyées par la table et la vue. Le eval paramètre mappe un nom de clé à une chaîne contenant une expression mathématique qui est évaluée par la fonction Python eval . Vous pouvez inclure le paramètre dans les tables et les eval vues, et eval vous pouvez définir et calculer plusieurs valeurs.
Lorsque vous l’utilisez eval dans une table, elle fait référence au dictionnaire de données complet pour le calcul, et la clé et la valeur calculée sont ajoutées en tant qu’élément supplémentaire unique au dictionnaire. Lorsque vous l’utilisez eval dans une vue, l’expression est calculée à chaque itération des données et la valeur calculée est ajoutée aux données de cette itération. Si le nom de la eval clé correspond à une clé définie dans la vue, eval remplace la valeur de cette clé par la valeur calculée. Si le nom de la eval clé ne correspond pas à une clé définie dans la vue, eval ajoute la nouvelle clé et la nouvelle valeur calculée aux données.
L’expression eval peut faire référence au data dictionnaire renvoyé par la vue. L’expression doit être référencée data à l’aide d’une variable de modèle Jinja, afin que Junos PyEZ puisse remplacer la variable par le dictionnaire lors de l’évaluation de l’expression.
L’exemple suivant est utilisé eval dans la définition de la vue. L’entrée cpu modifie la valeur existante du cpu champ pour chaque élément du dictionnaire de données, et l’entrée max crée une nouvelle paire clé-valeur pour chaque élément du dictionnaire de données.
---
FPCThread:
command: show threads
target: Null
key: Name
view: FPCThreadView
FPCThreadView:
columns:
pid-pr: PID PR
state: State
name: Name
stack: Stack Use
time: Time (Last/Max/Total)
cpu: cpu
eval:
cpu: "'{{ cpu }}'[:-1]"
max: "('{{ time }}'.split('/'))[1]"
Considérez l’exemple de sortie suivant pour la show threads commande vty :
PID PR State Name Stack Use Time (Last/Max/Total) cpu --- -- ------- --------------------- --------- --------------------- 1 H asleep Maintenance 680/32768 0/5/5 ms 0% 2 L running Idle 1452/32768 0/22/565623960 ms 80% 3 H asleep Timer Services 1452/32768 0/7/1966 ms 0% ...
Le paramètre View eval modifie chaque cpu entrée pour omettre le signe de pourcentage (%). Par conséquent, les données incluent « 0 » au lieu de « 0 % ». De plus, il ajoute une nouvelle clé, max, et sa valeur calculée pour chaque élément.
'Maintenance': {'cpu': '0',
'max': '5',
'name': 'Maintenance',
'pid-pr': '1 H',
'stack': '680/32768',
'state': 'asleep',
'time': '0/5/5 ms'},
'Timer Services': {'cpu': '0',
'max': '7',
'name': 'Timer Services',
'pid-pr': '3 H',
'stack': '1452/32768',
'state': 'asleep',
'time': '0/7/1966 ms'},
...
Pour obtenir des exemples d’utilisation eval dans la définition de table, reportez-vous à la section Expression d’évaluation (évaluation).
Existe
Vous pouvez utiliser le paramètre facultatif exists dans une vue pour indiquer si une chaîne est présente dans la sortie de la commande. exists est un dictionnaire de paires clé-valeur qui mappent un nom de variable Python défini par l’utilisateur à la chaîne à faire correspondre dans la sortie de la commande. Si la chaîne est présente dans la sortie, la variable prend la valeur True. Dans le cas contraire, la variable prend la valeur False.
Considérez la sortie de la show host_loopback status-summary commande vty.
SENT: Ukern command: show host_loopback status-summary Host Loopback Toolkit Status Summary: No detected wedges No toolkit errors
Le tableau suivant définit exists pour tester si la sortie de la commande inclut une No detected wedges chaîne ou une No toolkit errors chaîne :
---
HostlbStatusSummaryTable:
command: show host_loopback status-summary
target: fpc1
view: HostlbStatusSummaryView
HostlbStatusSummaryView:
exists:
no_detected_wedges: No detected wedges
no_toolkit_errors: No toolkit errors
Lorsque vous utilisez la table et la vue pour rechercher les chaînes et imprimer les valeurs résultantes dans votre application Junos PyEZ, les deux variables sont définies sur True dans ce cas.
{'no_detected_wedges': True, 'no_toolkit_errors': True}
Champs
La sortie de la commande peut être longue et complexe, et vous aurez peut-être besoin d’une logique différente pour analyser différentes sections de la sortie. Dans certains cas, vous ne pouvez pas analyser correctement la sortie de la commande à l’aide d’une seule table et d’une seule vue. Pour analyser ce type de sortie, vous pouvez inclure le paramètre facultatif fields dans la vue. fields est un dictionnaire de paires clé-valeur qui mappe une clé définie par l’utilisateur au nom d’une table imbriquée qui sélectionne une section spécifique de la sortie de la commande. Chaque table imbriquée peut référencer sa propre vue, qui est utilisée pour analyser les données sélectionnées par cette table.
Considérons la sortie de la show xmchip 0 pt stats commande vty, qui comporte deux sections de données différentes :
SENT: Ukern command: show xmchip 0 pt stats WAN PT statistics (Index 0) --------------------------- PCT entries used by all WI-1 streams : 0 PCT entries used by all WI-0 streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all WI-1 streams : 0 CPT entries used by all WI-0 streams : 0 CPT entries used by all LI streams : 0 Fabric PT statistics (Index 1) ------------------------------ PCT entries used by all FI streams : 0 PCT entries used by all WI (Unused) streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all FI streams : 0 CPT entries used by all WI (Unused) streams : 0 CPT entries used by all LI streams : 0
La vue suivante XMChipStatsView utilise le fields paramètre pour définir deux tables supplémentaires, qui sont utilisées pour analyser les deux sections différentes de la sortie de la commande. Les _WANPTStatTable tables et _FabricPTStatTable extraient les données des sections et WAN PT statistics , Fabric PT statistics respectivement. Dans ce cas, les tables utilisent le delimiter paramètre pour extraire et fractionner les données, de sorte qu’elles n’ont pas besoin de référencer une vue distincte.
XMChipStatsTable:
command: show xmchip 0 pt stats
target: fpc1
view: XMChipStatsView
XMChipStatsView:
fields:
wan_pt_stats: _WANPTStatTable
fabric_pt_stats: _FabricPTStatTable
_WANPTStatTable:
title: WAN PT statistics (Index 0)
delimiter: ":"
_FabricPTStatTable:
title: Fabric PT statistics (Index 1)
delimiter: ":"
Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque clé définie sous fields contient les données sélectionnées et analysées par la table correspondante.
{'fabric_pt_stats': {'CPT entries used by all FI streams': 0,
'CPT entries used by all LI streams': 0,
'CPT entries used by all WI (Unused) streams': 0,
'CPT entries used by all multicast packets': 0,
'PCT entries used by all FI streams': 0,
'PCT entries used by all LI streams': 0,
'PCT entries used by all WI (Unused) streams': 0},
'wan_pt_stats': {'CPT entries used by all LI streams': 0,
'CPT entries used by all WI-0 streams': 0,
'CPT entries used by all WI-1 streams': 0,
'CPT entries used by all multicast packets': 0,
'PCT entries used by all LI streams': 0,
'PCT entries used by all WI-0 streams': 0,
'PCT entries used by all WI-1 streams': 0}}
Comme autre exemple, considérez la sortie de la show ttp statistics commande vty :
TTP Statistics:
Receive Transmit
---------- ----------
L2 Packets 4292 1093544
L3 Packets 542638 0
Drops 0 0
Netwk Fail 0 0
Queue Drops 0 0
Unknown 0 0
Coalesce 0 0
Coalesce Fail 0 0
TTP Transmit Statistics:
Queue 0 Queue 1 Queue 2 Queue 3
---------- ---------- ---------- ----------
L2 Packets 1093544 0 0 0
L3 Packets 0 0 0 0
TTP Receive Statistics:
Control High Medium Low Discard
---------- ---------- ---------- ---------- ----------
L2 Packets 0 0 4292 0 0
L3 Packets 0 539172 3466 0 0
Drops 0 0 0 0 0
Queue Drops 0 0 0 0 0
Unknown 0 0 0 0 0
Coalesce 0 0 0 0 0
Coalesce Fail 0 0 0 0 0
TTP Receive Queue Sizes:
Control Plane : 0 (max is 4473)
High : 0 (max is 4473)
Medium : 0 (max is 4473)
Low : 0 (max is 2236)
TTP Transmit Queue Size: 0 (max is 6710)
La FPCTTPStatsView vue utilise le fields paramètre pour référencer plusieurs tables imbriquées, qui extraient les données dans les différentes sections de la sortie. Chaque table fait référence à sa propre vue ou utilise le delimiter paramètre pour analyser les données de cette section.
---
FPCTTPStatsTable:
command: show ttp statistics
target: fpc2
view: FPCTTPStatsView
FPCTTPStatsView:
fields:
TTPStatistics: _FPCTTPStatisticsTable
TTPTransmitStatistics: _FPCTTPTransmitStatisticsTable
TTPReceiveStatistics: _FPCTTPReceiveStatisticsTable
TTPQueueSizes: _FPCTTPQueueSizesTable
_FPCTTPStatisticsTable:
title: TTP Statistics
view: _FPCTTPStatisticsView
_FPCTTPStatisticsView:
columns:
rcvd: Receive
tras: Transmit
_FPCTTPTransmitStatisticsTable:
title: TTP Transmit Statistics
view: _FPCTTPTransmitStatisticsView
_FPCTTPTransmitStatisticsView:
columns:
queue0: Queue 0
queue1: Queue 1
queue2: Queue 2
queue3: Queue 3
filters:
- queue2
_FPCTTPReceiveStatisticsTable:
title: TTP Receive Statistics
key: name
key_items:
- Coalesce
view: _FPCTTPReceiveStatisticsView
_FPCTTPReceiveStatisticsView:
columns:
control: Control
high: High
medium: Medium
low: Low
discard: Discard
_FPCTTPQueueSizesTable:
title: TTP Receive Queue Sizes
delimiter: ":"
Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, chaque fields clé contient les données qui ont été extraites et analysées par la table correspondante.
{'TTPQueueSizes': {'Control Plane': '0 (max is 4473)',
'High': '0 (max is 4473)',
'Low': '0 (max is 2236)',
'Medium': '0 (max is 4473)'},
'TTPReceiveStatistics': {'Coalesce': {'control': 0,
'discard': 0,
'high': 0,
'low': 0,
'medium': 0,
'name': 'Coalesce'}},
'TTPStatistics': {'Coalesce': {'name': 'Coalesce', 'rcvd': 0, 'tras': 0},
'Coalesce Fail': {'name': 'Coalesce Fail',
'rcvd': 0,
'tras': 0},
'Drops': {'name': 'Drops', 'rcvd': 0, 'tras': 0},
'L2 Packets': {'name': 'L2 Packets',
'rcvd': 4292,
'tras': 1093544},
'L3 Packets': {'name': 'L3 Packets',
'rcvd': 542638,
'tras': 0},
'Netwk Fail': {'name': 'Netwk Fail',
'rcvd': 0,
'tras': 173},
'Queue Drops': {'name': 'Queue Drops',
'rcvd': 0,
'tras': 0},
'Unknown': {'name': 'Unknown', 'rcvd': 0, 'tras': 0}},
'TTPTransmitStatistics': {'L2 Packets': {'queue2': 0},
'L3 Packets': {'queue2': 0}}}
Filtres
Le columns paramètre extrait les données de la sortie de la commande qui sont mises en forme dans des lignes et des colonnes. Lorsque vous incluez le columns paramètre dans une vue, vous pouvez éventuellement l’inclure filters pour filtrer les données de colonne incluses dans la sortie finale. Le filters paramètre définit une liste d’une ou plusieurs clés définies sous columns. Le dernier ensemble de données comprend uniquement les données des colonnes sélectionnées. Vous pouvez fournir des filtres par défaut dans la définition de la vue, et vous pouvez également définir ou remplacer des valeurs de filtre dans l’application Junos PyEZ.
Considérez la sortie de la show ospf neighbor commande :
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
Dans la vue suivante, le columns paramètre définit des clés pour toutes les colonnes de la sortie de commande correspondante, mais le filters paramètre inclut uniquement les données des colonnes et Address State dans le dictionnaire de données.
---
OspfNeighborFiltersTable:
command: show ospf neighbor
key: Address
view: OspfNeighborFiltersView
OspfNeighborFiltersView:
columns:
neighbor_address: Address
interface: Interface
neighbor_state: State
neighbor_id: ID
neighbor_priority: Pri
activity_timer: Dead
filters:
- neighbor_address
- neighbor_state
Le code Junos PyEZ suivant appelle get() d’abord sans aucun argument, ce qui récupère les données à l’aide de la liste par défaut de filtres définie dans la vue. Le deuxième appel à get() inclut l’argument filters , qui remplace la liste de filtres définie dans la vue.
from jnpr.junos import Device
from Tables.show_ospf_neighbor_filter import OspfNeighborFiltersTable
from pprint import pprint
import json
with Device(host='router1.example.com') as dev:
stats = OspfNeighborFiltersTable(dev)
stats.get()
pprint(json.loads(stats.to_json()))
print('\n')
stats.get(filters=['neighbor_address', 'neighbor_id', 'neighbor_state'])
pprint(json.loads(stats.to_json()))
Lorsque vous exécutez l’application, le premier appel à get() utilise les filtres définis dans la vue, et le deuxième appel utilise les filtres définis dans l’appel, qui remplacent ceux définis dans la vue.
user@host:~$ python3 junos-pyez-ospf-filters.py
{'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_state': 'Full'},
'198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_state': 'Full'}}
{'198.51.100.2': {'neighbor_address': '198.51.100.2',
'neighbor_id': '192.168.0.2',
'neighbor_state': 'Full'},
'198.51.100.6': {'neighbor_address': '198.51.100.6',
'neighbor_id': '192.168.0.3',
'neighbor_state': 'Full'}}
Regex
Vous pouvez utiliser le paramètre facultatif regex d’une vue pour faire correspondre et extraire des champs spécifiques dans la sortie de la commande. regex est un dictionnaire qui mappe des clés à des expressions régulières. Si la table correspondante ne définit item: '*'pas , Junos PyEZ combine les expressions régulières et fait correspondre le résultat à chaque ligne de sortie. Toutefois, si la table définit item: '*' l’extraction des données sous la forme d’une seule chaîne de texte, Junos PyEZ compare chaque expression régulière individuelle à la chaîne de texte entière.
Le groupe de capture défini dans l’expression régulière détermine les données extraites du champ et stockées dans le dictionnaire de données. Si vous définissez un groupe de capture, seule la valeur de ce groupe est stockée dans les données. Dans le cas contraire, Junos PyEZ stocke la valeur qui correspond à l’expression complète. Par exemple, (d+.d+) récupère et stocke une valeur flottante à partir de l’expression de recherche de chaîne, alors que (d+).d+ ne stocke que la partie entière des données. Si vous définissez plusieurs groupes, seule la valeur du premier groupe est stockée.
Junos PyEZ utilise le pyparsing module pour définir un certain nombre de mots-clés intégrés que vous pouvez utiliser à la place d’une expression régulière. Le tableau 2 répertorie le mot-clé, une brève description et l’expression correspondante, où pp est dérivé de import pyparsing as pp.
Mot-clé |
Description |
Expression |
|---|---|---|
|
Mot ne contenant que des caractères hexadécimaux |
hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
& pp.OneOrMore(pp.Word('abcdefABCDEF', min=1)) |
|
Mot constitué d’un entier ou d’un nombre à virgule flottante |
numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i)) |
|
Mot composé de chiffres et d’un signe de pourcentage à la fin (%) |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
Un ou plusieurs mots composés de caractères imprimables (tous les caractères autres que des espaces) |
printables = pp.OneOrMore(pp.Word(pp.printables)) |
|
Mot composé de caractères alphabétiques ou alphanumériques |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
Une ou plusieurs |
words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i)) |
Considérez la sortie de commande suivante show icmp statistics . Chaque section de sortie est sous un titre de section spécifique, et les données se composent d’un nombre et d’un ou plusieurs mots.
ICMP Statistics:
0 requests
0 throttled
0 network unreachables
0 ttl expired
0 redirects
0 mtu exceeded
0 source route denials
0 filter prohibited
0 other unreachables
0 parameter problems
0 ttl captured
0 icmp/option handoffs
0 igmp v1 handoffs
0 tag te requests
0 tag te to RE
ICMP Errors:
0 unknown unreachables
0 unsupported ICMP type
0 unprocessed redirects
0 invalid ICMP type
0 invalid protocol
0 bad input interface
0 bad route lookup
0 bad nh lookup
0 bad cf mtu
0 runts
ICMP Discards:
0 multicasts
0 bad source addresses
0 bad dest addresses
0 IP fragments
0 ICMP errors
0 unknown originators
ICMP Debug Messages:
0 throttled
ICMP Rate Limit Settings:
500 pps per iff
1000 pps total
Pour analyser la sortie précédente, la vue principale définit fields, qui fait référence à des tables et des vues imbriquées qui analysent chaque section de la sortie. Les vues imbriquées définissent le regex paramètre à faire correspondre aux données extraites par la table correspondante.
---
ICMPStatsTable:
command: show icmp statistics
target: fpc1
view: ICMPStatsView
ICMPStatsView:
fields:
discards: _ICMPDiscardsTable
errors: _ICMPErrorsTable
rate: _ICMPRateTable
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
_ICMPErrorsTable:
title: ICMP Errors
key: name
view: _ICMPErrorsView
_ICMPErrorsView:
regex:
error: numbers
name: words
_ICMPRateTable:
title: ICMP Rate Limit Settings
key: name
view: _ICMPRateView
_ICMPRateView:
regex:
rate: numbers
name: words
Par exemple, la _ICMPDiscardsTable table sélectionne les données sous la ICMP Discards section de la sortie de la commande. La _ICMPDiscardsView vue définit deux clés, value et name, qui correspondent à des expressions régulières. value correspond à un ou plusieurs chiffres et name correspond à un ou plusieurs mots. Étant donné que la table ne définit item: '*'pas , les expressions régulières sont combinées et mises en correspondance avec chaque ligne de données de cette section.
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
Le _ICMPErrorsTable tableau sélectionne les données sous la ICMP Errors section de la sortie de la commande. La _ICMPErrorsView vue définit les error clés et name et utilise les mots-clés numbers intégrés et words à la place de la définition explicite des expressions régulières.
_ICMPErrorsTable:
title: ICMP Errors
key: name
view: _ICMPErrorsView
_ICMPErrorsView:
regex:
error: numbers
name: words
Si la table définit item: '*', les données extraites sont considérées comme une chaîne de texte. Dans ce cas, chaque expression régulière de la vue correspondante correspond à la chaîne entière.
Prenons l’exemple de la sortie de la show ithrottle id 0 commande.
SENT: Ukern command: show ithrottle id 0
ID Usage % Cfg State Oper State Name
-- ------- --------- ---------- --------
0 50.0 1 1 TOE ithrottle
Throttle Times: In hptime ticks In ms
--------------- ------
Timer Interval 333333 5.000
Allowed time 166666 2.500
Allowed excess 8333 0.125
Start time 488655082 n/a
Run time this interval 0 0.000
Deficit 0 0.000
Run time max 17712 0.266
Run time total 144154525761 2162317
Min Usage Perc: 25.0
Max Usage Perc: 50.0
AdjustUsageEnable: 1
Throttle Stats:
Starts : 65708652
Stops : 65708652
Checks : 124149442
Enables : 0
Disables : 0
AdjUp : 6
AdjDown : 4
Le tableau suivant permet item: '*' d’extraire les données sous la forme d’une seule chaîne. Le paramètre View regex définit trois expressions régulières. Chaque motif d’expression régulière est mis en correspondance avec la chaîne entière. Étant donné que les expressions régulières définissent la capture de groupes, Junos PyEZ stocke uniquement les données qui correspondent au groupe.
IthrottleIDTable:
command: show ithrottle id {{ id }}
args:
id: 0
item: '*'
target: fpc1
view: IthrottleIDView
IthrottleIDView:
regex:
min_usage: 'Min Usage Perc: (\d+\.\d+)'
max_usage: 'Max Usage Perc: (\d+\.\d+)'
usg_enable: 'AdjustUsageEnable: (\d)'
fields:
throttle_stats: _ThrottleStatsTable
_ThrottleStatsTable:
title: Throttle Stats
delimiter: ":"
Lorsque vous récupérez et imprimez les données dans l’application Junos PyEZ, les données incluent les trois regex éléments, qui contiennent la valeur correspondante par le groupe de capture pour cette expression.
{'max_usage': 50.0,
'min_usage': 25.0,
'throttle_stats': {'AdjDown': 4,
'AdjUp': 6,
'Checks': 124149442,
'Disables': 0,
'Enables': 0,
'Starts': 65708652,
'Stops': 65708652},
'usg_enable': 1}