Cisco France Blog

J’ai testé: Dial-in telemetry avec NETCONF

3 min read



Si la grande majorité des clients adoptent des solutions de management clé-en-main comme Catalyst Center ou le dashboard Meraki (SaaS), d’autres choisissent de développer leur propre solution de management pour configurer et monitorer directement les équipements réseau. Ceux-ci ont à l’origine été conçus pour être administrés par des humains, experts dans ce domaine. C’est la raison pour laquelle les interfaces CLI (Command Line Interface) ont été développées et sont si puissantes. Elles permettent à un humain de facilement configurer un équipement, via une syntaxe compréhensible, tout en offrant un minimum d’automatisation. Mais quand il s’agit de programmer le réseau depuis une application, il devient plus efficace d’utiliser des interfaces programmatiques et des données modélisées. Modélisation YANG… protocoles NETCONF, RESTconf, gRPC, gNMI… si ces termes sont un peu obscures pour vous je ne peux que vous recommander de visionner ce Webinar Community Live que j’ai animé sur ce sujet avant de poursuivre.

IOS-XE programmable interfaces

Une fois que vous aurez commencé à automatiser votre réseau en utilisant l’un des protocoles mentionnés ci-dessus, vous réaliserez vite qu’appliquer des configurations n’est pas suffisant. Vous souhaiterez également comprendre l’état de votre réseau en utilisant également des interfaces programmables. C’est exactement le constat d’un client qui m’a contacté récemment pour comprendre comment il pouvait utiliser également NETCONF pour recevoir des notifications en plus de l’utiliser pour configurer son réseau. Le premier besoin était d’être notifié quand la configuration de l’équipement était modifiée en local sur l’équipement. C’est ce que je me propose de partager dans cet article.

Tout d’abord je vous recommande d’installer YangSuite quand vous voulez tester ces protocoles, cela vous simplifiera grandement la vie. YangSuite a été développé par Cisco pour vous aider à tirer profit des interfaces programmables des équipements et vous y repérer parmi les nombreux modèles YANG.

NETCONF permet une télémétrie en mode Dial-in. C’est-à-dire que le manager doit appeler pour souscrire à des flux de télémétrie. Ceux-ci sont envoyés en réponse dans la session NETCONF ouverte par le manager. La connexion NETCONF (TCP 830 par défaut) est entrante vers l’équipement.

Dial-in versus Dial-out

Pour permettre de souscrire à ces flux de télémetrie, vous devez utiliser module ietf-event-notifications décrit dans le RFC 5277, NETCONF Event Notifications.

Ce module me permet de créer un payload NETCONF (format XML) pour s’abonner à des flux de télémétrie. Le payload ci-dessous demande à être notifié immédiatement en cas de changement de configuration. C’est le xpath-filter qui me permet de spécifier l’élément qui m’intéresse (ici /ios:native). En jouant simplement sur ce champ je peux ainsi récupérer tout ce qui m’intéresse (voisins CDP, CPU, état des interfaces…) et multiplier les flux de télémétrie. Catalyst Center crée plus d’une centaine de souscriptions de télémétrie..

<nc:rpc xmlns:nc=”urn:ietf:params:xml:ns:netconf:base:1.0″ message-id=”urn:uuid:c14faf70-1cb9-4d77-b8b9-9851f431f364″>
  <establish-subscription xmlns=”urn:ietf:params:xml:ns:yang:ietf-event-notifications” xmlns:yp=”urn:ietf:params:xml:ns:yang:ietf-yang-push”>
    <stream>yp:yang-push</stream>
    <yp:xpath-filter>/ios:native</yp:xpath-filter>
    <yp:dampening-period>0</yp:dampening-period>
  </establish-subscription>
</nc:rpc>

En réponse à ce payload NETCONF, mon commutateur Catalyst 9000 m’informe que la demande est validée et me donne l’identifiant de souscription créé.

<rpc-reply xmlns=”urn:ietf:params:xml:ns:netconf:base:1.0″ xmlns:nc=”urn:ietf:params:xml:ns:netconf:base:1.0″ message-id=”urn:uuid:c14faf70-1cb9-4d77-b8b9-9851f431f364″><subscription-result xmlns=”urn:ietf:params:xml:ns:yang:ietf-event-notifications” xmlns:notif-bis=”urn:ietf:params:xml:ns:yang:ietf-event-notifications”>notif-bis:ok</subscription-result>
<subscription-id xmlns=”urn:ietf:params:xml:ns:yang:ietf-event-notifications”>2147483681</subscription-id>
</rpc-reply>

Je peux alors en CLI sur l’équipement vérifier que la souscription est bien présente et voir les détails.

enfr-cat9k-demo-1#sh telemetry ietf subscription 2147483681 detail 
Telemetry subscription detail:
 
  Subscription ID: 2147483681
  Type: Dynamic
  State: Valid
  Stream: yang-push
  Filter:
    Filter type: xpath
    XPath: /ios:native
  Update policy:
    Update Trigger: on-change
    Synch on start: Yes
    Dampening period: 0
  Encoding: encode-xml
  Source VRF: 
  Source Address: 
  Notes: Subscription validated
 
  Named Receivers:
    Name                                              Last State Change  State                 Explanation                                                   
    ——————————————————————————————————————————————————-
    netconf://10.11.12.13:54909                     03/21/25 23:37:04  Connected                                                                           

Notez que cette souscription sera automatiquement supprimée en cas coupure de la session NETCONF. Il est temps de passer au test. Je fais une modification de configuration sur mon équipement réseau.

enfr-cat9k-demo-1(config)#int gi 1/0/3
enfr-cat9k-demo-1(config-if)#desc reseauxblog
enfr-cat9k-demo-1(config-if)#end

Je reçois immédiatement une notification dans ma session NETCONF avec les détails de ce qui a été modifié. On note que l’identifiant de souscription est conservé pour permettre au manager de comprendre à quoi correspond le payload reçu.

<notification xmlns=”urn:ietf:params:xml:ns:netconf:notification:1.0″>
  <eventTime>2025-03-21T23:37:30.32Z</eventTime>
  <push-change-update xmlns=”urn:ietf:params:xml:ns:yang:ietf-yang-push”>
    <subscription-id>2147483681</subscription-id>
    <datastore-changes-xml>
      <yang-patch xmlns=”urn:ietf:params:xml:ns:yang:ietf-yang-patch”>
        <patch-id>null</patch-id>
        <edit>
          <edit-id>edit1</edit-id>
          <operation>merge</operation>
          <target>/native/interface/GigabitEthernet=1%2F0%2F3</target>
          <value>
            <GigabitEthernet xmlns=”http://cisco.com/ns/yang/Cisco-IOS-XE-native“>
              <description>reseauxblog</description>
            </GigabitEthernet>
          </value>
        </edit>
      </yang-patch>
    </datastore-changes-xml>
  </push-change-update>
</notification>

A chaque modification de configuration un payload similaire sera envoyé, permettant au manager de comprendre toutes les modifications effectuées sur l’équipement en temps réel et potentiellement déclencher des actions. Mais ça ce sera à vous de le développer! Si vous optez pour une approche clé-en-main, notez que Catalyst Center est notifié automatiquement en cas modification de configuration sur un équipement via un principe similaire et déclenche alors une resynchronisation de l’équipement pour en comprendre le nouveau statut.

Références

JeromeDurand

Authors

Jerome Durand

Technical Solutions Architect

Laisser un commentaire