From b34b0eed7d79146d4c9898b13014548862839677 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Tue, 16 Dec 2025 18:51:30 +0000 Subject: [PATCH] Enhance gnmic config for Flow Plugin support with BGP/EVPN telemetry --- monitoring/gnmic/gnmic.yaml | 194 ++++++++++++++++++++++++++++++------ 1 file changed, 163 insertions(+), 31 deletions(-) diff --git a/monitoring/gnmic/gnmic.yaml b/monitoring/gnmic/gnmic.yaml index 0cc3c16..63608da 100644 --- a/monitoring/gnmic/gnmic.yaml +++ b/monitoring/gnmic/gnmic.yaml @@ -1,5 +1,5 @@ # gNMIc configuration for Arista EVPN-VXLAN fabric -# Collects gNMI telemetry and exposes Prometheus metrics +# Enhanced for Flow Plugin visualization with comprehensive telemetry # # Usage: # gnmic subscribe --config /path/to/gnmic.yaml @@ -11,9 +11,9 @@ # gnmic -a 172.16.0.1:6030 -u admin -p admin --insecure \ # subscribe --path /interfaces/interface/state --stream-mode sample --sample-interval 10s -# ============================================================================== +# ============================================================================ # Global settings -# ============================================================================== +# ============================================================================ username: admin password: admin insecure: true @@ -23,171 +23,278 @@ debug: true timeout: 30s retry: 10s -# ============================================================================== +# ============================================================================ # Target devices - All switches in the fabric -# ============================================================================== +# ============================================================================ targets: - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- # Spine switches (AS 65000) - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- spine1: address: 172.16.0.1:6030 subscriptions: - interfaces - system + - bgp + - routing labels: role: spine fabric_tier: spine device: spine1 + asn: "65000" spine2: address: 172.16.0.2:6030 subscriptions: - interfaces - system + - bgp + - routing labels: role: spine fabric_tier: spine device: spine2 + asn: "65000" - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- # Leaf switches - VTEP1 (AS 65001) - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- leaf1: address: 172.16.0.25:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep1 mlag_pair: "1" device: leaf1 + asn: "65001" leaf2: address: 172.16.0.50:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep1 mlag_pair: "1" device: leaf2 + asn: "65001" - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- # Leaf switches - VTEP2 (AS 65002) - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- leaf3: address: 172.16.0.27:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep2 mlag_pair: "2" device: leaf3 + asn: "65002" leaf4: address: 172.16.0.28:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep2 mlag_pair: "2" device: leaf4 + asn: "65002" - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- # Leaf switches - VTEP3 (AS 65003) - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- leaf5: address: 172.16.0.29:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep3 mlag_pair: "3" device: leaf5 + asn: "65003" leaf6: address: 172.16.0.30:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep3 mlag_pair: "3" device: leaf6 + asn: "65003" - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- # Leaf switches - VTEP4 (AS 65004) - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- leaf7: address: 172.16.0.31:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep4 mlag_pair: "4" device: leaf7 + asn: "65004" leaf8: address: 172.16.0.32:6030 subscriptions: - interfaces - system + - bgp + - routing + - vxlan + - mlag labels: role: leaf fabric_tier: leaf vtep: vtep4 mlag_pair: "4" device: leaf8 + asn: "65004" -# ============================================================================== +# ============================================================================ # Subscriptions - define what telemetry to collect -# ============================================================================== +# ============================================================================ subscriptions: - # --------------------------------------------------------------------------- - # Interface statistics - for weathermap bandwidth visualization - # Simplified path that works with Arista cEOS OpenConfig implementation - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- + # Interface statistics - for Flow Plugin bandwidth visualization + # High-frequency sampling for real-time traffic visualization + # -------------------------------------------------------------------------- interfaces: paths: - - /interfaces/interface/state + # Interface state and statistics + - /interfaces/interface/state/counters + - /interfaces/interface/state/oper-status + - /interfaces/interface/state/admin-status + # Interface configuration for metadata + - /interfaces/interface/config/name + - /interfaces/interface/config/description + # Ethernet-specific counters + - /interfaces/interface/ethernet/state/counters mode: stream stream-mode: sample - sample-interval: 15s + sample-interval: 10s encoding: json_ietf - # --------------------------------------------------------------------------- - # System information - hostname, uptime, memory - # --------------------------------------------------------------------------- + # -------------------------------------------------------------------------- + # System information - hostname, uptime, memory, CPU + # -------------------------------------------------------------------------- system: paths: - /system/state + - /system/memory/state + - /system/cpus/cpu/state mode: stream stream-mode: sample sample-interval: 30s encoding: json_ietf -# ============================================================================== + # -------------------------------------------------------------------------- + # BGP telemetry - for fabric health and EVPN overlay monitoring + # -------------------------------------------------------------------------- + bgp: + paths: + # BGP neighbor state + - /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/state + # BGP AFI/SAFI state (including EVPN) + - /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state + # BGP global state + - /network-instances/network-instance/protocols/protocol/bgp/global/state + mode: stream + stream-mode: sample + sample-interval: 30s + encoding: json_ietf + + # -------------------------------------------------------------------------- + # Routing information - for underlay health + # -------------------------------------------------------------------------- + routing: + paths: + - /network-instances/network-instance/protocols/protocol/static-routes + - /network-instances/network-instance/afts/ipv4-unicast/ipv4-entry + mode: stream + stream-mode: sample + sample-interval: 60s + encoding: json_ietf + + # -------------------------------------------------------------------------- + # VXLAN telemetry - for overlay visibility + # -------------------------------------------------------------------------- + vxlan: + paths: + - /network-instances/network-instance/vlans/vlan/members/member/state + - /network-instances/network-instance/connection-points/connection-point/endpoints + mode: stream + stream-mode: on_change + encoding: json_ietf + + # -------------------------------------------------------------------------- + # MLAG telemetry - for redundancy monitoring + # -------------------------------------------------------------------------- + mlag: + paths: + - /lacp/interfaces/interface/state + - /lacp/interfaces/interface/members/member/state + mode: stream + stream-mode: sample + sample-interval: 15s + encoding: json_ietf + +# ============================================================================ # Prometheus output configuration -# ============================================================================== +# ============================================================================ outputs: prometheus: type: prometheus @@ -197,17 +304,20 @@ outputs: append-subscription-name: true export-timestamps: true strings-as-labels: true - debug: true + debug: false # Expiration time for metrics (prevents stale data) expiration: 120s # Event processors to clean up metric names event-processors: - trim-prefixes + - add-source-label + - interface-name-processor -# ============================================================================== +# ============================================================================ # Event processors - clean up and transform metrics -# ============================================================================== +# ============================================================================ processors: + # Remove long path prefixes from metric names trim-prefixes: event-strings: value-names: @@ -215,3 +325,25 @@ processors: transforms: - path-base: apply-on: "name" + + # Add source label from device name + add-source-label: + event-strings: + value-names: + - ".*" + transforms: + - replace: + apply-on: "name" + old: "" + new: "" + + # Process interface names for better readability + interface-name-processor: + event-strings: + value-names: + - ".*interface.*" + transforms: + - replace: + apply-on: "value" + old: "Ethernet" + new: "eth"