This repo hosts a SR Linux NDK agent that exposes a Prometheus endpoint ready to be scraped by a Prometheus Server.
It uses SRL's gnmi-server over the unix socket address to retrieve gNMI updates, it then builds the Prometheus metrics and exposes them through a configurable HTTP address.
- gNMI server unix socket is enabled
- The configured HTTP address and port are accepted by SRL CPM filters
Download the RPM from the github releases page, copy it to your SRL instance and run:
sudo rpm -i srl-prometheus-exporter_0.1.0_Linux_x86_64.rpmConnect to your SRL instance and reload the application manager
--{ + running }--[ ]--
A:srl1# tools system app-management application app_mgr reloadCheck that the prometheus-exporter app is now running
A:srl1# show system application | grep prometheus-exporter
| prometheus-exporter | 2208 | running | | 2021-09-10T21:31:30.691Z |
--{ + running }--[ ]-- The metrics exposed can be configured using SRL's CLI
--{ + running }--[ system prometheus-exporter ]--
A:srl1# info detail
address ::
port 8888
network-instance mgmt
http-path /metrics
admin-state enable
metric interfaces {
state enable
help-text "SRLinux generated metric"
}
The predefined metric names and the corresponding gNMI paths used to build the metrics are as below:
| metric name | gNMI paths |
|---|---|
| "interfaces" | "/interface/statistics" |
| "/interface/ethernet/statistics" | |
| "/interface/queue-statistics" | |
| "/interface/lag/members/statistics" | |
| "subinterfaces" | "/interface/subinterface/statistics" |
| "lldp" | "/system/lldp/interface/statistics" |
| "platform" | "/platform/control/disk/statistics" |
| "/platform/control/cpu/software-interrupt" | |
| "/platform/control/memory" | |
| "/platform/linecard/forwarding-complex/buffer-memory" | |
| "acl" | "/acl/policers/system-cpu-policer/statistics" |
| "/acl/policers/policer/statistics" | |
| "/acl/ipv4-filter/entry/statistics" | |
| "/acl/ipv6-filter/entry/statistics" | |
| "/acl/cpm-filter/ipv4-filter/entry/statistics" | |
| "/acl/cpm-filter/ipv6-filter/entry/statistics" | |
| "aaa" | "/system/aaa/server-group/server/statistics" |
| "network-instance-bridge-table" | "/network-instance/bridge-table/statistics" |
| "network-instance-icmp" | "/network-instance/icmp/statistics" |
| "network-instance-icmp6" | "/network-instance/icmp6/statistics" |
| "route-table-ipv4-unicast" | "/network-instance/route-table/ipv4-unicast/statistics" |
| "route-table-ipv6-unicast" | "/network-instance/route-table/ipv6-unicast/statistics" |
| "mpls" | "/network-instance/route-table/mpls/statistics" |
| "isis" | "/network-instance/protocols/isis/instance/statistics" |
| "bgp" | "/network-instance/protocols/bgp/group/statistics" |
| "udp" | "/network-instance/udp/statistics" |
| "tcp" | "/network-instance/tcp/statistics" |
The predefined paths and metrics names can be changed at startup using a configuration file.
Custom metrics can be added at runtime using SRL's CLI/gNMI/JSON-RPC interfaces as below:
--{ + candidate shared default }--[ system prometheus-exporter ]--
A:srl1# custom-metric my_metric paths [ /network-instance/protocols/bgp/statistics ]
--{ +* candidate shared default }--[ system prometheus-exporter ]--
A:srl1# commit now
All changes have been committed. Leaving candidate mode.
--{ + running }--[ system prometheus-exporter ]--
A:srl1# info
// snipped...
custom-metric my_metric {
paths [
/network-instance/protocols/bgp/statistics
]
}