Мониторинг
Обзор
Immich предоставляет разнообразные метрики производительности для локального мониторинга и аналитики. Эта интеграция выполняется в основном через метрики Prometheus. Однако, благодаря использованию инструментов OpenTelemetry, также доступен экспорт трассировок.
Это функция по выбору, предназначенная для мониторинга производительности Immich. Эти данные никуда не отправляются за пределы настроенной вами конфигурации.
Prometheus
Prometheus – это инструмент, который собирает метрики из различных источников, которые вы настраиваете. Он работает по стратегии «pull» – то есть периодически запрашивает метрики от каждого указанного источника. Это означает, что источник ничего не отправляет, пока это не будет запрошено. Кроме того, источник – в данном случае, Immich – должен пре доставить конечную точку, к которой Prometheus будет обращаться за метриками.
Метрики
Эти метрики существуют в различных формах:
- Счетчики, которые могут только увеличиваться. Пример: количество раз, когда был вызван конечный пункт.
- Измерители, которые могут увеличиваться или уменьшаться в определенных пределах. Пример: использование CPU.
- Гистограммы, где каждое наблюдение назначается определенному числу «корзин». Пример: время отклика, где каждая корзина – это количество миллисекунд. Этот тип наиболее сложный.
- В данном случае корзины являются накопительными; то есть наблюдение помещается не только в самую маленькую корзину, которая его содержит, но также во все корзины большего размера. Например, если у гистограммы есть три корзины для 1 мс, 5 мс и 10 мс, наблюдение в 3 мс будет отнесено как к корзине 5 мс, так и к корзине 10 мс.
Метрики в Immich группируются в категории API (вызовы конечных точек и время отклика), хост (использование памяти и CPU) и IO (запросы к внутренней базе данных, обработка изображений и т. д.). Каждая группа метрик может быть включена или отключена независимо.
Конфигурация
По умолчанию Immich не предоставляет конечную точку для метрик. Чтобы включить эту конечную точку, вы можете добавить переменную окружения IMMICH_TELEMETRY_INCLUDE=all
в ваш файл .env
. Обратите внимание, что только контейнер сервера использует эту переменную.
IMMICH_TELEMETRY_INCLUDE=all
включает все метрики. Для более детальной настройки вы можете перечислить метрики, которые должны быть включены, через запятую (например, IMMICH_TELEMETRY_INCLUDE=repo,api
). Кроме того, можно исключить конкретные метрики с помощью IMMICH_TELEMETRY_EXCLUDE
. За дополнительной информацией обращайтесь к разделу о переменных окружения.
Следующим шагом является настройка новой или существующей инстанции Prometheus для получения данных с этой конечной точки. В приведенных шагах предполагается, что у вас нет существующей инстанции Prometheus, но шаги будут аналогичными в любом случае.
Вы можете начать с определения сервиса Prometheus в файле Compose:
immich-prometheus:
container_name: immich_prometheus
ports:
# это открывает стандартный порт для Prometheus, чтобы вы могли взаимодействовать с ним
- 9090:9090
image: prom/prometheus
volumes:
# файл конфигурации Prometheus - предоставляется начальный шаблон
- ./prometheus.yml:/etc/prometheus/prometheus.yml
# именованный том, указанный в конце файла Compose; это также может быть примонтированная папка
- prometheus-data:/prometheus
Также вам нужно добавить prometheus-data
в список томов в конце файла Compose:
volumes:
model-cache:
prometheus-data:
Последней частью является файл конфигурации. Этот файл определяет (в числе прочего) источники данных, на которые должен нацелиться Prometheus. Загрузите его и разместите в одной папке с файлом Compose.
Предоставленный файл является лишь отправной точкой. Существует множество способов настроить Prometheus, поэтому не бойтесь экспериментировать!
После остановки контейнеров с помощью команды docker compose down
и их перезапуска с помощью docker compose up -d
, экземпляр Prometheus теперь будет собирать метрики с контейнеров Immich серверов и микросервисов. Заметьте, что нам не потребовалось открывать дополнительные порты для этих контейнеров - вся коммуникация осуществляется через внутреннюю сеть Docker.
Чтобы точно увидеть, какие метрики доступны, вы можете дополнительно добавить 8081:8081
к портам контейнера сервера и 8082:8082
к портам контейнера микросервисов.
Посещение конечной точки /metrics
для этих сервисов покажет те же сырые данные, которые собирает Prometheus.
Чтобы настроить эти порты, смотрите IMMICH_API_METRICS_PORT
& IMMICH_MICROSERVICES_METRICS_PORT
.
Использование
Итак, после настройки Prometheus, как просматривать метрики? Самый простой способ – использовать сам Prometheus. Посещение Prometheus покажет вам веб-интерфейс, где вы можете искать и визуализировать метрики. Вы также можете просматривать статус ваших источников данных и настраивать параметры, но это выходит за рамки данного руководства.
Grafana
Для специализированного инструмента с красивой визуализацией вы можете вместо этого использовать Grafana. Он подключается к Prometheus (и, возможно, другим источникам) для сложной визуализации данных.
Настройка Grafana схожа с Prometheus. Вы можете добавить сервис для него:
immich-grafana:
container_name: immich_grafana
command: ['./run.sh', '-disable-reporting'] # это для отключения телеметрии Grafana
ports:
- 3000:3000
image: grafana/grafana
volumes:
# сохраняет ваши красивые панели и дашборды
- grafana-data:/var/lib/grafana
И добавьте еще один том для него:
volumes:
model-cache:
prometheus-data:
grafana-data:
После остановки сервисов и их перезапуска снова вы можете теперь посетить Grafana для просмотра ваших метрик. При первом входе в систему введите admin
в качестве имени пользователя и пароля, а затем обновите ваш пароль. Затем вы можете перейти в настройки и добавить источник данных с http://immich-prometheus:9090
, чтобы направить Grafana к вашему экземпляру Prometheus.
Использование
Вы можете создать ваш первый дашборд, чтобы начать. Не забывайте сохранять его часто, иначе вы потеряете все ваши достижения!
Затем вы можете создать новый панель, указав Prometheus в качестве источника данных для нее.
-- TODO: добавить изображения и больше подробностей здесь