This article explains the API method for configuring and deploying an IOS XR or IOS XE telemetry ingestion pipeline using gNMI Dial-In connectivity.
Provider Connectivity Assurance does not currently provide UI-level support for gNMI Dial-In, so the provisioning must be performed using direct API calls. This document walks through the required steps to configure the Telemetry Collector, deploy it, and set up sessions to collect telemetry from devices.
At a high level, the procedure goes as follows:
First, Create a Telemetry Collector Configuration for gNMI Dial-In
This section is for either an IOS XR or IOS XE router, and post the configuration to the platform, so that its available when the Telemetry Collector "phones home"
Next, Deploy the Telemetry Collector
You need to deploy the Telemetry Collector instance so it can retrieve the configuration.
Finally, Provision the targets (routers) from which the Collector must collect Telemetry
Unlike MDT Dial-Out, gNMI Dial-In mode requires the collector to be explicitly configured with the specific data sources and sensor paths it should subscribe to for telemetry.
Follow the procedure below to implement this connectivity.
Configure the Telemetry Collector for gNMI Dial-In Connectivity
Every Telemetry Collector must have its runtime configuration pre-provisioned in Provider Connectivity Assurance before it can successfully be brought online.
At startup, the Telemetry Collector establishes its administrative connection with Provider Connectivity Assurance and requests its runtime configuration. Until it receives this configuration, it cannot begin collecting or forwarding data.
Provisioning a Telemetry Collector instance to receive telemetry via gNMI Dial-In involves the following 2 steps:
Generate the Telemetry Collector Configuration JSON
To provision a Telemetry Collector, there is a helper API that generates the required JSON configuration structure, which is used in the subsequent API call to provision a Collector.
The following information is required for the helper API call:
Parameter | Description |
---|---|
DataBrokerServer | The hostname or IP address of the Sensor Collector (e.g., Roadrunner) instance to which the Telemetry Collector will forward its data stream. |
DataBrokerPort | The port on the Sensor Collector where the data stream will be shipped. Default is 55888 . If your Sensor Collector uses a different port, this must match. |
AgentName | A unique name to identify the Telemetry Collector. |
InputType | Specify the gNMI data collection mode: |
- DialIN: Telemetry Collector subscribes to data streams from devices. | |
- DialOUT: Devices push telemetry data directly to the collector. | |
DataTypes | Specify the telemetry data transformation type: |
- XE: Use for Cisco IOS-XE telemetry. | |
- XR: Use for Cisco IOS-XR telemetry. |
Example helper API Call for generating the JSON structure
POST /api/v3/telemetry-collector-templates/build-agent-configuration
Body:
{
"DataGateway": {
"DataBrokerPort": 55888,
"DataBrokerServer": "1.2.3.4"
},
"AgentName": "my-cisco-xr-collector"
"InputType": "DialIN",
"DataTypes": "XR"
}
Example API Response - JSON configuration available
The API call returns a structured JSON configuration for your Telemetry Collector. Take note of this response, as it will be used in the next step. An example response is shown below:
{
"data": {
"attributes": {
"type": "agentConfigs",
"dataGateway": {
"dataBrokerSslAllowExpiredCerts": false,
"dataBrokerSslAllowInsecureCerts": false,
"dataBrokerSslAllowSelfsigned": false,
"dataBrokerSslSkipHostnameCheck": false,
"dataBrokerUseSsl": false,
"port": 55888,
"server": "1.2.3.4"
},
"identification": {
"agentName": "telem-collector-dial-in"
},
"metadata": {
"name": "telem-collector-dial-in"
},
"telemetry": {
"dataCollection": "",
"templateName": "",
"templateVersion": 0,
"dataInput": "",
"dataInputTemplateName": "",
"dataInputTemplateVersion": 0,
"dataTransformation": "REDACTED - BASE64 BLOB"
"dataTransformationTemplateName": "data-transformation-cisco-ios-xe",
"dataTransformationTemplateVersion": 1
}
}
}
}
Post the Telemetry Collector configuration to Provider Connectivity Assurance platform
Once the runtime configuration JSON has been generated, the next step is to provision the Telemetry Collector in Provider Connectivity Assurance using the following API call:
POST /api/orchestrate/v3/agents/configuration
Use the response in the previous step as the body of this API call.
Example API Response - Telemetry Collector has been configured in Provider Connectivity Assurance
The /api/orchestrate/v3/agents/configuration API call returns a response containing a dynamically generated agentId
. This unique identifier will be required in the following steps. Example response:
{
"data": {
"attributes": {
"_rev": "1-a7eb1648979efac37e276136494d8516",
"agentId": "ca8614c1-8ce0-4f40-b5ee-2253852fc92f",
"createdTimestamp": 1747236829611,
"dataGateway": {
"port": 55888,
"server": "1.2.3.4"
},
"identification": {
"agentName": "my-cisco-xr-collector"
},
"metadata": {
"name": "my-cisco-xr-collector"
},
"telemetry": {
"dataTransformation": "REDACTED - BASE64 BLOB",
"dataTransformationTemplateName": "data-transformation-cisco-ios-xe",
"dataTransformationTemplateVersion": 1
}
},
"id": "ca8614c1-8ce0-4f40-b5ee-2253852fc92f",
"type": "agentConfigs"
}
}
Note the agentId
field. This contains a dynamically generated identifier for your Telemetry Collector. Take note of it as it will be needed later.
At this point you have provisioned your Telemetry Collector in Provider Connectivity Assurance.
Deploy the Telemetry Collector
At this point, your Telemetry Collector configuration is provisioned in Provider Connectivity Assurance. You can now follow the instructions in Deploying Telemetry Collector to deploy the Telemetry Collector instance. Once deployed, it will connect successfully to Provider Connectivity Assurance, although it will not yet be able to produce telemetry data. To enable data collection, proceed to the next section.
Provision the Targets from where to Collect Telemetry
Now your Telemetry Collector should be running and connected to Provider Connectivity Assurance, but will not be producing any data. This is because, with gNMI Dial-In collection (as opposed to the other supported mode, MDT Dial-Out), the collector must be told what data sources it is expected to subscribe to receive telemetry from and which sensor paths it is expected to subscribe to.
This is accomplished by provisioning ‘sessions’ against your collector.
A session represents an individual telemetry stream for the collector to subscribe to.
Each session defines:
- The device to connect to (via gNMI Dial-In).
- The specific sensor paths to collect telemetry data from a ‘session’ defines an individual telemetry stream for the collector to subscribe to (or to put this another way, each session represents a device we want to receive telemetry from)
Once the Telemetry Collector is provisioned and deployed, it must be configured with sessions to define the devices and telemetry sensor paths from which it will collect data.
The following 2 steps should be executed for each router that you want your collector to stream telemetry from.
Generate a Session JSON Payload
To provision the targets, there is a helper API that generates the required JSON configuration structure, which is used in the subsequent API call. Use the following parameters to generate the session configuration JSON:
Parameter | Description |
---|---|
AgentID | The unique agentId of the Telemetry Collector (provided in Step 2). |
SessionName | A friendly name for the session (e.g., the hostname or role of the device). |
ServiceAddress | The IP address of the device to which the collector will connect via gNMI. |
SensorPathSubscriptions | A comma-separated list of sensor paths to subscribe to. Refer to the Helpful link below /v1/docs/step-3-configuration-and-deployment-gnmi-dial-in#helpful-links for details about how to retrieve the list of sensor paths supported in the out-of-the-box Telemetry Collector (so that you can choose any of interest for your use case) |
Username | The username for authenticating the gNMI connection. |
Password | The password for authenticating the gNMI connection. |
TLSCertBase64 | Optional: Base64-encoded TLS client certificate for secure connections. |
TLSKeyBase64 | Optional: Base64-encoded TLS client private key for secure connections. |
TLSAllowedCACertsBase64 | Optional: Base64-encoded trusted root certificates for secure connections. |
Example API Call for generating the JSON to create sessions
POST /api/v3/telemetry-collector-sessions
Body:
{
"AgentID": "ca8614c1-8ce0-4f40-b5ee-2253852fc92f",
"SessionName": "my-router",
"ServiceAddress": "192.168.1.10",
"SensorPathSubscriptions": [
"if_stats-cisco-ios-xr",
"sla_stats-cisco-ios-xr"
],
"Username": "admin",
"Password": "nomoresecrets"
}
Example API Response
{
"data": {
"attributes": {
"agentId": "ca8614c1-8ce0-4f40-b5ee-2253852fc92f",
"session": {
"TelemetryGNMIDialInSession": {
"Password": "nomoresecrets",
"ServiceAddress": "1.2.3.4",
"Username": "admin",
"SensorPathSubscriptions": [
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gImlmX3N0YXRzIgoKIyMgT3JpZ2luIGFuZCBwYXRoIG9mIHRoZSBzdWJzY3JpcHRpb24KIyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbmZpZy9yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvcnBjL2dubWkvZ25taS1zcGVjaWZpY2F0aW9uLm1kIzIyMi1wYXRocwojIwojIyBvcmlnaW4gdXN1YWxseSByZWZlcnMgdG8gYSAoWUFORykgZGF0YSBtb2RlbCBpbXBsZW1lbnRlZCBieSB0aGUgZGV2aWNlCiMjIGFuZCBwYXRoIHRvIGEgc3BlY2lmaWMgc3Vic3RydWN0dXJlIGluc2lkZSBpdCB0aGF0IHNob3VsZCBiZSBzdWJzY3JpYmVkCiMjIHRvIChzaW1pbGFyIHRvIGFuIFhQYXRoKS4gWUFORyBtb2RlbHMgY2FuIGJlIGZvdW5kIGUuZy4gaGVyZToKIyMgaHR0cHM6Ly9naXRodWIuY29tL1lhbmdNb2RlbHMveWFuZy90cmVlL21hc3Rlci92ZW5kb3IvY2lzY28veHIKb3JpZ2luID0gIkNpc2NvLUlPUy1YUi1wZmktaW0tY21kLW9wZXIiCnBhdGggPSAiL2ludGVyZmFjZXMvaW50ZXJmYWNlLXhyL2ludGVyZmFjZSIKCiMjIFN1YnNjcmlwdGlvbiBtb2RlICgidGFyZ2V0X2RlZmluZWQiLCAic2FtcGxlIiwgIm9uX2NoYW5nZSIpIGFuZCBpbnRlcnZhbApzdWJzY3JpcHRpb25fbW9kZSA9ICJzYW1wbGUiCnNhbXBsZV9pbnRlcnZhbCA9ICI2MHMiCgojIyBTdXBwcmVzcyByZWR1bmRhbnQgdHJhbnNtaXNzaW9ucyB3aGVuIG1lYXN1cmVkIHZhbHVlcyBhcmUgdW5jaGFuZ2VkCiMgc3VwcHJlc3NfcmVkdW5kYW50ID0gZmFsc2UKCiMjIElmIHN1cHByZXNzaW9uIGlzIGVuYWJsZWQsIHNlbmQgdXBkYXRlcyBhdCBsZWFzdCBldmVyeSBYIHNlY29uZHMgYW55d2F5CiMgaGVhcnRiZWF0X2ludGVydmFsID0gIjYwcyIK",
"name": "if_stats-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gInNsYV9zdGF0cyIKCiMjIE9yaWdpbiBhbmQgcGF0aCBvZiB0aGUgc3Vic2NyaXB0aW9uCiMjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL29wZW5jb25maWcvcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL3JwYy9nbm1pL2dubWktc3BlY2lmaWNhdGlvbi5tZCMyMjItcGF0aHMKIyMKIyMgb3JpZ2luIHVzdWFsbHkgcmVmZXJzIHRvIGEgKFlBTkcpIGRhdGEgbW9kZWwgaW1wbGVtZW50ZWQgYnkgdGhlIGRldmljZQojIyBhbmQgcGF0aCB0byBhIHNwZWNpZmljIHN1YnN0cnVjdHVyZSBpbnNpZGUgaXQgdGhhdCBzaG91bGQgYmUgc3Vic2NyaWJlZAojIyB0byAoc2ltaWxhciB0byBhbiBYUGF0aCkuIFlBTkcgbW9kZWxzIGNhbiBiZSBmb3VuZCBlLmcuIGhlcmU6CiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9ZYW5nTW9kZWxzL3lhbmcvdHJlZS9tYXN0ZXIvdmVuZG9yL2Npc2NvL3hyCm9yaWdpbiA9ICJDaXNjby1JT1MtWFItaW5mcmEtc2xhLW9wZXIiCnBhdGggPSAiL3NsYS9wcm90b2NvbHMvQ2lzY28tSU9TLVhSLWV0aGVybmV0LWNmbS1vcGVyOmV0aGVybmV0L3N0YXRpc3RpY3MtaGlzdG9yaWNhbHMvc3RhdGlzdGljcy1oaXN0b3JpY2FsIgoKIyMgU3Vic2NyaXB0aW9uIG1vZGUgKCJ0YXJnZXRfZGVmaW5lZCIsICJzYW1wbGUiLCAib25fY2hhbmdlIikgYW5kIGludGVydmFsCnN1YnNjcmlwdGlvbl9tb2RlID0gInNhbXBsZSIKc2FtcGxlX2ludGVydmFsID0gIjYwcyIKCiMjIFN1cHByZXNzIHJlZHVuZGFudCB0cmFuc21pc3Npb25zIHdoZW4gbWVhc3VyZWQgdmFsdWVzIGFyZSB1bmNoYW5nZWQKIyBzdXBwcmVzc19yZWR1bmRhbnQgPSBmYWxzZQoKIyMgSWYgc3VwcHJlc3Npb24gaXMgZW5hYmxlZCwgc2VuZCB1cGRhdGVzIGF0IGxlYXN0IGV2ZXJ5IFggc2Vjb25kcyBhbnl3YXkKIyBoZWFydGJlYXRfaW50ZXJ2YWwgPSAiNjBzIgo=",
"name": "sla_stats-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gInBvbGljeV9pbl9zdGF0cyIKCiMjIE9yaWdpbiBhbmQgcGF0aCBvZiB0aGUgc3Vic2NyaXB0aW9uCiMjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL29wZW5jb25maWcvcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL3JwYy9nbm1pL2dubWktc3BlY2lmaWNhdGlvbi5tZCMyMjItcGF0aHMKIyMKIyMgb3JpZ2luIHVzdWFsbHkgcmVmZXJzIHRvIGEgKFlBTkcpIGRhdGEgbW9kZWwgaW1wbGVtZW50ZWQgYnkgdGhlIGRldmljZQojIyBhbmQgcGF0aCB0byBhIHNwZWNpZmljIHN1YnN0cnVjdHVyZSBpbnNpZGUgaXQgdGhhdCBzaG91bGQgYmUgc3Vic2NyaWJlZAojIyB0byAoc2ltaWxhciB0byBhbiBYUGF0aCkuIFlBTkcgbW9kZWxzIGNhbiBiZSBmb3VuZCBlLmcuIGhlcmU6CiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9ZYW5nTW9kZWxzL3lhbmcvdHJlZS9tYXN0ZXIvdmVuZG9yL2Npc2NvL3hyCm9yaWdpbiA9ICJDaXNjby1JT1MtWFItcW9zLW1hLW9wZXIiCnBhdGggPSAiL3Fvcy9pbnRlcmZhY2UtdGFibGUvaW50ZXJmYWNlL2lucHV0L3NlcnZpY2UtcG9saWN5LW5hbWVzL3NlcnZpY2UtcG9saWN5LWluc3RhbmNlL3N0YXRpc3RpY3MiCgojIyBTdWJzY3JpcHRpb24gbW9kZSAoInRhcmdldF9kZWZpbmVkIiwgInNhbXBsZSIsICJvbl9jaGFuZ2UiKSBhbmQgaW50ZXJ2YWwKc3Vic2NyaXB0aW9uX21vZGUgPSAic2FtcGxlIgpzYW1wbGVfaW50ZXJ2YWwgPSAiNjBzIgoKIyMgU3VwcHJlc3MgcmVkdW5kYW50IHRyYW5zbWlzc2lvbnMgd2hlbiBtZWFzdXJlZCB2YWx1ZXMgYXJlIHVuY2hhbmdlZAojIHN1cHByZXNzX3JlZHVuZGFudCA9IGZhbHNlCgojIyBJZiBzdXBwcmVzc2lvbiBpcyBlbmFibGVkLCBzZW5kIHVwZGF0ZXMgYXQgbGVhc3QgZXZlcnkgWCBzZWNvbmRzIGFueXdheQojIGhlYXJ0YmVhdF9pbnRlcnZhbCA9ICI2MHMiCg==",
"name": "policy_in_stats-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gInBvbGljeV9vdXRfc3RhdHMiCgojIyBPcmlnaW4gYW5kIHBhdGggb2YgdGhlIHN1YnNjcmlwdGlvbgojIyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuY29uZmlnL3JlZmVyZW5jZS9ibG9iL21hc3Rlci9ycGMvZ25taS9nbm1pLXNwZWNpZmljYXRpb24ubWQjMjIyLXBhdGhzCiMjCiMjIG9yaWdpbiB1c3VhbGx5IHJlZmVycyB0byBhIChZQU5HKSBkYXRhIG1vZGVsIGltcGxlbWVudGVkIGJ5IHRoZSBkZXZpY2UKIyMgYW5kIHBhdGggdG8gYSBzcGVjaWZpYyBzdWJzdHJ1Y3R1cmUgaW5zaWRlIGl0IHRoYXQgc2hvdWxkIGJlIHN1YnNjcmliZWQKIyMgdG8gKHNpbWlsYXIgdG8gYW4gWFBhdGgpLiBZQU5HIG1vZGVscyBjYW4gYmUgZm91bmQgZS5nLiBoZXJlOgojIyBodHRwczovL2dpdGh1Yi5jb20vWWFuZ01vZGVscy95YW5nL3RyZWUvbWFzdGVyL3ZlbmRvci9jaXNjby94cgpvcmlnaW4gPSAiQ2lzY28tSU9TLVhSLXFvcy1tYS1vcGVyIgpwYXRoID0gIi9xb3MvaW50ZXJmYWNlLXRhYmxlL2ludGVyZmFjZS9vdXRwdXQvc2VydmljZS1wb2xpY3ktbmFtZXMvc2VydmljZS1wb2xpY3ktaW5zdGFuY2Uvc3RhdGlzdGljcyIKCiMjIFN1YnNjcmlwdGlvbiBtb2RlICgidGFyZ2V0X2RlZmluZWQiLCAic2FtcGxlIiwgIm9uX2NoYW5nZSIpIGFuZCBpbnRlcnZhbApzdWJzY3JpcHRpb25fbW9kZSA9ICJzYW1wbGUiCnNhbXBsZV9pbnRlcnZhbCA9ICI2MHMiCgojIyBTdXBwcmVzcyByZWR1bmRhbnQgdHJhbnNtaXNzaW9ucyB3aGVuIG1lYXN1cmVkIHZhbHVlcyBhcmUgdW5jaGFuZ2VkCiMgc3VwcHJlc3NfcmVkdW5kYW50ID0gZmFsc2UKCiMjIElmIHN1cHByZXNzaW9uIGlzIGVuYWJsZWQsIHNlbmQgdXBkYXRlcyBhdCBsZWFzdCBldmVyeSBYIHNlY29uZHMgYW55d2F5CiMgaGVhcnRiZWF0X2ludGVydmFsID0gIjYwcyIK",
"name": "policy_out_stats-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gImNwdV91dGlsIgoKIyMgT3JpZ2luIGFuZCBwYXRoIG9mIHRoZSBzdWJzY3JpcHRpb24KIyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbmZpZy9yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvcnBjL2dubWkvZ25taS1zcGVjaWZpY2F0aW9uLm1kIzIyMi1wYXRocwojIwojIyBvcmlnaW4gdXN1YWxseSByZWZlcnMgdG8gYSAoWUFORykgZGF0YSBtb2RlbCBpbXBsZW1lbnRlZCBieSB0aGUgZGV2aWNlCiMjIGFuZCBwYXRoIHRvIGEgc3BlY2lmaWMgc3Vic3RydWN0dXJlIGluc2lkZSBpdCB0aGF0IHNob3VsZCBiZSBzdWJzY3JpYmVkCiMjIHRvIChzaW1pbGFyIHRvIGFuIFhQYXRoKS4gWUFORyBtb2RlbHMgY2FuIGJlIGZvdW5kIGUuZy4gaGVyZToKIyMgaHR0cHM6Ly9naXRodWIuY29tL1lhbmdNb2RlbHMveWFuZy90cmVlL21hc3Rlci92ZW5kb3IvY2lzY28veHIKb3JpZ2luID0gIkNpc2NvLUlPUy1YUi13ZHN5c21vbi1mZC1vcGVyIgpwYXRoID0gIi9zeXN0ZW0tbW9uaXRvcmluZy9jcHUtdXRpbGl6YXRpb24iCgojIyBTdWJzY3JpcHRpb24gbW9kZSAoInRhcmdldF9kZWZpbmVkIiwgInNhbXBsZSIsICJvbl9jaGFuZ2UiKSBhbmQgaW50ZXJ2YWwKc3Vic2NyaXB0aW9uX21vZGUgPSAic2FtcGxlIgpzYW1wbGVfaW50ZXJ2YWwgPSAiNjBzIgoKIyMgU3VwcHJlc3MgcmVkdW5kYW50IHRyYW5zbWlzc2lvbnMgd2hlbiBtZWFzdXJlZCB2YWx1ZXMgYXJlIHVuY2hhbmdlZAojIHN1cHByZXNzX3JlZHVuZGFudCA9IGZhbHNlCgojIyBJZiBzdXBwcmVzc2lvbiBpcyBlbmFibGVkLCBzZW5kIHVwZGF0ZXMgYXQgbGVhc3QgZXZlcnkgWCBzZWNvbmRzIGFueXdheQojIGhlYXJ0YmVhdF9pbnRlcnZhbCA9ICI2MHMiCg==",
"name": "cpu_util-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gIm5vZGVfc3VtbWFyeSIKCiMjIE9yaWdpbiBhbmQgcGF0aCBvZiB0aGUgc3Vic2NyaXB0aW9uCiMjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL29wZW5jb25maWcvcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL3JwYy9nbm1pL2dubWktc3BlY2lmaWNhdGlvbi5tZCMyMjItcGF0aHMKIyMKIyMgb3JpZ2luIHVzdWFsbHkgcmVmZXJzIHRvIGEgKFlBTkcpIGRhdGEgbW9kZWwgaW1wbGVtZW50ZWQgYnkgdGhlIGRldmljZQojIyBhbmQgcGF0aCB0byBhIHNwZWNpZmljIHN1YnN0cnVjdHVyZSBpbnNpZGUgaXQgdGhhdCBzaG91bGQgYmUgc3Vic2NyaWJlZAojIyB0byAoc2ltaWxhciB0byBhbiBYUGF0aCkuIFlBTkcgbW9kZWxzIGNhbiBiZSBmb3VuZCBlLmcuIGhlcmU6CiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9ZYW5nTW9kZWxzL3lhbmcvdHJlZS9tYXN0ZXIvdmVuZG9yL2Npc2NvL3hyCm9yaWdpbiA9ICJDaXNjby1JT1MtWFItbnRvLW1pc2Mtb3BlciIKcGF0aCA9ICIvbWVtb3J5LXN1bW1hcnkvbm9kZXMvbm9kZS9zdW1tYXJ5IgoKIyMgU3Vic2NyaXB0aW9uIG1vZGUgKCJ0YXJnZXRfZGVmaW5lZCIsICJzYW1wbGUiLCAib25fY2hhbmdlIikgYW5kIGludGVydmFsCnN1YnNjcmlwdGlvbl9tb2RlID0gInNhbXBsZSIKc2FtcGxlX2ludGVydmFsID0gIjYwcyIKCiMjIFN1cHByZXNzIHJlZHVuZGFudCB0cmFuc21pc3Npb25zIHdoZW4gbWVhc3VyZWQgdmFsdWVzIGFyZSB1bmNoYW5nZWQKIyBzdXBwcmVzc19yZWR1bmRhbnQgPSBmYWxzZQoKIyMgSWYgc3VwcHJlc3Npb24gaXMgZW5hYmxlZCwgc2VuZCB1cGRhdGVzIGF0IGxlYXN0IGV2ZXJ5IFggc2Vjb25kcyBhbnl3YXkKIyBoZWFydGJlYXRfaW50ZXJ2YWwgPSAiNjBzIgo=",
"name": "node_summary-cisco-ios-xr",
"version": 1
},
{
"template": "W1tpbnB1dHMuZ25taS5zdWJzY3JpcHRpb25dXQojIyBOYW1lIG9mIHRoZSBtZWFzdXJlbWVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZApuYW1lID0gImlwc2xhIgoKIyMgT3JpZ2luIGFuZCBwYXRoIG9mIHRoZSBzdWJzY3JpcHRpb24KIyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbmZpZy9yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvcnBjL2dubWkvZ25taS1zcGVjaWZpY2F0aW9uLm1kIzIyMi1wYXRocwojIwojIyBvcmlnaW4gdXN1YWxseSByZWZlcnMgdG8gYSAoWUFORykgZGF0YSBtb2RlbCBpbXBsZW1lbnRlZCBieSB0aGUgZGV2aWNlCiMjIGFuZCBwYXRoIHRvIGEgc3BlY2lmaWMgc3Vic3RydWN0dXJlIGluc2lkZSBpdCB0aGF0IHNob3VsZCBiZSBzdWJzY3JpYmVkCiMjIHRvIChzaW1pbGFyIHRvIGFuIFhQYXRoKS4gWUFORyBtb2RlbHMgY2FuIGJlIGZvdW5kIGUuZy4gaGVyZToKIyMgaHR0cHM6Ly9naXRodWIuY29tL1lhbmdNb2RlbHMveWFuZy90cmVlL21hc3Rlci92ZW5kb3IvY2lzY28veHIKb3JpZ2luID0gIkNpc2NvLUlPUy1YUi1tYW4taXBzbGEtb3BlciIKcGF0aCA9ICIvaXBzbGEvb3BlcmF0aW9uLWRhdGEvb3BlcmF0aW9ucy9vcGVyYXRpb24vc3RhdGlzdGljcy9sYXRlc3QvdGFyZ2V0IgoKIyMgU3Vic2NyaXB0aW9uIG1vZGUgKCJ0YXJnZXRfZGVmaW5lZCIsICJzYW1wbGUiLCAib25fY2hhbmdlIikgYW5kIGludGVydmFsCnN1YnNjcmlwdGlvbl9tb2RlID0gInNhbXBsZSIKc2FtcGxlX2ludGVydmFsID0gIjYwcyIKCiMjIFN1cHByZXNzIHJlZHVuZGFudCB0cmFuc21pc3Npb25zIHdoZW4gbWVhc3VyZWQgdmFsdWVzIGFyZSB1bmNoYW5nZWQKIyBzdXBwcmVzc19yZWR1bmRhbnQgPSBmYWxzZQoKIyMgSWYgc3VwcHJlc3Npb24gaXMgZW5hYmxlZCwgc2VuZCB1cGRhdGVzIGF0IGxlYXN0IGV2ZXJ5IFggc2Vjb25kcyBhbnl3YXkKIyBoZWFydGJlYXRfaW50ZXJ2YWwgPSAiNjBzIgo=",
"name": "ipsla-cisco-ios-xr",
"version": 1
}
]
},
"enable": true,
"period": "continuous",
"sessionId": "b42092f8-741d-421f-b656-34e3b062e4c0",
"sessionName": "my-router",
"sessionType": "TelemetryGNMIDialInSession"
},
"tenantId": "8a116577-6489-4c0d-92e4-407eacd8e1a6"
},
"type": "agentSessions"
}
}
Note you will need to use this in the next step.
Provisioning The Session Against Your Collector
Now that you have produced the session configuration to define the device that you want to stream telemetry from, you need to provision it against your collector.
This can be done with the following API call:
/api/orchestrate/v3/agents/session
Cutting and pasting the result from the previous step into the request body.
Once provisioned, the new session configuration will be pushed down to your collector. At this point, your collector will initiate the process of connecting to the device and subscribing to the requested sensor paths.
Assuming all went well, you should now begin receiving telemetry from the device.
Helpful Links
The sensor paths associated with the ‘out-of-the-box’ telemetry offering can be retrieved via the following API call:
GET /api/v3/telemetry-agent-templates?type=SensorPathSubscription&shallow=true
This will return a result set similar to the following:
{
"data": [
{
"name": "cpu_stats-cisco-ios-xe",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "if_stats-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "sla_stats-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "policy_in_stats-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "cpu_util-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "node_summary-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "memory_stats-cisco-ios-xe",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "policy_out_stats-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "ipsla-cisco-ios-xr",
"templateVersion": 1,
"type": "SensorPathSubscription"
},
{
"name": "if_stats-cisco-ios-xe",
"templateVersion": 1,
"type": "SensorPathSubscription"
}
]
}
Note If you wish more detailed information about each path, such as the Yang model and full sensor path, omit the shallow=true
query parameter.
To populate the SensorPathSubscriptions
field in the session configuration for your collector, simply collect the names of the paths (taken from the name
fields above) that you want into a comma-separated list.
For example, to subscribe to all of the ‘cisco-ios-xr’ family of objects, you would set the SensorpathSubscriptions
field to the following:
["if_stats-cisco-ios-xr","sla_stats-cisco-ios-xr","policy_in_stats-cisco-ios-xr","policy_out_stats-cisco-ios-xr","cpu_util-cisco-ios-xr","node_summary-cisco-ios-xr","ipsla-cisco-ios-xr"]
© 2025 Cisco and/or its affiliates. All rights reserved.
For more information about trademarks, please visit: Cisco trademarks
For more information about legal terms, please visit: Cisco legal terms
For legal information about Accedian Skylight products, please visit: Accedian legal terms and trademarks