Skip to main content

Robust network management system for large backbone networks

Project description

Zino 2

build badge codecov badge Code style: Ruff rtfd badge Python 3.9 Python 3.10 Python 3.11 Python 3.12

This is the modern Python re-implementation of the battle-proven Zino network state monitor, first implemented in Tcl/Scotty at Uninett in the 1990s.

An incomplete list of features that have yet to be ported from legacy Zino:

  • No support for reading trap messages from a trap multiplexer like straps/nmtrapd. This type of functionality may potentially be achieved by employing general packet multiplexers. See issue #362 for more details.

Development of Zino 2.0 is fully sponsored by NORDUnet, on behalf of the nordic NRENs.

Table of contents

What is Zino?

Zino Is Not OpenView.

Zino is an SNMP network monitor that began its life at Uninett in the mid 1990s. It was a homegrown system written in Tcl, specifically to monitor the routers of the Norwegian national research network (NREN), a large backbone network that connects the widely geographically dispersed higher education and research institutions of Norway. Uninett was also part of NORDUnet, the collaboration that interconnects the NRENs of the Nordic countries, and Zino is also utilized to monitor the NORDUnet backbone.

Here's a quote about its features from the README file of the original Tcl codebase:

 o Trap-driven polling; receives and interprets traps.
 o Periodic status polling (by default low frequency).
 o A simplistic event handling system.
 o A simple SMTP-like client/server protocol.
 o A TK-based user interface.

all in a little under 5000 lines of Tcl.

This project aims to port all this to Python, except for the TK-based user interface. The Python implementation keeps backwards compatibility with the "simple SMTP-like client/server protocol", so that the existing user interface clients can be re-used (such as Ritz and cuRitz).

Zino is essentially a small program that can run in the background, monitoring your router network for:

  • Link state
  • BGP session state
  • BFD session state
  • Juniper chassis alarms

All changes will result in an "event" (aka a "case"), in which Zino will log all further related changes until the case is manually closed by a human operator via the server protocol on port 8001 (essentially through some user interface).

Notifications are typically achieved by having a client program to fetch active events from the Zino server and decide from that which notifications need to be sent.

Zino has very few dependencies, other than the Python packages required to run it. Zino serializes its running state to a JSON file on disk, and can resume its work from this file when restarted.

Redundancy can thus be achieved by running two or more Zino servers in parallel. A typical solution is for one server to be the "master", and the other to be a "hot standby". To ensure the master and the standby are mostly in sync, a typical solution is to transfer the state dump from the master to the standby every 24 hours and then restarting the standby from the master's state dump. Zino clients can be typically be configured to automatically switch to using a standby server if the master is unavailable.

Installing Zino

You need a supported Python version, and these days a virtualenv for dependencies. You also need to choose one of two supported SNMP libraries, by default it is backed by a C-library, Net-SNMP.

We recommend you create a user to own zino's files instead of having everything be owned by root

See Installation for the full details.

Configuring Zino

Zino must have at minimum one configuration file: polldevs.cf, which keeps track of at least one SNMP-enabled router to monitor. See Configuring for the details.

Using Zino

This package only represents the Zino server backend. In order to meaningfully interface with Zino as a user, you will want a remote interface to Zino. Several remote interfaces exist.

  • curitz is a curses-based terminal application to interface with Zino. It is currently the best client for day-to-day use.

  • Ritz is the original Remote Interface To Zino. It is an X11 desktop application written in Tcl/Tk. Unfortunately, the source code isn't currently available.

  • Howitz is a web-based remote interface to Zino that was originally written as part of the Zino 2.0 project. However, it has since been discontinued in favor of integration with Argus using the zino-argus glue service.

Developing Zino

Contributions are welcome, at this point especially bug reports (patches welcome), missing documentation, how to's and usage tips!

See Developing Zino for tips, expectations and assumptions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zino-2.4.1.tar.gz (595.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zino-2.4.1-py3-none-any.whl (567.2 kB view details)

Uploaded Python 3

File details

Details for the file zino-2.4.1.tar.gz.

File metadata

  • Download URL: zino-2.4.1.tar.gz
  • Upload date:
  • Size: 595.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for zino-2.4.1.tar.gz
Algorithm Hash digest
SHA256 febf627c6beadafa87a87b1948ed4ea0205c3103a6f2ec19be7abf2e6e3f470a
MD5 cf9231770c89abc90b9a6b4e98eeec53
BLAKE2b-256 bd25e11ae29c870a263323abd54d58a2a9c9a54157413b830eeb58a245cd8d50

See more details on using hashes here.

File details

Details for the file zino-2.4.1-py3-none-any.whl.

File metadata

  • Download URL: zino-2.4.1-py3-none-any.whl
  • Upload date:
  • Size: 567.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for zino-2.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ca40c30ec0fb6abed776c483983d8997cae37b58c218aea1bb5da00de0284f06
MD5 41b5aaa8fa343b24db3962c6310c9028
BLAKE2b-256 5404c4300d3bc527c52babaf62ef2c9d0295ec903f8e8d5104230269ec4ed196

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page