Model Driven Telemetry (MDT) Input
NetFlow Optimizer now supports receiving telemetry data using Model Driven Telemetry (MDT). This modern approach allows network devices to proactively stream structured data based on defined data models, providing real-time insights into your network's state and performance.
Key Features of MDT Support in NFO
- Dial-Out Mode: NFO listens for incoming telemetry streams initiated by your network devices. In this dial-out mode, your routers and switches act as clients, establishing a persistent connection to NFO (the server) and continuously pushing telemetry data. To learn more about dial-in and dial-out MDT, click here.
- gRPC Transport: NFO utilizes the gRPC protocol for efficient and high-performance data transport, ensuring reliable and fast delivery of telemetry information. To learn more about gRPC, click here.
- Persistent Connections: Once a connection is established, NFO maintains it. If a connection drops, the sending device will automatically attempt to reconnect every 30 seconds, ensuring continuous data flow.
Preparing Your Network Devices for MDT Streaming
Before NFO can receive MDT data, you need to configure your network devices to stream telemetry. This typically involves using a configuration tool like Cisco YANG Suite.
- Select the Streaming Method: Configure your device to use the yang-push stream.
- Set the Reporting Policy: Define the frequency at which your device should send telemetry updates for specific data sets (yangsets) - periodic or on-change.
- Set the encoding: The kvGPB encoding should be specified.
- Specify the NFO Receiver: Configure the destination IP address or hostname of your NFO server, the port NFO will be listening on (default: 57000), and the protocol as grpc-tcp.
- Build and Apply Configuration: Use your device's configuration tools to build and apply these settings.
Configuring MDT Inputs in NFO
To enable NFO to receive and process MDT data, you need to configure MDT Inputs.
- Navigate to the Services section in the NFO web interface.
- Select the Model Driven Telemetry tab.
- Add a record to the MDT Inputs list with the following parameters:
- IP/Host to Listen To: Enter the IP address or hostname that NFO should listen on for incoming MDT connections. To listen on all available network interfaces, use 0.0.0.0. The default is 0.0.0.0.
- Port to Listen On: Specify the TCP port number that NFO will use to listen for incoming MDT streams. The default port is 57000.
- MDT Credentials ID: If you have configured TLS security for your MDT connections, select the corresponding MDT Credentials ID from the dropdown. This links the input to the necessary certificates and keys.
- Comment: You can add an optional comment for your own reference.
- Output Filter: Choose whether to process all received MDT data or only data related to original NetFlow/IPFIX information (if applicable).
- Click Save button.
- Add record to the MDT credentials list with the following parameters:
- MDT Credentials ID: A unique string identifier for the credential set (should match with the MDT Inputs list).
- Insecure Credentials: Set to 0 if TLS security is enabled. Set to 1 for insecure connections (not recommended for production environments).
- Certificate Path: The path to the server certificate file (PEM format).
- Private Key Path: The path to the server's private key file (PEM format).
- Comment: An optional field for your notes.
Configuring MDT Output in NFO
In the NFO GUI go to Outputs on the left navigation bar and press the plus sign. Set the output type to JSON (UDP).
Data Format
NFO receives MDT data and processes it. The raw MDT messages (converted to JSON format) are then forwarded to the configured Outputs.
Example of MDT Data (JSON):
{
"nodeIdStr": "router",
"subscriptionIdStr": "2000",
"encodingPath": "ietf-interfaces:interfaces-state/interface",
"collectionId": "2",
"collectionStartTime": "1746612261976",
"msgTimestamp": "1746612261976",
"dataGpbkv": [
{
"timestamp": "1746612261976",
"fields": [
{
"name": "keys",
"fields": [
{
"name": "name",
"stringValue": "GigabitEthernet1"
}
]
},
{
"name": "content",
"fields": [
{ "name": "type", "stringValue": "ethernetCsmacd" },
{ "name": "admin-status", "stringValue": "up" },
{ "name": "oper-status", "stringValue": "up" },
{ "name": "last-change", "stringValue": "2025-05-07T06:41:21.052000+00:00" },
{ "name": "if-index", "sint32Value": 1 },
{ "name": "phys-address", "stringValue": "00:15:5d:c3:75:10" },
{ "name": "speed", "uint64Value": "1000000000" },
{
"name": "statistics",
"fields": [
{ "name": "discontinuity-time", "stringValue": "2025-05-07T06:39:29+00:00" },
{ "name": "in-octets", "uint64Value": "395550" },
{ "name": "in-unicast-pkts", "uint64Value": "6351" },
{ "name": "in-broadcast-pkts", "uint64Value": "0" },
{ "name": "in-multicast-pkts", "uint64Value": "0" },
{ "name": "in-discards", "uint32Value": 0 },
{ "name": "in-errors", "uint32Value": 0 },
{ "name": "in-unknown-protos", "uint32Value": 0 },
{ "name": "out-octets", "uint64Value": "618574" },
{ "name": "out-unicast-pkts", "uint64Value": "6109" },
{ "name": "out-broadcast-pkts", "uint64Value": "0" },
{ "name": "out-multicast-pkts", "uint64Value": "0" },
{ "name": "out-discards", "uint32Value": 0 },
{ "name": "out-errors", "uint32Value": 0 }
]
}
]
}
]
}
]
}