Internal standardized metrics library
Project description
📊 fast-telemetry
Production-ready Prometheus integration for FastAPI, FastStream, and Python Workers.
fast-telemetry — это "клей", который объединяет метрики вашего микросервиса в единый стандарт. Библиотека навязывает
правильные практики (единые метки env, version, service) и предоставляет удобные абстракции для HTTP-сервисов,
обработчиков очередей и периодических задач.
🌟 Особенности
- Единый стандарт: Автоматически добавляет метки
service,env,versionко всем метрикам. - FastAPI: Автоконфигурация через
Instrumentator, исключение служебных ручек (/metricsи других переданных). - FastStream: Поддержка RabbitMQ, Kafka, Redis, NATS "из коробки" (автоопределение драйвера).
- Workers & Cron:
- Поддержка Long-running процессов (daemon thread server).
- Поддержка Batch-jobs (Pushgateway) через универсальный контекстный менеджер (sync/async).
- Декораторы: Удобные
@measure_taskи@track_exception, которые сами понимают, синхронная функция или асинхронная. - Безопасность типов: Полная типизация (mypy strict).
📦 Установка
pip install fast-telemetry
🚀 Quick Start
1. Core Concepts
В основе всего лежит класс PrometheusMetrics (или его наследники). Вы инициализируете его один раз при старте
приложения.
from fast_telemetry import PrometheusMetrics
metrics = PrometheusMetrics(
service_name="payment_service",
version="1.0.4",
env="production"
)
# Использование в коде
metrics.inc_error("validation_error")
with metrics.timer("db_query", long_task=False):
# ... logic ...
pass
2. FastAPI Integration
Автоматически добавляет эндпоинт /metrics и собирает RED-метрики (Requests, Errors, Duration).
from fastapi import FastAPI
from fast_telemetry import PrometheusMetrics, setup_fastapi_metrics
app = FastAPI()
metrics = PrometheusMetrics(service_name="api_core", env="dev", version="1.2.3")
# Настройка (исключает /docs, /openapi.json + readiness)
setup_fastapi_metrics(app, metrics, excluded_routes=["/readiness"])
@app.get("/")
@metrics.measure_task("root_handler", long_task=False)
async def root():
return {"status": "ok"}
3. FastStream Integration
Поддерживает автоматическое определение брокера (Rabbit/Kafka/Redis/NATS) и инъекцию middleware.
from faststream.asgi import AsgiFastStream, make_ping_asgi
from faststream.rabbit import RabbitBroker
from fast_telemetry import PrometheusMetrics, setup_faststream_metrics
broker = RabbitBroker("amqp://guest:guest@localhost:5672/")
app = AsgiFastStream(
broker,
asgi_routes=[
("/health", make_ping_asgi(broker))
],
lifespan=None,
asyncapi_path="/docs",
)
metrics = PrometheusMetrics(service_name="worker_core", env="dev")
setup_faststream_metrics(app, metrics)
4. Workers & Cron Jobs
Для скриптов без веб-сервера. Поддерживает два режима:
- Daemon Server (для бесконечных циклов).
- Push Gateway (для скриптов, запускаемых по расписанию).
import asyncio
from fast_telemetry import WorkerMetrics
metrics = WorkerMetrics(service_name="nightly_job", env="prod")
# --- Вариант А: Long-running worker ---
def run_worker():
# Запускает HTTP сервер в фоновом потоке
metrics.start_server(port=8000)
while True:
process_data()
# --- Вариант Б: Batch Job (Cron) ---
# Универсальный трекер (работает и с with, и с async with)
async def run_batch_job():
# Автоматически отправит метрики в Pushgateway при выходе из блока
# Группирует по instance_id, чтобы воркеры не перезатирали друг друга
async with metrics.track_job(gateway_url="http://pushgateway:9091", timeout=5.0):
await do_heavy_calculation()
metrics.inc_error("calc_error")
if __name__ == "__main__":
asyncio.run(run_batch_job())
🛠 Декораторы
Библиотека предоставляет "умные" декораторы, которые работают с sync и async функциями прозрачно.
@track_exception()
Считает количество исключений. Использует имя класса исключения как метку.
@metrics.track_exception
async def dangerous_operation():
raise ValueError("Oops")
# Увеличит счетчик fasttelemetry_business_errors_total{error_type="ValueError", ...}
@measure_task("task_name")
Замеряет время выполнения функции (Histogram).
@metrics.measure_task("image_processing")
def process_image(img):
time.sleep(1)
📊 Grafana & Prometheus
Библиотека экспортирует следующие базовые метрики:
fasttelemetry_app_info(Gauge) — всегда1. Содержит меткиversion,env,service. Используйте для аннотаций деплоев на графиках.fasttelemetry_business_errors_total(Counter) — счетчик ошибок бизнес-логики.fasttelemetry_task_processing_seconds(Histogram) — время выполнения внутренних задач.http_requests_...— fastapi.json (если используется FastAPI).faststream_...— faststream.json (если используется FastStream).
📈 Base Metrics & Grafana Dashboard
Библиотека предоставляет "Ready-to-use" набор метрик
Metric Schema
| Metric Name | Type | Labels | Description |
|---|---|---|---|
fasttelemetry_app_info |
Gauge | env, service, version |
Информация о запущенном инстансе. Всегда 1. |
fasttelemetry_business_errors_total |
Counter | error_type |
Количество ошибок бизнес-логики (пойманных через track_exception или вручную). |
fasttelemetry_task_processing_seconds |
Histogram | task_type |
Время выполнения задач (обернутых в @measure_task или timer). |
fasttelemetry_long_task_processing_seconds |
Histogram | task_type |
Время выполнения долгих задач (обернутых в @measure_task или timer). |
⚙️ Configuration
Вы можете передать параметры явно в __init__ или использовать переменные окружения:
| Environment Variable | Description | Default |
|---|---|---|
APP_ENV |
Окружение (prod/dev/stage) | dev |
APP_VERSION |
Версия приложения | unknown |
🖥️ Grafana Dashboard JSON
Дашборды можно импортировать из папки
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
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 fast_telemetry-1.3.0b0.tar.gz.
File metadata
- Download URL: fast_telemetry-1.3.0b0.tar.gz
- Upload date:
- Size: 116.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf274bf1a102aacf50c574e0fabc78a710a1a5b6d3968674ea5d91e1086ad8f5
|
|
| MD5 |
7278a10c2d7f312263bcf34a07808cc9
|
|
| BLAKE2b-256 |
c99e27977a6ef6bdcd8a32633377ae2a8f0ceb2503d6003b7fbdddca92eb0951
|
File details
Details for the file fast_telemetry-1.3.0b0-py3-none-any.whl.
File metadata
- Download URL: fast_telemetry-1.3.0b0-py3-none-any.whl
- Upload date:
- Size: 21.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
582643935edd4d0ec1a8f7dda3e86cc5e1adc9fea28847de65187f9d62fc6b9d
|
|
| MD5 |
4a885139d5cbeaf85a360d7f918e9e75
|
|
| BLAKE2b-256 |
df7c37e541b33e710873f3e49bdaf9db1ac15d8270c8ff5d87dbfc93f90aed1a
|