Lightweight, framework-agnostic Python library for sending metrics to Datadog, SumoLogic, or Console. Lambda/Zappa-ready with live config support.
Project description
ddog-monitoring
A lightweight, framework-agnostic Python library for sending metrics to Datadog, SumoLogic, or a local Console output. Designed for use in Django, FastAPI, or any Python app — including AWS Lambda / Zappa deployments.
Installation
pip install ddog-monitoring
Quick Start
from monitoring.client import MonitoringFacade
from monitoring.config import MonitoringConfig
# Configure once at startup
MonitoringFacade.configure(MonitoringConfig(
provider="datadog",
datadog_api_key="your-api-key",
datadog_app_key="your-app-key",
datadog_hostname="your-host",
))
# Use anywhere
provider = MonitoringFacade.get_instance()
provider.send("api.request", value=1, metric_type="count", tags=["env:prod"])
Providers
| Provider | Config keys required |
|---|---|
console |
(none) — prints metrics to stdout |
datadog |
datadog_api_key, datadog_app_key, datadog_hostname |
sumologic |
sumologic_url |
Django + AWS Lambda / Zappa Usage
For Django apps, call configure() once in AppConfig.ready(). Pass a callable factory (lambda) instead of a static config so that django-constance value changes are picked up automatically on warm Lambda starts — without a redeploy.
# main_app/apps.py
from django.apps import AppConfig
class MainAppConfig(AppConfig):
name = "main_app"
def ready(self):
from constance import config
from monitoring.client import MonitoringFacade
from monitoring.config import MonitoringConfig
MonitoringFacade.configure(lambda: MonitoringConfig(
provider=config.MONITORING_PROVIDER,
datadog_api_key=config.DATADOG_API_KEY,
datadog_app_key=config.DATADOG_APP_KEY,
datadog_hostname=config.DATADOG_HOSTNAME,
sumologic_url=config.SUMOLOGIC_URL,
))
Create a thin accessor module so views, management commands, and middleware never import MonitoringFacade directly:
# main_app/monitor.py
from monitoring.client import MonitoringFacade
def get_monitor():
return MonitoringFacade.get_instance()
# views.py
from .monitor import get_monitor
def my_view(request):
get_monitor().send("api.hit", value=1, metric_type="count", tags=["endpoint:my_view"])
How warm-start caching works
On every get_instance() call the library fetches the current config (via your factory) and compares it using Pydantic field equality. The provider is only recreated when config actually changes — otherwise the cached instance is reused immediately, keeping warm starts fast.
Decorators
Track function execution time and errors automatically:
from monitoring.decorators import track_metric
@track_metric("my_function")
def my_function():
...
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ddog_monitoring-0.4.0.tar.gz.
File metadata
- Download URL: ddog_monitoring-0.4.0.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d34b754c0c590733e8615ccc1f7ca268b9ff104344e587ec37d9eb98e97cc22
|
|
| MD5 |
e32398595549f51ade8d26525cfb991a
|
|
| BLAKE2b-256 |
0ccf0d0aa621d170e08bda0667cc9f40819bea23f5834e98cf123113e0ade003
|
File details
Details for the file ddog_monitoring-0.4.0-py3-none-any.whl.
File metadata
- Download URL: ddog_monitoring-0.4.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc8ac4454c7d269a9140b426a72efc088b227c3e3cbdd66d8bf8557845529c61
|
|
| MD5 |
6f0a8624f8a2d25dbbccf94d2c26bf1a
|
|
| BLAKE2b-256 |
3cb2264ebb598631102f052e59a322e6680a79cfc49b66de6d0c35fc8e105433
|