Welcome to the NetGrph Documentation
NetGrph is an abstract network model for automation, providing a unified network view across diverse network components in order to manage them as a single system via the Neo4j Graph Database. This enables you to navigate your traditional LAN/WAN and/or mixed SDN networks as interconnected nodes and relationships in software, all modeled via the network configurations as they exist rather than secondary sources.
NetGrph can perform universal L2/L3/L4 path traversals, providing context for each layer along the path. It also serves as a VLAN and CIDR database, showing how everything is related. It scales well on even the largest networks, allowing sub-second queries across thousands of network devices. This enables the mapping of complex network relationships for discovery and automation.
Data from queries can be returned as CSV, JSON, YAML, or Ascii tree-art. Network Visualizations can be created by querying the Neo4j webapp as shown below. The data model should translate for use with tools such as D3.js, vis.js or Graphwiz via both the native Neo4j API as well as NetGrph's tree data structure.
All data is accessible via an API, and the lightweight netgrph client can be distributed to multiple machines.
Graph Data Model Example: Vlan 110 -> 200 Traversal
[L3 SVIs: Yellow] [L2 VLANs: Green] [Switches/Routers: Blue]
Features
- Universal Layer2 - Layer4 pathfinding between any two network devices (Full L2 path completion requires NetDB)
- Path Queries can return a single path, or all ECMPs
- L3 Network Database of all networks (Automated, VRF aware, and searchable)
- Search for networks via CIDR or VRF/Role based filters (eg. perim:printers|thinclient, all printers and thin clients in the perim VRF)
- VLAN Inventory of all VLAN instances across the network, segmented by switch domain
- Maps L2 VLAN bridges across switch domains, and calculates local/global STP roots
- Maps L2 paths between devices (regexs supported, eg. dc. -> dc. for all datacenter links)
- Reports the configured VLANs and actual VLANs existing on each link for all L2 paths
- Secure REST API Server and Client
- High performance, low latency queries (All queries are sub-second)
- Easily extendable to support mixed-vendor environnments
- Ansible playbooks for a five minute install on Ubuntu 14.04/16.04
Planned Features
- Rewrite API to be more consistent
- Develop a Web frontend
- Integrate with Napalm for datasources
Requirements
- Python 3.4+ (recommend running via virtualenv)
- Ubuntu or MacOS (should run on any Python compatible platform, but I only support these)
- Neo4j Graph Database and Java8
- For Cisco devices, must provide stored configurations (See Rancid / Oxidized)
- Requires CDP/LLDP Discovery Data via NetDB or NetCrawl
- Third-party network devices need to be parsed into the NetGrph CSV format
- Please send me any parsers you create
Supported Devices
NetGrph is designed to support all network vendors, but currently only has scrapers available for Cisco IOS and NXOS devices. Adding support for other devices should be relatively trivial.
About NetGrph
NetGrph can perform universal L2/L3/L4 path traversals, providing context for each layer along the path. It also serves as a VLAN and CIDR database, showing how everything is related. It scales well on even the largest networks, allowing sub-second queries across thousands of network devices. This enables the mapping of complex network relationships for discovery and automation.
Data from queries can be returned as CSV, JSON, YAML, or Ascii tree-art. Network Visualizations can be created by querying the Neo4j webapp as shown below. The data model should translate for use with tools such as D3.js, vis.js or Graphwiz via both the native Neo4j API as well as NetGrph's tree data structure.
All data is accessible via an API, and the lightweight netgrph client can be distributed to multiple machines.
Find out more About NetGrph
Documentation Guide
Installation
See the Installation Guide
Ansible Instructions are located Here
Tutorials
See the Tutorials Documentation
Command Line Interface
See the Command Line Interface Documentation
REST API Documentation
See the REST API Documentation