Tools to assist in monitoring a Python service.
Project description
PowerFlex Python Monitoring library (powerflex-monitoring)
Tools to assist in monitoring a Python service.
Installation
You can install from PyPi directly:
pip install powerflex-monitoring
Demo
See ./demo.py
for a usage example.
Also see the type hints and the docstrings.
To run the demo:
- Install docker and docker-compose
- Run
make up
- Run
docker container ls
to see the open ports and try hitting the monitoring URLs listed below
$ docker logs powerflex_monitoring_main
[INFO] Added route at port 8000: /monitoring/health/
[INFO] Added route at port 8000: /monitoring/ready/
[INFO] Added route at port 8000: /monitoring/metrics/
[INFO] 🚀 Starting monitoring server at port 8000
[INFO] Connected to NATS_ADDRESS nats:4222
[INFO] Configuration for NATS health check
[INFO] Service has been marked as ready. Cause: Service is initialized
Feature: monitoring server
from powerflex_monitoring.monitoring import MonitoringServer
- Readiness and healthiness endpoints are at
/monitoring/ready/
and/monitoring/health/
. These are useful in environments like Kubernetes: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ - Prometheus metrics are at
/monitoring/metrics/
. Use theprometheus_client
library to expose more metrics.
Feature: NATS health checker
from powerflex_monitoring.nats_health_check import NatsHealthChecker
This class checks if NATS is healthy and marks the service as unhealthy if NATS is ever down for a certain period of time.
Feature: Redis health checker
This feature checks if Redis service is healthy and marks the service as unhealthy if Redis is ever down for a certain period of time. How to use it?
- Import the
RedisHealthChecker
from powerflex_monitoring.redis_health_check import RedisHealthChecker
- Instantiate a RedisHealtChecher object with the Redis connection that you want to ckeck and the monitoring server to which you will inform the health status
redis_health_checker = RedisHealthChecker(redis_conn, monitoring_server)
- Run the async function
periodically_check_redis_health
like this:
await redis_health_checker.periodically_check_redis_health()
Feature: wait for service to be ready
This is useful when starting your integration tests. If you use the readiness check, then you can delay an action until your service is ready.
python -m powerflex_monitoring.wait_for_service_ready \
--ready-check-url http://localhost:8000/monitoring/ready/
Make sure this library is installed in your virtualenv or globally, otherwise you won't be able to run this script.
See our Makefile for an example of using this script to wait before running integration tests.
Test results
This library is unit tested with 100% coverage in Python versions 3.8 to 3.11 and in pypy 3.9.
Developing
- Install the dependencies with
make setup
. This will usepipenv
to manage a virtualenv. - Run the commands in the
Makefile
to test your code. Runpipenv shell
before running the commands or runpipenv run make ...
to run the Makefile commands withpipenv
.
make commitready
make test-unit
ormake test-unit-all-python-versions
make format-fix
make lint
make type-check-strict
- Please keep the unit test coverage at 100%.
Releasing to PyPi.org
- Make sure all code checks have passed with
make commitready
. - Make sure you commit all code you wish to release with
git commit
. - Set the version in
./src/powerflex_monitoring/VERSION
Please attempt to follow semantic versioning. - Run
make bump-version
to commit the change to theVERSION
file. - Run
make release
to upload the package to pypi.org and to push a new git tag
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for powerflex-monitoring-1.8.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca13f6aca2175249dba9f18d84c9b1726bb7233e6a7e3d17e11d21305c5a3645 |
|
MD5 | ab4db221387bbb83a4617c362cf93f5b |
|
BLAKE2b-256 | e1ee238f7d528ecc4e56e5c7e3927c118a656559cdc13d938b2f38512cd1731a |
Hashes for powerflex_monitoring-1.8.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7381327eebd67a68c25e7d6433d761d7d8d459041742b2e31b53d3b39773190 |
|
MD5 | 9d26a1709cc23c9dd38b5cb893cc643b |
|
BLAKE2b-256 | 8113bdd6219b46fdee6a0f33ec4bf51f7936b482f6737d0e9c284088977ee4ba |