Bonjour à tous,
Dans ce post, nous allons voir deux nouvelles variantes du framework NAE d'ArubaOS-CX, dont nous avons déjà discuté, et qui se nomment tout simplement : NAE Lite.
NAE Lite, qui est arrivé avec la version 10.08 d'ArubaOS-CX, va nous permettre de pouvoir mettre en place des agents NAE en utilisant la CLI de l'Operating System, et donc sans avoir à developper une quelconque script sous jacent.
Les principes sont donc les suivants :
- NAE Lite permet aux administrateurs de pouvoir créer des agents NAE pour monitorer des évènements sur l'équipements, sans avoir besoin de programmer des scripts Python.
- Il devient donc possible de créer ces agents directement via la CLI d'ArubaOS-CX, sans avoir à importer des fichiers externes.
- La déclaration des agents NAE Lite et NAE Watch fait partie intégrante de la configuration de l'équipement - Il devient facile de faire des copier/coller entre équipements, ou de les intégrer à un template de configuration, sans avoir à s'appuyer sur base64.
- Les agents NAE Lite offrent tout de même les capacités suivantes :
- Monitoring d'une ressource de l'équipement
- Validation qu'une condition a été rencontrée ou franchit
- Execution d'actions
- Page Web de l'agent au travers de la WebUI de l'équipement
- REST API pour récupérer les données par une solution tierce.
Lorsque l'élément à monitorer est déclaré, il est bien entendu possible de créer des conditions, qui permettront de pouvoir déclencher des actions, tout comme un Agent NAE "legacy".
Et c'est donc tout cela que nous allons voir, au travers de quelques exemples.
Création
Première approche et éléments communs
Un agent NAE Lite peut prendre en compte 2 types principaux d'éléments :
- Monitorer les ressources systemes, au travers de la notion de "monitor"
- Monitorer n'importe quel évènement de l'équipement, au travers d'un Event ID.
Il est à noter qu'un agent NAE Lite est exclusif, et ne peut prendre en compte ces 2 types d'éléments en même temps.
Lors de la création d'un agent, il est possible, en plus des aspects monitoring, conditions et actions, de spécifier :
- Une description
- Un ou des Tags
Le monitoring des ressources
Agent NAE Lite avec "monitor"
La notion de "monitor" permet de monitorer les ressources suivantes, en fonction de la plateforme :
Aruba 8400/6400
system {cpu | memory} {management-module | line-module} <SLOT-ID>
system storage {nos | security | coredump | logs | selftest} management-module <SLOT-ID>
system storage coredump line-module <SLOT-ID>
Aruba 6200/6300
system {cpu | memory} vsf member <MEMBER-ID>
system storage {nos | security | coredump | logs | selftest} vsf member <MEMBER-ID>
Aruba 8320/8325/8360/10000 :
system {cpu | memory}
system storage {nos | security | coredump |logs | selftest}
Il est possible de grouper les valeurs, de manière par exemple à obtenir une moyenne sur une période donnée, en utilisant les capacités suivantes :
group-by {count | sum | min | max | average}
over {seconds | minutes | hours | days} <DURATION>
rate over {seconds | minutes | hours | days} <DURATION>
Ce qui, dans l'ensemble, peut nous donner, par exemple :
## Monitoring CPU standard
switch(config-nae-agent)# monitor sys_cpu resource system cpu
## Monitoring CPU du membre VSF 1
switch(config-nae-agent)# monitor sys_cpu resource system cpu vsf member 1
## Monitoring CPU avec clacul de la moyenne sur les 30 dernières minutes
switch(config-nae-agent)# monitor avg_sys_cpu resource system cpu group-by average over minutes 30
Agent NAE Lite avec "monitor" - Les conditions
Afin de declarer les conditions de déclenchement des actions basées sur les monitors, nous disposons des éléments suivants :
## Création de la condition.
switch(config-nae-agent)# set-condition monitor <nom_du_monitor>
Avec les options suivantes :
##Permet de spécifier la valeur déclenchant la conditions, en utilisant, si besoin, des notions de comparaison et de durée.
{lt|le|eq|ne|gt|ge} <VALUE> [for <Duration>]
## Permet de specifier un changement de valeur d'une chaine de caractère.
transition from <Strings> to <Strings>
Ce qui peut nous donner, par exemple :
## Déclenchement de l'action si la mémoire dépasse 70%
Switch(config-nae-agent-condition)#set-condition monitor average_mem gt 70
## Déclenchement de l'action si la CPU dépasse 70% durant 30 minutes
Switch(config-nae-agent-condition)#set-condition monitor cpu gt 70 for minutes 30
## Déclenchement de l'action si la line card passe d'un état «ready» à «down» ou «error»
Switch(config-nae-agent-condition)#set-condition monitor line_mdl_state transition from "ready" to "down","error"
Comme pour les agents NAE « legacy », nous disposons de la capacité « clear condition », qui permet de modifier l'état de l'agent en fonction d'un retour à la normal par exemple.
Par exemple :
Switch(config-nae-agent-condition)#clear-condition monitor cpu lt 30 for minutes 30
Switch(config-nae-agent-condition)#clear-condition monitor line_mdl_state transition from "down","error" to "ready"
Agent NAE Lite avec "watch" - Les Event IDs
Contrairement à un agent NAE Lite avec monitors, il n'y pas de différence de capacités en fonction de la plateforme. Puisque nous utilisons la notion d'Event ID, la différence se fait naturellement.
Il sera en effet impossible de pouvoir monitorer un Event ID lié à UBT sur un 8325, et inversement un Event ID lié à VSX sur 6200.
En gardant ceci en tête, le monitoring d'un agent NAE Watch se met tout simplement en place de la manière suivante :
switch(config-nae-agent)# watch <WATCH-NAME> event-log <EVENT-ID-LIST>
Par exemple :
## Monitoring de l'Event ID 1201
Switch(config-nae-agent)#watch crash_event event-log 1201
Afin de pouvoir identifié le bon Event ID qui correspond à votre cas d'utilisation, vous pouvez vous référer à :
- Le résultat de la commande "show events" - Par exemple :
2022-06-30T22:37:32.912039+02:00 Switch tunnelednode[4865]: Event|
9734|LOG_INFO|UKWN|1|Operational state of untrusted zone is UP.
- Le document "Event Log Message Reference Guide", disponible sur le site du support Aruba.
Agent NAE Lite avec "watch" - Les conditions
Afin de declarer les conditions de déclenchement des actions, nous disposons des éléments suivants :
## Création de la condition.
switch(config-nae-agent)# set-condition watch event-log <nom_du_watch>
Avec les options suivantes :
## Indique que l'action est déclenchée dès que l'event ID est rencontré.
<cr>
## Permet de spécifier la chaîne de caractères qui être rencontrée. Si plusieurs chaînes de cractères sont spécifiées, alors « all » indique qu'elles doivent toutes être présentes dans le message, et « any » indique qu'une seule d'elles doit être rencontrée dans le message
include {all | any} <REGEX-LIST>
## Permet de spécifier la ou les chaînes de caractères qui NE DOIVENT PAS être rencontrées.
Exclude <REGEX-LIST>
## Indique le nombre de fois que l'Event ID doit être rencontré avant de déclencher l'action.
count <XX>
Ce qui peut nous donner, par exemple :
## La condition est déclenchée si l'Event ID déclaré dans le watch "ipsla_status" inclut les chaînes de caractères "servername" et "failure"
switch(config-nae-agent-condition)# set-condition watch event-log ipsla_status include all "servername","failure"
## La condition est déclenchée si l'Event ID déclaré dans le watch "crash_event" ne contient pas le mot "snmpd"
switch(config-nae-agent-condition)# set-condition watch event-log crash_event exclude snmpd
## La condition est déclenchée si l'Event ID déclaré dans le watch "ipsla_status" inclut les chaînes de caractères "servername" et "failure" et intervient 3 fois.
switch(config-nae-agent-condition)# set-condition watch event-log ipsla_status include all "servername","failure" count 3
Comme pour les agents NAE Lite et « Legacy », la notion de clear condition est également présente :
switch(config-nae-agent-condition)# clear-condition watch ipsla_status include all "servername","success"
Les actions disponibles
Les capacités d'actions sont identiques entre agent NAE Liste basé sur un monitor ou sur un watch :
## Permet de specifier le status de l'agent que la condition est rencontrée et déclenchée
Status {normal | minor | major | critical}
## Permet de créer un message syslog personnalisé, ainsi que la source du message syslog (« facility »), et le niveau de sévérité du message (« severity »)
syslog <MESSAGE> [facility {kern | user | mail | daemon | auth | syslog | lpr | uucp | authpriv | cron | ftp}] [severity {debug | info | notice | warning | err | crit | alert | emer}]
## Permet de spécifier une ligne de commande à exécuter. Plusieurs commandes peuvent être exécuter en utilisant le séparateur « /n ».
cli <COMMANDS>
Par exemple :
switch(config-nae-agent-condition)# status major
switch(config-nae-agent-condition)# syslog "IPSLA server1 is down" severity err
switch(config-nae-agent-condition)# cli show version\nshow image
Mise en place
Maintenant que nous avons les briques principales, comment met-on cela en place ?
Comme évoqué précédemment, NAE Lite et NAE Watch sont accessibles et configurables via la CLI d'ArubaOS-CX. Nous disposons donc maintenant d'un ensemble de commandes disponibles pour tout configurer, rendant ainsi très simple la mise en place de ce type de solution :
Switch(config)# nae-agent
SCRIPT_NAME Name of an existing script run by the agent
lite Configure an NAE-Lite agent
Switch(config)# nae-agent lite New_Agent
Switch(config-nae-agent)#
desc Configure NAE agent description
disable Disable the NAE agent
end End current mode and change to enable mode.
exit Exit current mode and change to previous mode
help Description of the interactive help system
list Print command list
monitor Configure the monitor used by the NAE agent
no Negate a command or set its defaults
set-condition Configure desired system condition
show Show running system information
tags Configure tags associated with the NAE agent
watch Configure watch source used by the NAE agent
Exemple d'un agent NAE Lite avec monitor
Nous allons dans cet exemple créer un agent basé sur le monitoring de la CPU.
## Nous créons notre agent « cpu_monitor »
Switch(config)# nae-agent lite cpu_monitor
## Nous lui affectons une description
Switch(config-nae-agent)# desc System CPU monitoring
## Nous créons le monitor, qui va spécifiauement monitorer la CPU de l'équipement
Switch(config-nae-agent)# monitor cpu_monitor resource system cpu
## Nous créons notre condition, qui indique que nous déclencherons une ou des actions que la valeur retournée par le monitor est supérieure à 80
Switch(config-nae-agent)# set-condition monitor cpu_monitor gt 80
## Notre 1ere action passe le statut de l'agent à Major
Switch(config-nae-agent-condition)# status major
## Notre 2eme action crée un message Syslog spécifique
Switch(config-nae-agent-condition)# syslog "Detection d'un niveau élévé de CPU"
## Notre 3eme action passe la commande « top cpu »
Switch(config-nae-agent-condition)# cli top cpu
## Nous créons notre clear condition, qui indique que nous souhaitons un ensemble d'actions lorsque le niveau de CPU redevient inférieur à 40
Switch(config-nae-agent-condition)# clear-condition monitor cpu_monitor lt 40
## Dans ce cas, le statut de notre agent redevient « normal »
Switch(config-nae-agent-clear-condition)# status normal
Exemple d'un agent NAE Lite avec watch
Dans cet exemple, nous créons un agent qui monitor l'Event ID lié à l'association d'une MAC address avec un tunnel UBT.
## Nous créons notre agent « ubt_monitor »
Switch(config)# nae-agent lite ubt_monitor
## Nous affectons des tags à notre agent
Switch(config-nae-agent)# tags connect,ubt
## Nous demandons à notre agent de monitorer l'Event ID 9713
Switch(config-nae-agent)# watch ubt_up event-log 9713
## Nous créons notre condition, qui indique que nous déclencherons une ou des actions lorsque l'Event ID spécifier dans le watch « ubt_up » est rencontré
Switch(config-nae-agent)# set-condition watch event-log ubt_up
## Notre 1ere action crée un message Syslog spécifique
Switch(config-nae-agent-condition)# syslog "Nouvel utilisateur connecté via UBT"
## Notre 3eme action passe la commande « cli show ubt users all »
Switch(config-nae-agent-condition)# cli show ubt users all
Activation et Vérification
Activation
Nous avons donc maintenant nos agents qui sont créés.
Il est nécessaire de les activer, sans quoi ils seront juste déclarés dans la configuration, mais non actifs :
Switch(config)# nae-agent lite cpu_monitor activate
Switch(config)# nae-agent lite ubt_monitor activate
Vérification
Que peut-on faire pour les monitorer et récupérer des informations ?
Interface CLI
Tout d'abord, nous pouvons bien entendu voir la configuration de nos agents dans le show running, notamment avec un nouvel argument dédié à NAE :
Switch# show run nae-agent
nae-agent lite cpu_monitor
desc System CPU monitoring
monitor cpu_monitor resource system cpu
set-condition monitor cpu_monitor gt 80
status major
syslog "High cpu usage detected"
cli top cpu
clear-condition monitor cpu_monitor lt 40
!
nae-agent lite ubt_monitor
tags connect,ubt
watch ubt_up event-log 9713
set-condition watch event-log ubt_up
syslog "New user connected to UBT"
cli show ubt users all
!
nae-agent lite cpu_monitor activate
nae-agent lite ubt_monitor activate
De même, avec une nouvelle commande « show nae-agent » :
Switch# show nae-agent
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Agent Name Script Name Version Origin Disabled Status Time Series Count Alerts Count Rules Error
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
cpu_monitor cpu_monitor 1.0 generated false NORMAL 3 0 2 NONE
system_resource_monitor.default system_resource_monitor 1.4 system false NORMAL 10 0 6 NONE
ubt_monitor ubt_monitor 1.0 generated false NORMAL 0 0 0 NONE
Vous pouvez observer que contrairement à un agent « legacy », l'Origin est fixée à « generated ».
Jusque maintenant nous avions soit les avaleurs « system » lorsque l'agent est fourni avec ArubaOS-CX, ou « user », lorsque l'agent est basé sur un script mis en place par l'administrateur - « generated » indique que l'agent a été généré par le système, sur la base des lignes de commandes fournies - Nous verrons cela dans quelques instants.
Nous pouvons bien entendu avoir plus de détail – Par exemple :
Switch# show nae-agent cpu_monitor
Script Name : cpu_monitor
Version : 1.0
Origin : generated
Disabled : false
Status : NORMAL
Time Series Count : 3
Alerts Count : 0
Rules : 2
Error : NONE
Recent alerts :
No alerts found
Interface Web
Mais l'interface CLI n'est pas la seule manière d'avoir accès aux agents.
En effet, comme pour les agents "legacy", une interface Web est également disponible, toujours au travers de la WebUI d'ArubaOS-CX, dans le menu "Analytics".
Et tout comme pour les agents "legacy", une page dédiée aux agents NAE Lite est également disponible, au travers on pourra retrouver les différentes alertes, avec les actions réalisées.
Les agents NAE Lite utilisant les notions de watch étant basés sur le monitoring d'Event ID, il n'y pas de graphes associés. Les graphs ne sont donc disponibles que pour les Agents NAE Lite utilisant les notions de "monitor".
Comme évoqué précédemment, les scripts pour les agents NAE Lite sont automatiquement générés par le système (AOS-CX). Vous pouvez cependant voir ce qui a été généré au travers de cette même page :
Vous noterez que nous retrouvons les notions de Descriptions et de Tags dans le Manifest.
Interface REST API
Comme pour toutes fonctions d'AOS_CX, et selon la stratégie de ce dernier, il existe bien entendu des API pour la gestion des agents NAE Lite, comme par exemple :
NAE_script_generates : Permet de générer votre nouvel agent selon les valeurs fournis dans le JSON
NAE_script_conditions : Permet de générer des conditions à utiliser dans vos agents NAE Lite
NAE_script : Permet de générer le script associé à votre nouvel agent.
Exemple d'exécution
Prenons l'exemple de notre agent "ubt_monitor".
Nous allons donc nous connecter avec notre client sur notre 6300, et voir ce qui se passe.
D'un point de vue logs/events, voici ce que nous observons :
2022-07-15T12:07:41.727510+02:00 Switch ops-switchd[714]: Event|9713|LOG_INFO|CDTR|1|Client (b4:96:91:38:49:1b) is bound to tunnel id (1057)
2022-07-15T12:07:41.735567+02:00 Switch port-accessd[4882]: Event|10503|LOG_INFO|CDTR|1|Port 1/1/2 is unblocked by port-access
2022-07-15T12:07:42.144606+02:00 Switch hpe-policyd[4846]: Event|5507|LOG_INFO|AMM|-|New user connected to UBT
2022-07-15T12:07:43.527286+02:00 Switch hpe-policyd[4846]: Event|6901|LOG_INFO|AMM|-|An action has been triggered by the NAE agent ubt_monitor
Nous pouvons observer ici plusieurs choses :
1. La première ligne fait apparaître l'Event ID 9713, qui indique qu'un nouvel utilisateur est mappé sur un tunnel UBT.
2. La 3e ligne indique "New user connected to UBT", qui est le message Syslog que nous avons spécifié dans les actions de notre Agent NAE Lite
3. La 4e ligne indique qu'une action a été déclenchée par notre agent NAE Lite
Allons voir cela plus en détail.
En CLI tout d'abord :
Switch# show nae-agent ubt_monitor
Script Name : ubt_monitor
Version : 1.0
Origin : generated
Disabled : false
Status : NORMAL
Time Series Count : 0
Alerts Count : 2
Rules : 0
Error : NONE
Recent alerts :
<1> 2022-07-15 12:07:42 An action has been triggered by NAE agent ubt_monitor
<2> 2022-07-15 12:07:20 An action has been triggered by NAE agent ubt_monitor
Switch# show nae-agent alerts details
Alert message : 2022-07-15 12:07:42 An action has been triggered by NAE agent ubt_monitor
Action(s) Performed : Alert(1), Syslog(1), CLI(1)
Action Details
=====================
Action Alert : Alert Level Changed to None
Action Syslog : [local] New user connected to UBT
Action CLI :
<1> CLI command(s)
---------------------
show ubt users all
---------------------
Output
---------------------
Switch# show ubt users all
=====================================================================
Displaying All UBT Users for Zone: dynseg
=====================================================================
Downloaded user roles are preceded by *
Port Mac-Address Tunnel Status Gateway-Role Failure Reason
----------------------------------------------------------------------------------------------
1/1/2 b4:96:91:38:49:1b activated ubt-contractors ---/---
No UBT users found for Zone: untrusted
---------------------
Only the action Alert, action Syslog, and action CLI details are displayed in this command.
Please refer to the Web UI for other action details.
Vous noterez plusieurs choses :
1. Le détail de l'agent indique bien que des actions ont été déclenchées, avec l'historique.
2. En utilisant la commande "show nae-agent alerts", nous avons le détail de l'alerte, incluant le résultat des actions, y compris l'output de la commande CLI passée (ici "show ubt users all ")
Comme indiqué, nous pouvons aller voir sur la WebUI pour avoir plus de détails :
Conclusion
Avec le support de NAE Lite, nous avons donc dorénavant une possibilité extrêmement simple de pouvoir mettre en place un premier niveau d'automatisation, basée sur la détection des évènements.
------------------------------
Arnaud LE GALL
Aruba France
------------------------------