{ "annotations": {"list": [{"builtIn": 1,"datasource": {"type": "datasource","uid": "grafana"},"enable": true,"hide": true,"iconColor": "rgba(0, 211, 255, 1)","name": "Annotations & Alerts","type": "dashboard"}]}, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, "id": null, "links": [], "panels": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"custom": {"align": "auto","displayMode": "auto"}}, "overrides": [] }, "gridPos": {"h": 10,"w": 24,"x": 0,"y": 0}, "id": 1, "options": {"footer": {"fields": "","reducer": ["sum"],"show": false},"showHeader": true}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT local_router_name as \"Local Router\", \n remote_router_name as \"Remote Router\",\n igp_metric as \"IGP Metric\",\n te_def_metric as \"TE Metric\",\n max_link_bw as \"Max BW (B/s)\",\n max_resv_bw as \"Max Reservable BW\",\n unreserved_bw as \"Unreserved BW\",\n admin_group as \"Admin Group\",\n protection_type as \"Protection\",\n srlg as \"SRLG\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nORDER BY local_router_name, remote_router_name", "refId": "A" } ], "title": "TE Link Capacity Map", "type": "table" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"color": {"mode": "palette-classic"}}, "overrides": [] }, "gridPos": {"h": 10,"w": 12,"x": 0,"y": 10}, "id": 2, "options": { "barRadius": 0, "barWidth": 0.97, "groupWidth": 0.7, "legend": {"displayMode": "list","placement": "bottom"}, "orientation": "auto", "showValue": "auto", "stacking": "none", "tooltip": {"mode": "single","sort": "none"}, "xTickLabelRotation": -45 }, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT local_router_name || ' -> ' || remote_router_name as \"Link\",\n igp_metric as \"IGP Metric\",\n COALESCE(te_def_metric, igp_metric) as \"TE Metric\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nORDER BY igp_metric DESC", "refId": "A" } ], "title": "IGP Metric vs TE Metric Comparison", "type": "barchart" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"color": {"mode": "palette-classic"}}, "overrides": [] }, "gridPos": {"h": 10,"w": 6,"x": 12,"y": 10}, "id": 3, "options": { "legend": {"displayMode": "list","placement": "bottom"}, "pieType": "pie", "reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": true}, "tooltip": {"mode": "single","sort": "none"} }, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COALESCE(admin_group::text, 'None') as \"Admin Group\",\n COUNT(*) as \"Link Count\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nGROUP BY admin_group\nORDER BY \"Link Count\" DESC", "refId": "A" } ], "title": "Admin Group Distribution", "type": "piechart" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"color": {"mode": "palette-classic"}}, "overrides": [] }, "gridPos": {"h": 10,"w": 6,"x": 18,"y": 10}, "id": 4, "options": { "legend": {"displayMode": "list","placement": "bottom"}, "pieType": "pie", "reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": true}, "tooltip": {"mode": "single","sort": "none"} }, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COALESCE(protection_type, 'None') as \"Protection Type\",\n COUNT(*) as \"Link Count\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nGROUP BY protection_type\nORDER BY \"Link Count\" DESC", "refId": "A" } ], "title": "Link Protection Types", "type": "piechart" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"custom": {"align": "auto","displayMode": "auto"}}, "overrides": [] }, "gridPos": {"h": 8,"w": 12,"x": 0,"y": 20}, "id": 5, "options": {"footer": {"fields": "","reducer": ["sum"],"show": false},"showHeader": true}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT nodename as \"Node\",\n routerid as \"Router ID\",\n protocol as \"Protocol\",\n sr_capabilities as \"SR Capabilities (SRGB)\"\nFROM v_ls_nodes\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nORDER BY nodename", "refId": "A" } ], "title": "SR Node Capabilities", "type": "table" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"custom": {"align": "auto","displayMode": "auto"}}, "overrides": [] }, "gridPos": {"h": 8,"w": 12,"x": 12,"y": 20}, "id": 6, "options": {"footer": {"fields": "","reducer": ["sum"],"show": false},"showHeader": true}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT n.nodename as \"Node\",\n p.prefix::text as \"Prefix\",\n p.prefix_len as \"Len\",\n p.metric as \"Metric\",\n p.sr_prefix_sids as \"Prefix SID\",\n p.protocol::text as \"Protocol\"\nFROM ls_prefixes p\nJOIN ls_nodes n ON n.hash_id = p.local_node_hash_id \n AND n.peer_hash_id = p.peer_hash_id\nWHERE p.peer_hash_id = '$peer_hash' AND p.iswithdrawn = false\nORDER BY n.nodename, p.prefix", "refId": "A" } ], "title": "SR Prefix SIDs", "type": "table" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"custom": {"align": "auto","displayMode": "auto"}}, "overrides": [] }, "gridPos": {"h": 8,"w": 12,"x": 0,"y": 28}, "id": 7, "options": {"footer": {"fields": "","reducer": ["sum"],"show": false},"showHeader": true}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT local_router_name as \"Local\",\n remote_router_name as \"Remote\",\n sr_adjacency_sids as \"Adjacency SIDs\",\n peer_node_sid as \"Peer Node SID\",\n mpls_proto_mask::text as \"MPLS Proto\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false\nORDER BY local_router_name, remote_router_name", "refId": "A" } ], "title": "SR Adjacency SIDs", "type": "table" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": {"custom": {"align": "auto","displayMode": "auto"}}, "overrides": [] }, "gridPos": {"h": 8,"w": 12,"x": 12,"y": 28}, "id": 8, "options": {"footer": {"fields": "","reducer": ["sum"],"show": false},"showHeader": true}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT srlg as \"SRLG Value\",\n COUNT(*) as \"Link Count\",\n string_agg(DISTINCT local_router_name || ' -> ' || remote_router_name, ', ') as \"Links\"\nFROM v_ls_links\nWHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false \n AND srlg IS NOT NULL AND srlg != ''\nGROUP BY srlg\nORDER BY COUNT(*) DESC", "refId": "A" } ], "title": "SRLG Groups", "type": "table" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": { "color": {"mode": "thresholds"}, "thresholds": {"mode": "absolute","steps": [{"color": "green","value": null}]} }, "overrides": [] }, "gridPos": {"h": 4,"w": 5,"x": 0,"y": 36}, "id": 9, "options": {"colorMode": "value","graphMode": "area","justifyMode": "auto","orientation": "auto","reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": false},"textMode": "auto"}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COUNT(*) FROM v_ls_links WHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false AND te_def_metric IS NOT NULL", "refId": "A" } ], "title": "Links with TE Metric", "type": "stat" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": { "color": {"mode": "thresholds"}, "thresholds": {"mode": "absolute","steps": [{"color": "green","value": null}]} }, "overrides": [] }, "gridPos": {"h": 4,"w": 5,"x": 5,"y": 36}, "id": 10, "options": {"colorMode": "value","graphMode": "area","justifyMode": "auto","orientation": "auto","reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": false},"textMode": "auto"}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COUNT(*) FROM v_ls_links WHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false AND max_link_bw IS NOT NULL AND max_link_bw > 0", "refId": "A" } ], "title": "Links with Bandwidth", "type": "stat" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": { "color": {"mode": "thresholds"}, "thresholds": {"mode": "absolute","steps": [{"color": "green","value": null}]} }, "overrides": [] }, "gridPos": {"h": 4,"w": 5,"x": 10,"y": 36}, "id": 11, "options": {"colorMode": "value","graphMode": "area","justifyMode": "auto","orientation": "auto","reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": false},"textMode": "auto"}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COUNT(*) FROM v_ls_links WHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false AND srlg IS NOT NULL AND srlg != ''", "refId": "A" } ], "title": "Links with SRLG", "type": "stat" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": { "color": {"mode": "thresholds"}, "thresholds": {"mode": "absolute","steps": [{"color": "green","value": null}]} }, "overrides": [] }, "gridPos": {"h": 4,"w": 5,"x": 15,"y": 36}, "id": 12, "options": {"colorMode": "value","graphMode": "area","justifyMode": "auto","orientation": "auto","reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": false},"textMode": "auto"}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COUNT(*) FROM v_ls_nodes WHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false AND sr_capabilities IS NOT NULL AND sr_capabilities != ''", "refId": "A" } ], "title": "Nodes with SR", "type": "stat" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "fieldConfig": { "defaults": { "color": {"mode": "thresholds"}, "thresholds": {"mode": "absolute","steps": [{"color": "green","value": null}]} }, "overrides": [] }, "gridPos": {"h": 4,"w": 4,"x": 20,"y": 36}, "id": 13, "options": {"colorMode": "value","graphMode": "area","justifyMode": "auto","orientation": "auto","reduceOptions": {"calcs": ["lastNotNull"],"fields": "","values": false},"textMode": "auto"}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT COUNT(*) FROM v_ls_links WHERE peer_hash_id = '$peer_hash' AND iswithdrawn = false AND sr_adjacency_sids IS NOT NULL AND sr_adjacency_sids != ''", "refId": "A" } ], "title": "Links with Adj SID", "type": "stat" }, { "gridPos": {"h": 10,"w": 24,"x": 0,"y": 40}, "id": 14, "options": { "code": {"language": "plaintext","showLineNumbers": false,"showMiniMap": false}, "content": "## Traffic Engineering & Segment Routing Analytics\n\nThis dashboard exposes TE and SR attributes from BGP-LS (RFC 7752) that OpenBMP collects but existing dashboards don't display.\n\n### TE Fields (from ls_links)\n- **admin_group**: Link color/affinity bitmap for RSVP-TE constraints\n- **max_link_bw / max_resv_bw**: Link capacity in bytes/sec\n- **unreserved_bw**: Available bandwidth per priority level\n- **te_def_metric**: TE metric (may differ from IGP metric)\n- **protection_type**: FRR protection (unprotected, shared, dedicated, etc.)\n- **srlg**: Shared Risk Link Group for diverse path computation\n\n### SR Fields\n- **sr_capabilities**: Node SRGB (Segment Routing Global Block) range\n- **sr_prefix_sids**: Prefix SID for SR-MPLS forwarding\n- **sr_adjacency_sids**: Adjacency SIDs for SR-TE path steering\n- **peer_node_sid**: BGP EPE SID (RFC 9086)\n\n### Notes\n- NULL values indicate the router is not advertising that TLV\n- To enable TE metrics on IOS-XR: `mpls traffic-eng` under IS-IS\n- To enable SR: `segment-routing mpls` under IS-IS with prefix-sid-map", "mode": "markdown" }, "title": "About This Dashboard", "type": "text" } ], "schemaVersion": 39, "tags": ["obmp-learning"], "templating": { "list": [ { "current": {}, "datasource": {"type": "postgres","uid": "obmp_postgres"}, "definition": "SELECT __text,__value FROM (\n select peername as __text, peer_hash_id as __value, count(*) as count\n from v_ls_nodes\n group by peername,peer_hash_id) d\nwhere count > 0", "hide": 0, "includeAll": false, "label": "BGP Peer", "multi": false, "name": "peer_hash", "options": [], "query": "SELECT __text,__value FROM (\n select peername as __text, peer_hash_id as __value, count(*) as count\n from v_ls_nodes\n group by peername,peer_hash_id) d\nwhere count > 0", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "type": "query" } ] }, "time": {"from": "now-6h","to": "now"}, "timepicker": {}, "timezone": "", "title": "TE & Segment Routing Analytics", "uid": "obmp-learn-08", "version": 1 }