6.4 KiB
VXLAN Telemetry Discovery - SUCCESS! 🎉
What We Discovered
The path /interfaces/interface[name=Vxlan1] WORKS and returns rich VXLAN data including Arista's arista-exp-eos-vxlan augmentation!
Test Command
gnmic -a 172.16.0.25:6030 -u admin -p admin --insecure \
get --path /interfaces/interface[name=Vxlan1]
Response Structure
{
"interfaces/interface": {
"arista-exp-eos-vxlan:arista-vxlan": {
"config": {
"src-ip-intf": "Loopback1",
"udp-port": 4789,
"mac-learn-mode": "LEARN_FROM_ANY",
...
},
"state": {
"src-ip-intf": "Loopback1",
"udp-port": 4789,
...
},
"vlan-to-vnis": {
"vlan-to-vni": [
{
"vlan": 40,
"vni": 110040,
"state": {...},
"config": {...}
}
]
}
},
"openconfig-interfaces:config": {...},
"openconfig-interfaces:state": {...}
}
}
VXLAN Metrics Available
1. VNI-to-VLAN Mappings
From arista-vxlan.vlan-to-vnis.vlan-to-vni[]:
# Metrics will be like:
gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vlan{source="leaf1"}
gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{source="leaf1"}
Use Case: Know which VLANs are mapped to which VNIs on each VTEP
2. VXLAN Source Interface
From arista-vxlan.state.src-ip-intf:
gnmic_vxlan_interfaces_interface_arista_vxlan_state_src_ip_intf{source="leaf1"} = "Loopback1"
Use Case: Verify correct loopback is used for VTEP source
3. VXLAN UDP Port
From arista-vxlan.state.udp-port:
gnmic_vxlan_interfaces_interface_arista_vxlan_state_udp_port{source="leaf1"} = 4789
Use Case: Verify standard VXLAN port configuration
4. MAC Learning Mode
From arista-vxlan.state.mac-learn-mode:
gnmic_vxlan_interfaces_interface_arista_vxlan_state_mac_learn_mode{source="leaf1"} = "LEARN_FROM_ANY"
Use Case: Verify MAC learning configuration
5. MLAG Configuration
From arista-vxlan.state.mlag-shared-router-mac-config:
gnmic_vxlan_interfaces_interface_arista_vxlan_state_mlag_shared_router_mac_config{source="leaf1"}
Use Case: MLAG-specific VXLAN settings
Updated gnmic Configuration
The updated gnmic.yaml now includes:
subscriptions:
vxlan:
paths:
- /interfaces/interface[name=Vxlan1]
mode: stream
stream-mode: on_change # Config changes are infrequent
encoding: json_ietf
Key points:
- Uses
on_changestreaming (VNI mappings don't change often) - Only subscribed on leaf switches (spines don't have VXLAN)
- Captures full Arista VXLAN augmentation
Grafana Dashboard Queries
VNI Count per VTEP
# Count active VNIs per leaf
count by (source, vtep) (
gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni
)
VNI-to-VLAN Mapping Table
Create a table visualization with:
# Show VNI -> VLAN mappings
gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni
Format columns:
source= Device namevlan= VLAN IDValue= VNI number
VXLAN Configuration Check
# Check if all leaves use Loopback1
gnmic_vxlan_interfaces_interface_arista_vxlan_state_src_ip_intf
# Check if all use standard UDP port 4789
gnmic_vxlan_interfaces_interface_arista_vxlan_state_udp_port
Combined VXLAN Health Dashboard
Combine with existing metrics:
# VXLAN tunnel bandwidth
rate(gnmic_interfaces_interface_state_counters_out_octets{interface_name="Vxlan1"}[1m]) * 8
# VXLAN tunnel errors
rate(gnmic_interfaces_interface_state_counters_in_errors{interface_name="Vxlan1"}[5m])
# VXLAN interface status
gnmic_interfaces_interface_state_oper_status{interface_name="Vxlan1"}
# VNI count
count by (source) (gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni)
# EVPN neighbor count (VTEP reachability)
count by (source) (gnmic_bgp_neighbors_neighbor_state_session_state{afi_safi_name="L2VPN_EVPN"} == 6)
Benefits Over Previous Approach
Before (Without VXLAN Subscription)
- ✅ Vxlan1 interface traffic
- ✅ BGP EVPN neighbors
- ❌ No VNI-to-VLAN visibility
- ❌ No VXLAN config verification
Now (With VXLAN Subscription)
- ✅ Vxlan1 interface traffic
- ✅ BGP EVPN neighbors
- ✅ VNI-to-VLAN mappings
- ✅ VXLAN source interface
- ✅ UDP port configuration
- ✅ MAC learning mode
- ✅ MLAG VXLAN settings
Deployment
cd monitoring
docker-compose restart gnmic
# Verify VXLAN subscription is working
docker logs gnmic | grep vxlan
# Check metrics
curl http://localhost:9804/metrics | grep vxlan | head -20
# Expected metrics:
# gnmic_vxlan_interfaces_interface_arista_vxlan_state_src_ip_intf{...}
# gnmic_vxlan_interfaces_interface_arista_vxlan_state_udp_port{...}
# gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{...}
# gnmic_vxlan_interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vlan{...}
Why This Works
- Arista augments OpenConfig -
arista-exp-eos-vxlanadds VXLAN-specific data to the standard interface model - Vxlan1 is a real interface - It's in the standard
/interfaces/interfacetree - OpenConfig + native data - We get both OpenConfig state AND Arista-specific VXLAN config
This is the best of both worlds - standard OpenConfig paths with vendor-specific augmentations!
What About Other Native Paths?
The paths we tested that didn't work:
- ❌
/Sysdb/bridging/vxlan/status- Requiresprovider eos-native - ❌
/Smash/bridging/vxlan- Not exposed via gNMI
These require additional configuration on the switches:
management api gnmi
transport grpc default
provider eos-native
But we don't need them! The Vxlan1 interface path gives us everything we need.
Summary
🎉 Success! We discovered that:
/interfaces/interface[name=Vxlan1]works perfectly- Returns rich VXLAN data via Arista augmentations
- Includes VNI-to-VLAN mappings, source interface, and config
- No need for native
eos-nativeprovider paths
Your monitoring stack now has complete VXLAN visibility including:
- VXLAN tunnel traffic (already had)
- VTEP reachability via BGP EVPN (already had)
- VNI-to-VLAN mappings (NEW!)
- VXLAN configuration verification (NEW!)
Deploy with confidence! 🚀