gnmi

metrics
 

Only support proto encoding, you can check this by the capabilities response

gnmic -a <mgmt-address> \
  --skip-verify \
  -u <username> \
  -p <password> \
  -e proto \
  cap

To config gnmi source, you’d better install gnmic to get the correct path to subscribe

gnmic -a <mgmt-address> \
  --skip-verify \
  -u <username> \
  -p <password> \
  -e proto \
  get \
  --path /openconfig/interfaces/interface/subinterfaces/subinterface/state/counters

you’ll got something like this

[
  {
    "source": "172.20.20.2:57400",
    "timestamp": 1763226695134961250,
    "time": "2025-11-16T01:11:35.13496125+08:00",
    "updates": [
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-octets",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/in-octets": 104425
        }
      },
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-pkts",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/in-pkts": 1040
        }
      },
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-discards",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/in-discards": 1040
        }
      },
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-octets",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/out-octets": 686905
        }
      },
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-pkts",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/out-pkts": 943
        }
      },
      {
        "Path": "interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-discards",
        "values": {
          "interfaces/interface/subinterfaces/subinterface/state/counters/out-discards": 0
        }
      }
    ]
  }
]

The metric name is generated from path, simply replace / and - with _, and add proper tags. e.g.

interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-octets

to

interfaces_interface_state_counters_out_octets{name="mgmt0"} 4355

Example

# Address and port of the gNMI GRPC server
#
# Required
endpoints:
  - http://172.20.20.2:57400

# Configures the TLS options for incoming/outgoing connections.
#
# Optional
tls:
  # Absolute path to an additional CA certificate file, in DER or PEM
  # format(X.509), or an inline CA certificate in PEM format.
  #
  # Optional
  ca: null

  # Absolute path to a certificate file used to identify this connection,
  # in DER or PEM format (X.509) or PKCS#12, or an inline certificate in
  # PEM format. If this is set and is not a PKCS#12 archive, "key_file"
  # must also be set.
  #
  # Optional
  cert: null

  # Absolute path to a private key file used to identify this connection,
  # in DER or PEM format (PKCS#8), or an inline private key in PEM format.
  # If this is set, "crt_file" must also be set.
  #
  # Optional
  key: null

  # Pass phrase used to unlock the encrypted key file. This has no effect
  # unless "key" is set.
  #
  # Optional
  key_pass: null

  # Enables certificate verification.
  # If enabled, certificates must not be expired and must be issued by a trusted issuer.
  # This verification operates in a hierarchical manner, checking that the leaf certificate
  # (the certificate presented by the client/server) is not only valid, but that the issuer
  # of that certificate is also valid, and so on until the verification process reaches a
  # root certificate.
  # 
  # Relevant for both incoming and outgoing connections.
  # 
  # Do NOT set this to false unless you understand the risks of not verifying the
  # validity of certificates.
  #
  # Optional
  verify_certificate: true

  # Enables hostname verification. If enabled, the hostname used to connect to the remote
  # host must be present in the TLS certificate presented by the remote host, either as the
  # Common Name or as an entry in the Subject Alternative Name extension.
  # 
  # Only relevant for outgoing connections.
  # 
  # Do NOT set this to false unless you understand the risks of not verifying the remote hostname.
  #
  # Optional
  verify_hostname: true

# Auth credentials
#
# Optional
auth:
  # The authentication username.
  #
  # Required
  username: ""

  # The authentication password.
  #
  # Required
  password: ""

interval: 15s

subscriptions:
  # openconfig-interfaces
  - path: /openconfig/interfaces/interface/state/counters
  - path: /openconfig/interfaces/interface/subinterfaces/subinterface/state/counters
  # openconfig-lldp
  - path: /openconfig/lldp/state/counters

Output

# HELP interfaces_interface_state_counters_carrier_transitions /interfaces/interface[name=ethernet-1/1]/state/counters/carrier-transitions
# TYPE interfaces_interface_state_counters_carrier_transitions gauge
interfaces_interface_state_counters_carrier_transitions{name="ethernet-1/1"} 1
interfaces_interface_state_counters_carrier_transitions{name="mgmt0"} 1
# HELP interfaces_interface_state_counters_in_broadcast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/in-broadcast-pkts
# TYPE interfaces_interface_state_counters_in_broadcast_pkts gauge
interfaces_interface_state_counters_in_broadcast_pkts{name="ethernet-1/1"} 0
interfaces_interface_state_counters_in_broadcast_pkts{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_in_discards /interfaces/interface[name=ethernet-1/1]/state/counters/in-discards
# TYPE interfaces_interface_state_counters_in_discards gauge
interfaces_interface_state_counters_in_discards{name="ethernet-1/1"} 5
interfaces_interface_state_counters_in_discards{name="mgmt0"} 20
# HELP interfaces_interface_state_counters_in_errors /interfaces/interface[name=ethernet-1/1]/state/counters/in-errors
# TYPE interfaces_interface_state_counters_in_errors gauge
interfaces_interface_state_counters_in_errors{name="ethernet-1/1"} 0
interfaces_interface_state_counters_in_errors{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_in_fcs_errors /interfaces/interface[name=ethernet-1/1]/state/counters/in-fcs-errors
# TYPE interfaces_interface_state_counters_in_fcs_errors gauge
interfaces_interface_state_counters_in_fcs_errors{name="ethernet-1/1"} 0
interfaces_interface_state_counters_in_fcs_errors{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_in_multicast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/in-multicast-pkts
# TYPE interfaces_interface_state_counters_in_multicast_pkts gauge
interfaces_interface_state_counters_in_multicast_pkts{name="ethernet-1/1"} 5
interfaces_interface_state_counters_in_multicast_pkts{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_in_octets /interfaces/interface[name=ethernet-1/1]/state/counters/in-octets
# TYPE interfaces_interface_state_counters_in_octets gauge
interfaces_interface_state_counters_in_octets{name="ethernet-1/1"} 350
interfaces_interface_state_counters_in_octets{name="mgmt0"} 2237
# HELP interfaces_interface_state_counters_in_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/in-pkts
# TYPE interfaces_interface_state_counters_in_pkts gauge
interfaces_interface_state_counters_in_pkts{name="ethernet-1/1"} 5
interfaces_interface_state_counters_in_pkts{name="mgmt0"} 24
# HELP interfaces_interface_state_counters_in_unicast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/in-unicast-pkts
# TYPE interfaces_interface_state_counters_in_unicast_pkts gauge
interfaces_interface_state_counters_in_unicast_pkts{name="ethernet-1/1"} 0
interfaces_interface_state_counters_in_unicast_pkts{name="mgmt0"} 4
# HELP interfaces_interface_state_counters_out_broadcast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/out-broadcast-pkts
# TYPE interfaces_interface_state_counters_out_broadcast_pkts gauge
interfaces_interface_state_counters_out_broadcast_pkts{name="ethernet-1/1"} 0
interfaces_interface_state_counters_out_broadcast_pkts{name="mgmt0"} 6
# HELP interfaces_interface_state_counters_out_discards /interfaces/interface[name=ethernet-1/1]/state/counters/out-discards
# TYPE interfaces_interface_state_counters_out_discards gauge
interfaces_interface_state_counters_out_discards{name="ethernet-1/1"} 0
interfaces_interface_state_counters_out_discards{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_out_errors /interfaces/interface[name=ethernet-1/1]/state/counters/out-errors
# TYPE interfaces_interface_state_counters_out_errors gauge
interfaces_interface_state_counters_out_errors{name="ethernet-1/1"} 0
interfaces_interface_state_counters_out_errors{name="mgmt0"} 0
# HELP interfaces_interface_state_counters_out_multicast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/out-multicast-pkts
# TYPE interfaces_interface_state_counters_out_multicast_pkts gauge
interfaces_interface_state_counters_out_multicast_pkts{name="ethernet-1/1"} 13
interfaces_interface_state_counters_out_multicast_pkts{name="mgmt0"} 32
# HELP interfaces_interface_state_counters_out_octets /interfaces/interface[name=ethernet-1/1]/state/counters/out-octets
# TYPE interfaces_interface_state_counters_out_octets gauge
interfaces_interface_state_counters_out_octets{name="ethernet-1/1"} 2236
interfaces_interface_state_counters_out_octets{name="mgmt0"} 4355
# HELP interfaces_interface_state_counters_out_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/out-pkts
# TYPE interfaces_interface_state_counters_out_pkts gauge
interfaces_interface_state_counters_out_pkts{name="ethernet-1/1"} 13
interfaces_interface_state_counters_out_pkts{name="mgmt0"} 40
# HELP interfaces_interface_state_counters_out_unicast_pkts /interfaces/interface[name=ethernet-1/1]/state/counters/out-unicast-pkts
# TYPE interfaces_interface_state_counters_out_unicast_pkts gauge
interfaces_interface_state_counters_out_unicast_pkts{name="ethernet-1/1"} 0
interfaces_interface_state_counters_out_unicast_pkts{name="mgmt0"} 2
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_in_discards /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-discards
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_in_discards gauge
interfaces_interface_subinterfaces_subinterface_state_counters_in_discards{index="0",name="mgmt0"} 23
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_in_octets /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-octets
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_in_octets gauge
interfaces_interface_subinterfaces_subinterface_state_counters_in_octets{index="0",name="mgmt0"} 2195
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_in_pkts /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/in-pkts
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_in_pkts gauge
interfaces_interface_subinterfaces_subinterface_state_counters_in_pkts{index="0",name="mgmt0"} 23
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_out_discards /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-discards
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_out_discards gauge
interfaces_interface_subinterfaces_subinterface_state_counters_out_discards{index="0",name="mgmt0"} 0
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_out_octets /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-octets
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_out_octets gauge
interfaces_interface_subinterfaces_subinterface_state_counters_out_octets{index="0",name="mgmt0"} 1742
# HELP interfaces_interface_subinterfaces_subinterface_state_counters_out_pkts /interfaces/interface[name=mgmt0]/subinterfaces/subinterface[index=0]/state/counters/out-pkts
# TYPE interfaces_interface_subinterfaces_subinterface_state_counters_out_pkts gauge
interfaces_interface_subinterfaces_subinterface_state_counters_out_pkts{index="0",name="mgmt0"} 21
# HELP lldp_state_counters_entries_aged_out /lldp/state/counters/entries-aged-out
# TYPE lldp_state_counters_entries_aged_out gauge
lldp_state_counters_entries_aged_out 0
# HELP lldp_state_counters_frame_discard /lldp/state/counters/frame-discard
# TYPE lldp_state_counters_frame_discard gauge
lldp_state_counters_frame_discard 0
# HELP lldp_state_counters_frame_error_in /lldp/state/counters/frame-error-in
# TYPE lldp_state_counters_frame_error_in gauge
lldp_state_counters_frame_error_in 0
# HELP lldp_state_counters_frame_in /lldp/state/counters/frame-in
# TYPE lldp_state_counters_frame_in gauge
lldp_state_counters_frame_in 0
# HELP lldp_state_counters_frame_out /lldp/state/counters/frame-out
# TYPE lldp_state_counters_frame_out gauge
lldp_state_counters_frame_out 26
# HELP lldp_state_counters_tlv_accepted /lldp/state/counters/tlv-accepted
# TYPE lldp_state_counters_tlv_accepted gauge
lldp_state_counters_tlv_accepted 0
# HELP lldp_state_counters_tlv_discard /lldp/state/counters/tlv-discard
# TYPE lldp_state_counters_tlv_discard gauge
lldp_state_counters_tlv_discard 0
# HELP lldp_state_counters_tlv_unknown /lldp/state/counters/tlv-unknown
# TYPE lldp_state_counters_tlv_unknown gauge
lldp_state_counters_tlv_unknown 0