Перейти к основному содержимому

Наблюдаемость

Healthchecks

Healthchecks обеспечивают проверку работоспособности сервиса и его зависимостей.

Проверки работоспособности

Сервис:

  • Базовая проверка готовности сервиса к обработке запросов
  • Проверка доступности БД
  • Проверка доступности Redis (Hangfire)
  • Проверка доступности RabbitMQ (подписки на события)

Внешние зависимости:

  • VkVision API (если используется)
  • Athlete API (если используется)
  • PhotoService API
  • TagatorService API

Эндпоинты

Текущие эндпоинты (реализуется в MentKit):

  • /hc — только статус (Healthy, Unhealthy, Dead)
  • /health — статус и подробное описание с указанием не пройденной проверки

Интересная идея:

  • /health/live — liveness probe (сервис запущен)
  • /health/ready — readiness probe (сервис готов принимать трафик)

Конфигурация

Healthchecks настраиваются в Kubernetes через liveness и readiness probes для автоматического перезапуска и управления трафиком.

Метрики

Метрики обработки фото

Распознавание:

  • photos_recognized_total — общее количество распознанных фото
  • photos_recognized_by_provider — количество фото по провайдерам (VkVision, Athlete)
  • photos_recognition_duration_seconds — время распознавания фото

Тегирование:

  • photos_tagged_total — общее количество протегированных фото
  • tags_created_total — общее количество проставленных тегов
  • tags_by_type — количество тегов по типам (авто, ручное, кастомные)

Нужно рассмотреть возможность объединения метрик в одной с помощью лейблов RecognitionType, Provider, State.

Метрики задач тегаторов

Пока не учитываем. Относится к TagatorService.

Задачи:

  • tagging_tasks_total — общее количество задач
  • tagging_tasks_by_state — количество задач по состояниям:
    • Созданные
    • В работе
    • Выполненные
    • Отменённые
    • Отправленные на перетег

Производительность:

  • tagging_task_creation_duration_seconds — время создания задачи
  • tagging_task_processing_duration_seconds — время обработки задачи тегатором
  • tagging_task_wait_duration_seconds — время ожидания задачи в очереди

Метрики тегаторов

Пока не учитываем. Относится к TagatorService.

Активность:

  • tagators_online_total — количество тегаторов на линии
  • tagators_works_active — количество активных работ
  • tagators_works_completed — количество завершённых работ

Эффективность:

  • tagator_tasks_completed_by_tagator — количество задач по тегаторам
  • tagator_accuracy — точность работы тегатора (процент принятых тегов)

Метрики валидации

Как идея. Проработать.

Результаты валидации:

  • validation_passed_total — количество фото, прошедших валидацию
  • validation_failed_total — количество фото, не прошедших валидацию
  • validation_sent_to_manual_total — количество фото, отправленных на ручное тегирование

Причины отправки на ручное:

  • manual_tagging_reason_no_tags — теги не найдены
  • manual_tagging_reason_mismatch — несоответствие количества лиц и номеров
  • manual_tagging_reason_strategy — по стратегии альбома

Метрики провайдеров

Как идея. Проработать.

VkVision:

  • vkvision_requests_total — количество запросов
  • vkvision_request_duration_seconds — время запроса
  • vkvision_errors_total — количество ошибок
  • vkvision_space_usage — заполненность спейсов

Athlete:

  • athlete_requests_total — количество запросов
  • athlete_request_duration_seconds — время запроса
  • athlete_callbacks_received_total — количество полученных колбеков
  • athlete_callback_processing_duration_seconds — время обработки колбека
  • athlete_errors_total — количество ошибок

Метрики инфраструктуры

Как идея. Проработать.

База данных:

  • db_query_duration_seconds — время выполнения запросов
  • db_connections_active — количество активных подключений

RabbitMQ:

  • rabbitmq_messages_consumed_total — количество обработанных сообщений
  • rabbitmq_message_processing_duration_seconds — время обработки сообщения
  • rabbitmq_errors_total — количество ошибок

Hangfire:

  • hangfire_jobs_scheduled_total — количество запланированных джоб
  • hangfire_jobs_succeeded_total — количество успешных джоб
  • hangfire_jobs_failed_total — количество упавших джоб

Мониторинг

Дашборды

Обзорный дашборд:

  • Общее количество обрабатываемых фото
  • Скорость обработки (фото/час)
  • Количество тегаторов на линии
  • Очередь задач на ручное тегирование
  • Ошибки и проблемы

Дашборд распознавания:

  • Распределение по провайдерам
  • Время распознавания
  • Процент успешного распознавания
  • Ошибки провайдеров

Дашборд тегирования:

  • Количество задач по статусам
  • Производительность тегаторов
  • Среднее время обработки задачи
  • Процент качества работы

Дашборд инфраструктуры:

  • Нагрузка на БД
  • Нагрузка на Redis
  • Состояние RabbitMQ
  • Использование ресурсов (CPU, память)

Алерты

Критичные:

  • Сервис недоступен
  • БД недоступна
  • RabbitMQ недоступен
  • Провайдеры недоступны (VkVision, Athlete)

Важные:

  • Высокая очередь необработанных фото (> 10000)
  • Высокая очередь задач на ручное тегирование (> 5000)
  • Высокий процент ошибок распознавания (> 10%)
  • Нет тегаторов на линии

Предупреждения:

  • Медленная обработка фото (> 5 мин на фото)
  • Заполненность спейсов VkVision (> 80%)
  • Высокое использование Redis (> 80%)
  • Высокая нагрузка на БД

Логирование

Уровни логирования

Error:

  • Ошибки взаимодействия с внешними сервисами
  • Ошибки обработки фото
  • Критичные ошибки БД

Warning:

  • Повторные попытки обработки
  • Проблемы валидации
  • Таймауты запросов

Information:

  • Начало и завершение обработки фото
  • Создание и завершение задач тегирования
  • Получение колбеков
  • Изменение стратегии альбома

Debug:

  • Детали запросов к провайдерам
  • Детали валидации
  • Детали работы с БД

Структурированное логирование

Использовать structured logging для удобного поиска и анализа:

{
"timestamp": "2026-01-24T10:30:45.123Z",
"level": "Information",
"message": "Photo recognized successfully",
"properties": {
"photoId": "uuid",
"albumId": "uuid",
"provider": "Athlete",
"duration": 1234,
"facesFound": 3,
"tagsFound": 2
}
}