Add roadmap Track E: Internet-scale routing analytics
Plan for a local full-Internet routing table, a generalized N-way router diff, and VRF/RD scoping: - E1: GoBGP container peering AS57355 (Bromirski lab route server) for a live full v4/v6 table, MRT RIB dumps as a 2-hourly fallback, BMP-exported into ip_rib as a GLOBAL-FEED peer. - E2: generic up-to-4-router diff dashboard (presence matrix), generalized from the RR-specific rr_locrib_diff. - E3: global table exploration dashboard. - E4: VRF/RD scoping across unicast + L3VPN dashboards (built to schema; not lab-verifiable with CML IOS-XR). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cc0d20bf9e
commit
d60c582ff6
@ -226,6 +226,88 @@ Replace `build:` with `image:` in docker-compose.yml (keep build as override).
|
||||
|
||||
---
|
||||
|
||||
## Track E: Internet-Scale Routing Analytics
|
||||
|
||||
Adds a local copy of the real global routing table, generalizes router
|
||||
comparison to an N-way diff, and threads VRF/RD scoping through the
|
||||
dashboards. The full-table feed (E1) is the foundation — E2/E3 consume it.
|
||||
|
||||
### E1. GoBGP full-table feed → BMP → `ip_rib`
|
||||
|
||||
**Files**: `docker-compose.yml` (new `gobgp` service), `gobgp/gobgpd.conf` (new), `gobgp/mrt-refresh.sh` (new)
|
||||
|
||||
Stand up a GoBGP container that obtains a full Internet table (IPv4 ~1M +
|
||||
IPv6 ~200k) and BMP-exports it to the existing OpenBMP collector, so the
|
||||
global table lands in `ip_rib` as an ordinary monitored peer — every
|
||||
existing dashboard and the diff then work against it for free.
|
||||
|
||||
- **Primary feed** — eBGP multihop session to Łukasz Bromirski's lab route
|
||||
server, **AS57355** (`85.232.240.179`, `2001:1a68:2c:2::179`). Local ASN
|
||||
private (e.g. 65199); announce nothing; `ebgp-multihop` TTL ~64; receive-only.
|
||||
- **BMP export** — GoBGP `[[bmp-servers]]` block at the collector (port 5000),
|
||||
`route-monitoring-policy = pre-policy`.
|
||||
- **Fallback / seed** — `gobgp/mrt-refresh.sh`, run every 2h (host cron or a
|
||||
sidecar): download the latest RouteViews (`archive.routeviews.org`) or
|
||||
RIPE-RIS MRT RIB dump and `gobgp mrt inject` it into the same instance.
|
||||
- **Identification** — distinct BMP router name (e.g. `GLOBAL-FEED`) so
|
||||
dashboards can include/exclude it.
|
||||
|
||||
Caveats:
|
||||
- The route server is a single volunteer-run host, no SLA — the MRT fallback
|
||||
is the reliability backstop, not optional.
|
||||
- A full table roughly triples `ip_rib` size — see E-scale below.
|
||||
- The feed carries **no VRF/L3VPN** routes — global unicast only.
|
||||
|
||||
### E2. Generic multi-router diff dashboard
|
||||
|
||||
**File**: `obmp-grafana/dashboards/.../router_diff.json` (new, uid `router-diff`), generalized from `rr_locrib_diff.json`
|
||||
|
||||
Replace the hardwired RR1-vs-RR2 model with up to **4 selectable routers**:
|
||||
- Template vars `router1`-`router4` (query type); `router1`/`router2` required,
|
||||
`router3`/`router4` default to a "— none —" sentinel and their panels hide
|
||||
when unset.
|
||||
- **Presence matrix** — rows = prefixes, columns = selected routers, cell =
|
||||
present / next-hop / origin-AS; the core view.
|
||||
- **Divergence view** — table of prefixes where the selected routers disagree
|
||||
(missing on some, or differing best-path attributes).
|
||||
- Keep the per-prefix all-paths drill-down from the RR diff.
|
||||
- The global feed (E1) is selectable as any of the 4 → "lab vs the real
|
||||
Internet." The existing `rr-locrib-diff` stays as the RR-specific quick view.
|
||||
|
||||
### E3. Global table exploration dashboard
|
||||
|
||||
**File**: `obmp-grafana/dashboards/.../global_table.json` (new)
|
||||
|
||||
Explorable dashboard over the `GLOBAL-FEED` peer: prefix count by AFI,
|
||||
origin-AS distribution, prefix-length histogram, search by prefix/AS,
|
||||
more-/less-specific lookups. Doubles as the comparison baseline for E2.
|
||||
|
||||
### E4. VRF / RD awareness
|
||||
|
||||
**Files**: existing unicast + L3VPN dashboards
|
||||
|
||||
Thread a Route-Distinguisher / VRF scoping dimension through the dashboards:
|
||||
- Add a `vrf` / `rd` template variable to the L3VPN dashboards and unicast
|
||||
dashboards where applicable.
|
||||
- VRF/RD columns and filters on RIB tables.
|
||||
- The diff (E2) gains a per-VRF scope.
|
||||
|
||||
Constraint (stated plainly): CML IOS-XR images can't originate L3VPN routes
|
||||
and the global feed carries none — so E4 is **built to the L3VPN schema and
|
||||
unverifiable in this lab**; it validates only against production routers.
|
||||
Keep E4 scope minimal until there's a real L3VPN source.
|
||||
|
||||
### E-scale. PostgreSQL sizing for a full table
|
||||
|
||||
A full v4+v6 table is ~1.2M prefixes; with attributes and history this is a
|
||||
multi-GB addition to `ip_rib` / `ip_rib_log`. Before enabling E1 continuously:
|
||||
confirm disk headroom on `$OBMP_DATA_ROOT`, apply TimescaleDB compression to
|
||||
`ip_rib_log` (also flagged in C6). The `mv_as_adjacency` materialized view
|
||||
(already in place — `postgres/scripts/006_obmp_matviews.sql`) becomes far
|
||||
more valuable once real-Internet AS paths are present.
|
||||
|
||||
---
|
||||
|
||||
## Implementation Order
|
||||
|
||||
| Priority | Step | Track | Description |
|
||||
@ -243,8 +325,12 @@ Replace `build:` with `image:` in docker-compose.yml (keep build as override).
|
||||
| 11 | D1-D2 | Packaging | Config templates + bootstrap script |
|
||||
| 12 | D3 | Packaging | Publish Docker images to registry |
|
||||
| 13 | D4 | Packaging | Documentation |
|
||||
| 14 | E1 | Analytics | GoBGP full-table feed (AS57355 live + MRT fallback) |
|
||||
| 15 | E2 | Analytics | Generic 4-router diff dashboard |
|
||||
| 16 | E3 | Analytics | Global table exploration dashboard |
|
||||
| 17 | E4 | Analytics | VRF/RD scoping (to schema, lab-unverifiable) |
|
||||
|
||||
Steps 1-5 (Track A) unblock everything else. Steps 6-7 and 8-10 can proceed in parallel once the foundation is in place.
|
||||
Steps 1-5 (Track A) unblock everything else. Steps 6-7 and 8-10 can proceed in parallel once the foundation is in place. Track E is independent of A-D: E1 is the foundation for E2/E3; E4 can proceed any time but is lab-unverifiable.
|
||||
|
||||
---
|
||||
|
||||
@ -267,3 +353,6 @@ Steps 1-5 (Track A) unblock everything else. Steps 6-7 and 8-10 can proceed in p
|
||||
- **Juniper BMP differences**: Junos BMP implementation may differ in supported tables/TLVs — test early
|
||||
- **Production scale**: 500K-route labs are slow; production full tables will stress PostgreSQL more
|
||||
- **Credentials in inventory**: Must be gitignored; consider env var fallback for CI/CD
|
||||
- **Volunteer route server (E1)**: the AS57355 full-table feed has no SLA and can flap or be retired — the 2-hourly MRT fallback is mandatory, not optional
|
||||
- **Full-table DB growth (E1)**: a live global feed roughly triples `ip_rib`; size disk and enable `ip_rib_log` compression before turning it on continuously
|
||||
- **VRF work unverifiable (E4)**: no L3VPN source in the CML lab — E4 ships to schema correctness only, validated later against production
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user