How to Use the Command 'gnmic get' (with examples)
The gnmic get
command is a utility used in network management to retrieve a snapshot of operational data from gNMI-enabled (gRPC Network Management Interface) network devices. This command is instrumental in accessing the current state and configuration details of network devices without making changes to their settings. It’s a critical tool for network administrators who require real-time information to monitor and manage network infrastructures efficiently.
Use case 1: Get a Snapshot of the Device State at a Specific Path
Code:
gnmic --address ip:port get --path path
Motivation:
The primary motivation for using this command is to retrieve specific operational data from a network device. By specifying a particular path, the user can focus on obtaining detailed information about a specific aspect of the device’s state. This can be extremely useful for troubleshooting or observing specific parameters or metrics over time.
Explanation:
--address ip:port
: This argument specifies the IP address and port number of the network device from which the data is being retrieved. It allows the command to establish a connection to the device for data transfer.get
: This sub-command denotes the operation being performed, which is fetching or retrieving data.--path path
: This specifies the XPath-like identifier that indicates the exact data hierarchy or location on the device from which information is to be retrieved. It effectively narrows down the scope to a precise state element or configuration node.
Example Output:
{
"interface": {
"name": "Ethernet0",
"oper-status": "UP",
"ip": "192.168.1.1"
}
}
Use case 2: Query the Device State at Multiple Paths
Code:
gnmic -a ip:port get --path path/to/file_or_directory1 --path path/to/file_or_directory2
Motivation:
This use case is centered around the need to retrieve data from multiple specified paths. It is particularly useful when an administrator needs to gather multiple pieces of information simultaneously from different parts of a device’s state. This can save time and effort when monitoring various parameters.
Explanation:
-a ip:port
: Similar to the previous use case, it identifies the network device’s address and connection point.get
: Indicates the action to retrieve data.--path path/to/file_or_directory1
,--path path/to/file_or_directory2
: These multiple--path
arguments allow the user to specify more than one path from which to retrieve data. The system retrieves data from each of these paths concurrently, capturing multiple snapshots of operational data which are significant for comprehensive status checks.
Example Output:
{
"interface": {
"name": "Ethernet0",
"oper-status": "UP"
},
"system": {
"hostname": "router-1",
"uptime": 13456
}
}
Use case 3: Query the Device State at Multiple Paths with a Common Prefix
Code:
gnmic -a ip:port get --prefix prefix --path path/to/file_or_directory1 --path path/to/file_or_directory2
Motivation:
Using a common prefix allows for structured and hierarchical data retrieval, which can simplify the querying process for devices with systematically organized data nodes. This approach is beneficial when you need to fetch grouped data ensuring a coherent dataset structure with less repetitive specification of path segments.
Explanation:
-a ip:port
: Represents the device’s address information.get
: Command to retrieve data.--prefix prefix
: This introduces a common starting structure to the paths, reducing redundancy when querying multiple paths that share an initial portion.--path path/to/file_or_directory1
,--path path/to/file_or_directory2
: These paths are appended to the common prefix, enabling a streamlined retrieval process for related data nodes.
Example Output:
{
"network": {
"interface": {
"name": "Ethernet0",
"oper-status": "UP"
},
"bgp": {
"as": "65000",
"enabled": true
}
}
}
Use case 4: Query the Device State and Specify Response Encoding (json_ietf)
Code:
gnmic -a ip:port get --path path --encoding json_ietf
Motivation:
The motivation behind specifying the response encoding, like json_ietf
, is to ensure that the data is returned in a format that complies with specific standards, making it easier to parse and integrate into other software systems. This can facilitate smoother data exchange and compatibility between systems that rely on standardized data representations.
Explanation:
-a ip:port
: Indicates the target device’s IP address and connection port.get
: Specifies that data retrieval is the intended action.--path path
: Identifies the location of the data within the device’s state.--encoding json_ietf
: Instructs the command to format the response in JSON IETF standard, which is a precise and interoperable format for network data, providing consistent data interpretation and exchange.
Example Output:
{
"ietf-interfaces:interface": [
{
"name": "Ethernet0",
"ietf-ip:ipv4": {
"address": [
{
"ip": "192.168.1.1",
"netmask": "255.255.255.0"
}
]
},
"oper-status": "UP"
}
]
}
Conclusion:
Using the gnmic get
command, network administrators can efficiently fetch and monitor operational data from network devices. Each use case demonstrates its versatility by catering to varying specific needs—whether it involves targeting a single path, querying multiple paths, utilizing a common prefix for structured data, or ensuring data is returned in a standardized format. This command is an essential tool in maintaining network health and ensuring efficient data management.