Skip to main content

A Django app to expose metrics to be scraped by prometheus.io.

Usage

First, install django-aetos:

pip install django-aetos

then, add the app to settings.py:

INSTALLED_APPS = [
    # ... other apps ...
    "django_aetos",
    # ... other apps ...
]

configure aetos in settings.py:

ℹ️ Important: When using django-aetos in a project behind a reverse proxy, include django-xff in your project, so that a request’s REMOTE_ADDR header gets rewritten to the correct client ip.

# on enabled ip allowlist with empty list, requests are denied
AETOS_ENABLE_IP_ALLOWLIST = True
AETOS_IP_ALLOWLIST = ["127.0.0.1"]

# enables authentication via bearer token
# if enabled with empty list, requests are denied
AETOS_ENABLE_AUTH = True
AETOS_AUTH_TOKENLIST = ["ooy9Evuth0zahka"]

and send requests to /metrics to Aetos in your urls.py:

from django.urls import include

urlpatterns = [
    path("", include("django_aetos.urls")),
    # ... your other patterns ...
]

Then, add your own metrics using the @metric_collector decorator. Your signal handler can return multiple metrics, each represented as a dict within a list of generator.

Your src/app/signals.py:

from django_aetos.signals import metric_collector


@metric_collector(category="cheap")
def metric_universes_count(sender, **kwargs):
    yield {
        "name": "universes_count",
        "help": "Total number of universes",
        "type": "counter",
        "value": 1,
    }


@metric_collector(category="expensive")
def metric_complex_calculation(sender, **kwargs):
    yield {
        "name": "complex_metric",
        "help": "An expensive calculation",
        "type": "gauge",
        "value": some_expensive_database_query(),
    }

You can do anything you like here, like make database queries or look at files in the filesystem.

Multiple Metric Endpoints

Metrics are organized by category. You can scrape different categories at different intervals:

  • /metrics - Returns ALL metrics (all categories combined)

  • /metrics/cheap - Returns only metrics tagged with category=”cheap”

  • /metrics/expensive - Returns only metrics tagged with category=”expensive”

This allows you to scrape cheap metrics frequently and expensive metrics less often.

Categories are arbitrary strings - use any names that make sense for your use case (e.g., “fast”, “slow”, “realtime”, “daily”, etc.).

Legacy Pattern

The old signal-based pattern still works for backward compatibility:

from django.dispatch import receiver
from django_aetos.signals import collect_metrics


@receiver(collect_metrics, dispatch_uid='metric_legacy')
def metric_legacy(sender, **kwargs):
    yield {
        "name": "legacy_metric",
        "help": "Using the old pattern",
        "type": "counter",
        "value": 42,
    }

Metrics registered this way appear on /metrics but not on category-specific endpoints.

To make sure your receiver actually connects, add an import to your src/app/apps.py:

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    name = "yourapp"

    def ready(self):
        from . import signals  # NOQA

Dev Setup

python3 -m venv venv
source venv/bin/activate
make setup
make install-dev

Testing

make test

Packaging

git pull
make bump-version part=minor
git push origin main v$(bump-my-version show current_version)
make build
make upload-test

once the package looks good, run make upload.

Download files

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

Source Distribution

django_aetos-0.4.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

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

django_aetos-0.4.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file django_aetos-0.4.0.tar.gz.

File metadata

  • Download URL: django_aetos-0.4.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for django_aetos-0.4.0.tar.gz
Algorithm Hash digest
SHA256 b65d54a5c016ccd6c20dba85efc9b4883e5c081df23b1b20e43c367d67177c12
MD5 1cf3cb1cfcd87b5b2771295cc559b254
BLAKE2b-256 155386d5d306b8d5b614b131a1e087938700ddfc7f1430bb86d8c82527512892

See more details on using hashes here.

File details

Details for the file django_aetos-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: django_aetos-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.9

File hashes

Hashes for django_aetos-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0cd82331453575c5ffcecfe9d648aef892970e3fb0ec9d1db8a4c7a0ebe50a07
MD5 a7584d0309b485911c5ba4a59dd20001
BLAKE2b-256 67974c43e15cb9734cd88646f31e1f8a17ac86575b01dbb7761a15109616dbac

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page