Мониторинг и метрики

Эндпоинт: GET /metrics (порт 8000)

Метрики приложения

Определены в app/core/metrics.py.

photos_uploaded_total (Counter)

Общее количество загруженных фото. Инкрементируется при успешной загрузке.

http_requests_total (Counter)

Общее количество HTTP запросов. Labels: method, path, status_code. Инкрементируется middleware в main.py.

http_request_duration_seconds (Histogram)

Длительность HTTP запросов. Labels: method, path, status_code. Buckets: [0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 10.0].

storage_upload_errors_total (Counter)

Ошибки MinIO. Labels: error_code.

kafka_publish_errors_total (Counter)

Ошибки публикации в Kafka. Labels: topic.

Метрики из БД

Агрегируются в app/integrations/metrics_db.py через прямой SQL.

photo_analysis_completed_total (Counter)

Завершённые анализы по статусу (done/failed).

photo_analysis_failed_total (Counter)

Фото, перешедшие в статус failed.

photo_analysis_duration_seconds (Histogram)

Время от загрузки до завершения анализа. Buckets: [1, 5, 10, 30, 60, 120, +Inf].

analyzer_grpc_errors_total (Counter)

Сумма лишних попыток gRPC (SUM(attempts) - COUNT(done|failed)).

worker_messages_processed_total (Counter)

Обработанные сообщения Worker. Labels: result (success/error).

consumer_lag (Gauge)

Фото, ожидающие обработки (pending + processing).

messages_in_queue (Gauge)

Фото в статусе pending.

Пример вывода /metrics

# HELP http_requests_total Total HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="GET",path="/api/v1/photos/",status_code="200"} 42
http_requests_total{method="POST",path="/api/v1/photos/",status_code="202"} 15

# HELP photos_uploaded_total Total photos uploaded
# TYPE photos_uploaded_total counter
photos_uploaded_total 15

# HELP consumer_lag Photos waiting in queue (pending + processing)
# TYPE consumer_lag gauge
consumer_lag 3

Health Checks

GET /healthz -> {"status": "ok"}
GET /readyz -> {"status": "ok", "checks": {"database": "ok", "storage": "ok"}}