Telemetry Developer Guide

Telemetry Architecture

  • Configurator
    • Responsible for providing configuration info to device, it use the openconfig models.
  • Collector
    • Implements a gRPC server to receive data from device and save them to thirdparty database. Also, the data will be sent to thirdparty application according to the notification mechanism.

APIs in Telemetry

The sections below give details about the configuration settings for the components that can be configured.

Configurator

API Description

  • telemetry/configurator/api/src/main/yang/telemetry-configurator-api.yang
    • add-telemetry-sensor
      • Add telemetry sensor(s) to data store, the sensor contains the target data you want it reports.
    • query-telemetry-sensor
      • Acquire telemetry sensor(s) configured from data store.
    • delete-telemetry-sensor
      • Delete telemetry sensor(s) in the data store and device.
    • add-telemetry-destination
      • Add telemetry destination(s) to data store, the destination stands for where the device sends data to.
    • query-telemetry-destination
      • Acquire telemetry destination(s) configured from data store.
    • delete-telemetry-destination
      • Delete telemetry destination(s) in the data store and device.
    • configure-node-telemetry-subscription
      • Configure subscription(s) to device, the subscription contains sensors and destinations as mentioned above, also other parameters such as frequency, transfer protocol etc.
    • query-node-telemetry-subscription
      • Acquire telemetry subscription(s) configured in device.
    • delete-node-telemetry-subscription
      • Delete telemetry subscription(s) in the data store and device.
    • delete-node-telemetry-subscription-sensor
      • Delete sensor(s) under subscription(s) yang construction in the data store and device.
    • delete-node-telemetry-subscription-destination
      • Delete destination(s) under subscription(s) yang construction in the data store and device.

Collector

API Description

  • telemetry/collector/datastorage/src/main/yang/telemetry-datastorage.yang
    • data-store
      • Save data which received from device to thirdparty database.

Sample Configurations

1. Add Telemetry Sensor

REST API : POST /restconf/operations/telemetry-configurator-api:add-telemetry-sensor

Sample JSON Data

{
     "input": {
                "telemetry-sensor-group":[{
                                 "telemetry-sensor-group-id":"sensor1",
                                 "telemetry-sensor-paths":[{
                                        "telemetry-sensor-path":"path1",
                                        "sensor-exclude-filter":"filter1"
                                 },
                                 {      "telemetry-sensor-path":"path2",
                                        "sensor-exclude-filter":"filter2"
                                 }]
                          },
                          {      "telemetry-sensor-group-id":"sensor2",
                                 "telemetry-sensor-paths":[{
                                        "telemetry-sensor-path":"path3",
                                        "sensor-exclude-filter":"filter3"
                                 },
                                 {      "telemetry-sensor-path":"path4",
                                        "sensor-exclude-filter":"filter4"
                                 }]
                          }]
    }
}

2. Query Telemetry Sensor

REST API : POST /restconf/operations/telemetry-configurator-api:query-telemetry-sensor

Sample JSON Data

{
    "input": {

    }
}

3. Delete Telemetry Sensor

REST API : POST /restconf/operations/telemetry-configurator-api:delete-telemetry-sensor

Sample JSON Data

{
    "input": {
         "telemetry-sensor-group":[{
                                  "sensor-group-id":"sensor1"
                                },
                                {
                                  "sensor-group-id":"sensor2"
                                }]
     }
}

4. Add Telemetry Destination

REST API : POST /restconf/operations/telemetry-configurator-api:add-telemetry-destination

Sample JSON Data

{
    "input": {
        "telemetry-destination-group":[{
                                         "destination-group-id":"destination1",
                                         "destination-profile":[{
                                                                  "destination-address":"10.42.89.218",
                                                                  "destination-port":"50051"
                                                             }]
                                   },
                                   {
                                         "destination-group-id":"destination2",
                                         "destination-profile":[{
                                                                  "destination-address":"10.42.89.15",
                                                                  "destination-port":"50051"
                                                             }]
                                   }]
    }
}

5. Query Telemetry Destination

REST API : POST /restconf/operations/telemetry-configurator-api:query-telemetry-destination

Sample JSON Data

{
    "input": {

    }
}

6. Delete Telemetry Destination

REST API : POST /restconf/operations/telemetry-configurator-api:delete-telemetry-destination

Sample JSON Data

{
    "input": {
        "telemetry-destination-group":[{
                                     "destination-group-id":"destination1"
                                   },
                                   {
                                     "destination-group-id":"destination2"
                                   }]
    }
}

7. Configure subscription

REST API : POST /restconf/operations/telemetry-configurator-api:configure-node-telemetry-subscription

Sample JSON Data

{
    "input": {
        "telemetry-node":[{
                           "node-id":"node1",
                           "telemetry-subscription":[{
                                                       "subscription-name":"subscription1",
                                                       "protocol-type":"STREAM_GRPC",
                                                       "encoding-type":"ENC_PROTO3",
                                                       "local-source-address":"127.0.0.1",
                                                       "originated-qos-marking":"5",
                                                       "telemetry-sensor":[{
                                                                             "sensor-group-id":"sensor1",
                                                                             "sample-interval":"200",
                                                                             "heartbeat-interval":"60",
                                                                             "suppress-redundant":"false"
                                                                        },
                                                                        {
                                                                             "sensor-group-id":"sensor2",
                                                                             "sample-interval":"100",
                                                                             "heartbeat-interval":"60",
                                                                             "suppress-redundant":"false"
                                                                        }],
                                                       "telemetry-destination":[{
                                                                                 "destination-group-id":"destination1"
                                                                             },
                                                                             {
                                                                                 "destination-group-id":"destination2"
                                                                             }]
                                                  }]
                      }]
    }
}

8. Query subscription

REST API : POST /restconf/operations/telemetry-configurator-api:query-node-telemetry-subscription

Sample JSON Data

{
    "input": {

    }
}

9. Delete subscription

REST API : POST /restconf/operations/telemetry-configurator-api:delete-node-telemetry-subscription

Sample JSON Data

{
    "input": {
        "telemetry-node":[{
                            "node-id":"node1",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1"
                            }]
                        },
                        {
                            "node-id":"node2",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1"
                            }]
                        }]
    }
}

10. Delete subscription sensor

REST API : POST /restconf/operations/telemetry-configurator-api:delete-node-telemetry-subscription-sensor

Sample JSON Data

{
    "input": {
        "telemetry-node":[{
                            "node-id":"node1",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1",
                                  "telemetry-node-subscription-sensor":[{
                                      "sensor-group-id":"sensor1"
                                  },
                                  {
                                      "sensor-group-id":"sensor2"
                                  }]
                            }]
                        },
                        {
                            "node-id":"node2",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1",
                                  "telemetry-node-subscription-sensor":[{
                                      "sensor-group-id":"sensor1"
                                  },
                                  {
                                      "sensor-group-id":"sensor2"
                                  }]
                            }]
                        }]
    }
}

11. Delete subscription destination

REST API : POST /restconf/operations/telemetry-configurator-api:delete-node-telemetry-subscription-destination

Sample JSON Data

{
    "input": {
        "telemetry-node":[{
                            "node-id":"node1",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1",
                                  "telemetry-node-subscription-destination":[{
                                      "destination-group-id":"destination1"
                                  },
                                  {
                                      "destination-group-id":"destination2"
                                  }]
                            }]
                        },
                        {
                            "node-id":"node2",
                            "telemetry-node-subscription":[{
                                  "subscription-name":"subscription1",
                                  "telemetry-node-subscription-destination":[{
                                      "destination-group-id":"destination1"
                                  },
                                  {
                                      "destination-group-id":"destination2"
                                  }]
                            }]
                        }]
    }
}

12. Data storage

REST API : POST /restconf/operations/telemetry-datastorage:data-store

Sample JSON Data

{
    "input": {
        "node-id":"node1",
        "telemetry-data":[{
                            "timestamp":"20181214165033",
                            "base-path":"interfaces/interface",
                                                            "sample-interval":"30",
                                                            "key-value":[{
                                                                 "key":"interface1",
                                                                     "value":""
                                                            },
                                                            {
                                                                 "key":"interface2",
                                                                     "value":""
                                                            }]
                        },
                        {
                            "timestamp":"20181214165034",
                            "base-path":"interfaces/interface",
                                                            "sample-interval":"30",
                                                            "key-value":[{
                                                                 "key":"interface3",
                                                                     "value":""
                                                            },
                                                            {
                                                                 "key":"interface4",
                                                                     "value":""
                                                            }]
                        }]
    }
}