Forum Français

 View Only
last person joined: 2 days ago 

Bienvenue sur le forum communautaire français d'Airheads.

ArubaOS-CX - Day-2-Day tips - NAE Lite

This thread has been viewed 21 times
  • 1.  ArubaOS-CX - Day-2-Day tips - NAE Lite

    EMPLOYEE
    Posted Jul 15, 2022 06:47 AM

    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
    ------------------------------