Configure Model-based Telemetry

Streaming model-based telemetry data to the intended receiver involves:

Configure Dial-out Mode

In a dial-out mode, the router initiates a session to the destinations based on the subscription.

All 64-bit IOS XR platforms (except for NCS 6000 series routers) support gRPC and TCP protocols. All 32-bit IOS XR platforms support only TCP.

For more information about the dial-out mode, see Dial-out Mode.

The process to configure a dial-out mode involves:

Create a Destination Group

The destination group specifies the destination address, port, encoding and transport that the router uses to send out telemetry data.

  1. Identify the destination address, port, transport, and encoding format.

  2. Create a destination group.
    
    Router(config)#telemetry model-driven
    Router(config-model-driven)#destination-group <group-name>
     
    Router(config-model-driven-dest)#address family ipv4 <IP-address> port <port-number>  
    Router(config-model-driven-dest-addr)#encoding <encoding-format>  
    Router(config-model-driven-dest-addr)#protocol <transport> 
    Router(config-model-driven-dest-addr)#commit   
    

Example: Destination Group for TCP Dial-out

The following example shows a destination group DGroup1 created for TCP dial-out configuration with key-value Google Protocol Buffers (also called self-describing-gpb) encoding:

Router(config)#telemetry model-driven
Router(config-model-driven)#destination-group DGroup1 
Router(config-model-driven-dest)#address family ipv4 172.0.0.0 port 5432  
Router(config-model-driven-dest-addr)#encoding self-describing-gpb  
Router(config-model-driven-dest-addr)#protocol tcp  
Router(config-model-driven-dest-addr)#commit   

Create a Sensor Group

The sensor-group specifies a list of YANG models that are to be streamed.

  1. Identify the sensor path for XR YANG model.

  2. Create a sensor group.
    
    Router(config)#telemetry model-driven
    Router(config-model-driven)#sensor-group <group-name>
    Router(config-model-driven-snsr-grp)# sensor-path <XR YANG model>
    Router(config-model-driven-snsr-grp)# commit
    

Example: Sensor Group for Dial-out


Note

gRPC is supported in only 64-bit platforms.


The following example shows a sensor group SGroup1 created for dial-out configuration with the YANG model for interface statistics:

Router(config)#telemetry model-driven
Router(config-model-driven)#sensor-group SGroup1
Router(config-model-driven-snsr-grp)# sensor-path Cisco-IOS-XR-infra-statsd-oper:infra-statistics/interfaces/interface/latest/generic-counters
Router(config-model-driven-snsr-grp)# commit

What to Do Next:

Create a subscription.

Create a Subscription

The subscription associates a destination-group with a sensor-group and sets the streaming method.

A source interface in the subscription group specifies the interface that will be used for establishing the session to stream data to the destination. If both VRF and source interface are configured, the source interface must be in the same VRF as the one specified under destination group for the session to be established.


Router(config)#telemetry model-driven  
Router(config-model-driven)#subscription <subscription-name>  
Router(config-model-driven-subs)#sensor-group-id <sensor-group> sample-interval <interval>  
Router(config-model-driven-subs)#destination-id <destination-group>
Router(config-model-driven-subs)#source-interface <source-interface>
Router(config-mdt-subscription)#commit  

Example: Subscription for Cadence-based Dial-out Configuration

The following example shows a subscription Sub1 that is created to associate the sensor-group and destination-group, and configure an interval of 30 seconds to stream data:

Router(config)#telemetry model-driven  
Router(config-model-driven)#subscription Sub1  
Router(config-model-driven-subs)#sensor-group-id SGroup1 sample-interval 30000  
Router(config-model-driven-subs)#destination-id DGroup1  
Router(config-mdt-subscription)# commit  

Validate Dial-out Configuration

Use the following command to verify that you have correctly configured the router for dial-out.


Router#show telemetry model-driven subscription <subscription-group-name>

Example: Validation for TCP Dial-out


Router#show telemetry model-driven subscription Sub1
Thu Jul 21 15:42:27.751 UTC
Subscription:  Sub1                     State: ACTIVE
-------------
  Sensor groups:
  Id                Interval(ms)        State
  SGroup1           30000               Resolved

  Destination Groups:
  Id                Encoding            Transport   State   Port    IP
  DGroup1           self-describing-gpb tcp         Active  5432    172.0.0.0

Example: Configure Event-driven Telemetry for LLDP

Telemetry supports NETCONF event notifications where the NETCONF client is configured to receive event notifications from a NETCONF server through a subscription. The NETCONF client must subscribe using a create-subscription request. Currently, only the events from Link Layer Discovery Protocol (LLDP) is supported. These event notifications are sent until either the NETCONF session or the subscription is terminated.


Note

Configuring a sensor group and a subscription is not required for receiving NETCONF notifications. While sensor path and subscription configurations are required for receiving telemetry events, NETCONF create-subscription is required for receiving NETCONF notifications.


To generate NETCONF notifications:
  1. Enable NETCONF agent and SSH sub system.
    
    ssh server netconf
    netconf-yang agent ssh
    
  2. Enable model-driven telemetry.
    
    telemetry model-driven
    
  3. Enable LLDP.
    lldp
    

This example shows event-driven telemetry fo LLDP configuration data.

  1. Create a destination group.
    
    grpc
    port 56782
    address-family ipv4
    !
    telemetry model-driven
    destination-group <destination-udp>
      address-family ipv4 <client-ip>1 port <udp port num>
       encoding self-describing-gpb
       protocol udp
      !
    !
    destination-group <destination-tcp>
      address-family ipv4 <client-ip> port <tcp port num>
       encoding gpb
       protocol tcp
      !
    destination-group <destination-grpc>
      address-family ipv4 <grpc client ip>port <grpc port num>
       encoding self-describing-gpb
       protocol grpc no-tls
    
  2. Create a sensor group.
    
    sensor-group <sensor-group-name>
      sensor-path Cisco-IOS-XR-ethernet-lldp-oper:lldp/global-lldp/lldp-info 
      sensor-path Cisco-IOS-XR-ethernet-lldp-oper:lldp/nodes/node/interfaces/interface  
      sensor-path Cisco-IOS-XR-ethernet-lldp-oper:lldp/nodes/node/neighbors/details/detail    
     !
    
  3. Create a subscription.
    subscription udp-out
      sensor-group-id <sensor-group-name> sample-interval 0
      destination-id <destination-udp>
    !
    
    subscription <subscription-name>
      sensor-group-id <sensor-group-name> sample-interval 0
      destination-id <destination-tcp>
    
    subscription <subscription-name>
      sensor-group-id <sensor-group-name> sample-interval 0
    !
    netconf-yang agent
    ssh
    !
    
  4. Set the notification to stream data when an event occurs.
    
    Router(config-lldp)#timer 12
    Router(config-lldp)#commit
    
    Router(config-lldp)#holdtime 150
    Router (config-lldp)#commit
    
    Router (config-lldp)#exit
    #506
    <?xml version="1.0"?>
    <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
     <eventTime>Date-and-Time</eventTime>
     <lldp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ethernet-lldp-oper">
      <global-lldp>
       <lldp-info>
        <chassis-id>000b.1bc9.e700</chassis-id>
        <chassis-id-sub-type>4</chassis-id-sub-type>
        <system-name>ios</system-name>
        <timer>12</timer>
        <hold-time>120</hold-time>
        <re-init>2</re-init>
       </lldp-info>
      </global-lldp>
     </lldp>
    </notification>
    Ready to send a request.
    Paste your request or enter 'get', 'get-config', 'create-sub', or 'bye' to quit):
    
  5. Validate response received from NETCONF agent.
    #506
    <?xml version="1.0"?>
    <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
     <eventTime>Date-and-Time</eventTime>
     <lldp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ethernet-lldp-oper">
      <global-lldp>
       <lldp-info>
        <chassis-id>000b.1bc9.e700</chassis-id>
        <chassis-id-sub-type>4</chassis-id-sub-type>
        <system-name>ios</system-name>
        <timer>12</timer>
        <hold-time>150</hold-time>
        <re-init>2</re-init>
       </lldp-info>
      </global-lldp>
     </lldp>
    </notification>