346 lines
15 KiB
JSON
346 lines
15 KiB
JSON
|
|
{
|
||
|
|
"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
|
||
|
|
}
|