ExaCheck - ExaBGP Service Health Checker
ExaCheck works in conjunction with ExaBGP to health check services and announce BGP routes depending on the state of the service.
For additional information, deployment instructions and configuration examples please check the ExaCheck website.
Why ExaCheck
ExaBGP is packaged with its own health checking script (see here) however it has some limitations which make it not suitable for my requirements. The built in health check works fine for smaller environments where each service may be running its own instance of ExaBGP (so each instance of ExaBGP runs one or only a few processes) however for larger environments where health checks are centralised it becomes unmanageable.
Some features from the built in ExaBGP health checking script are not available as they are not relevant to the use case for me:
- Management of IP address binding; the main use case of ExaCheck is for centralised health checks where the service resides on another server/container/VM
Features
- Live configuration reloads (adding/modifying/removing services)
- Health checks implemented in pure python where possible; no need to write scripts or use chains of commands to validate output
- Detailed logging available
- Configuration validation (if using live configuration reloads, configuration is validated before application)
- Out of the box sane defaults where possible
- JSON schema of configuration (see schema.json for the current schema)
Known Issues
If installing Exacheck with Python 3.12 or higher, ExaBGP is not included as a requirement and you must install ExaBGP from source. If using ExaBGP from PyPi using Python 3.12 you will get the following error when running ExaBGP:
ModuleNotFoundError: No module named 'exabgp.vendoring.six.moves'
To work around the problem, install ExaBGP from source:
python3 -m pip --no-cache-dir install "git+https://github.com/Exa-Networks/exabgp.git@4.2"
If you are using the Docker container you do not need to do anything.